Don't send activities to "null" endpoints
authorMichael <heluecht@pirati.ca>
Thu, 20 Jun 2019 03:06:34 +0000 (03:06 +0000)
committerMichael <heluecht@pirati.ca>
Thu, 20 Jun 2019 03:06:34 +0000 (03:06 +0000)
src/Model/APContact.php
src/Protocol/ActivityPub/Transmitter.php

index cfbfa68..b027d6c 100644 (file)
@@ -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']);
index 81b8bc1..7256806 100644 (file)
@@ -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)) {