From 2e4e8bdf0aad96b715a387ec8834a9759ed87ad8 Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 20 Jun 2019 03:06:34 +0000 Subject: [PATCH] Don't send activities to "null" endpoints --- src/Model/APContact.php | 16 +++++++++++----- src/Protocol/ActivityPub/Transmitter.php | 20 ++++++++++++++++++++ 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/src/Model/APContact.php b/src/Model/APContact.php index cfbfa683cf..b027d6c478 100644 --- a/src/Model/APContact.php +++ b/src/Model/APContact.php @@ -87,6 +87,8 @@ class APContact extends BaseObject return false; } + $fetched_contact = false; + if (empty($update)) { if (is_null($update)) { $ref_update = DateTimeFormat::utc('now - 1 month'); @@ -110,24 +112,28 @@ class APContact extends BaseObject if (!is_null($update)) { return DBA::isResult($apcontact) ? $apcontact : false; } + + if (DBA::isResult($apcontact)) { + $fetched_contact = $apcontact; + } } if (empty(parse_url($url, PHP_URL_SCHEME))) { $url = self::addrToUrl($url); if (empty($url)) { - return false; + return $fetched_contact; } } $data = ActivityPub::fetchContent($url); if (empty($data)) { - return false; + return $fetched_contact; } $compacted = JsonLD::compact($data); if (empty($compacted['@id'])) { - return false; + return $fetched_contact; } $apcontact = []; @@ -168,12 +174,12 @@ class APContact extends BaseObject // Quit if none of the basic values are set if (empty($apcontact['url']) || empty($apcontact['inbox']) || empty($apcontact['type'])) { - return false; + return $fetched_contact; } // Quit if this doesn't seem to be an account at all if (!in_array($apcontact['type'], ActivityPub::ACCOUNT_TYPES)) { - return false; + return $fetched_contact; } $parts = parse_url($apcontact['url']); diff --git a/src/Protocol/ActivityPub/Transmitter.php b/src/Protocol/ActivityPub/Transmitter.php index 81b8bc1de3..7256806329 100644 --- a/src/Protocol/ActivityPub/Transmitter.php +++ b/src/Protocol/ActivityPub/Transmitter.php @@ -1479,6 +1479,10 @@ class Transmitter public static function sendActivity($activity, $target, $uid, $id = '') { $profile = APContact::getByURL($target); + if (empty($profile['inbox'])) { + Logger::warning('No inbox found for target', ['target' => $target, 'profile' => $profile]); + return; + } $owner = User::getOwnerDataById($uid); @@ -1515,6 +1519,10 @@ class Transmitter public static function sendFollowObject($object, $target, $uid = 0) { $profile = APContact::getByURL($target); + if (empty($profile['inbox'])) { + Logger::warning('No inbox found for target', ['target' => $target, 'profile' => $profile]); + return; + } if (empty($uid)) { // Fetch the list of administrators @@ -1561,6 +1569,10 @@ class Transmitter public static function sendContactAccept($target, $id, $uid) { $profile = APContact::getByURL($target); + if (empty($profile['inbox'])) { + Logger::warning('No inbox found for target', ['target' => $target, 'profile' => $profile]); + return; + } $owner = User::getOwnerDataById($uid); $data = ['@context' => ActivityPub::CONTEXT, @@ -1594,6 +1606,10 @@ class Transmitter public static function sendContactReject($target, $id, $uid) { $profile = APContact::getByURL($target); + if (empty($profile['inbox'])) { + Logger::warning('No inbox found for target', ['target' => $target, 'profile' => $profile]); + return; + } $owner = User::getOwnerDataById($uid); $data = ['@context' => ActivityPub::CONTEXT, @@ -1627,6 +1643,10 @@ class Transmitter public static function sendContactUndo($target, $cid, $uid) { $profile = APContact::getByURL($target); + if (empty($profile['inbox'])) { + Logger::warning('No inbox found for target', ['target' => $target, 'profile' => $profile]); + return; + } $object_id = self::activityIDFromContact($cid); if (empty($object_id)) {