]> git.mxchange.org Git - friendica.git/blobdiff - src/Protocol/ActivityPub/Processor.php
Merge pull request #9261 from annando/relay-distribution
[friendica.git] / src / Protocol / ActivityPub / Processor.php
index a239ae7a1ac964f2b4b588501fc57a067a71e656..5d5bfc0b1c20b80fb91f1fd7df99220a9f2ed5ba 100644 (file)
@@ -272,6 +272,7 @@ class Processor
 
                $item = self::processContent($activity, $item);
                if (empty($item)) {
+                       Logger::info('Message was not processed');
                        return [];
                }
 
@@ -520,6 +521,18 @@ class Processor
                                        $item['post-type'] = Item::PT_ARTICLE;
                        }
 
+                       if (in_array($item['post-type'], [Item::PT_COMMENT, Item::PT_GLOBAL, Item::PT_ARTICLE])) {
+                               if (!empty($activity['from-relay'])) {
+                                       $item['post-type'] = Item::PT_RELAY;
+                               } elseif (!empty($activity['thread-completion'])) {
+                                       $item['post-type'] = Item::PT_FETCHED;
+                               }
+                       }
+
+                       if (!empty($activity['from-relay'])) {
+                               $item['causer-id'] = $activity['from-relay'];
+                       }
+
                        if ($item['isForum'] ?? false) {
                                $item['contact-id'] = Contact::getIdForURL($activity['actor'], $receiver);
                        } else {
@@ -687,12 +700,13 @@ class Processor
        /**
         * Fetches missing posts
         *
-        * @param string $url message URL
-        * @param array $child activity array with the child of this message
+        * @param string $url         message URL
+        * @param array  $child       activity array with the child of this message
+        * @param string $relay_actor Relay actor
         * @return string fetched message URL
         * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
-       public static function fetchMissingActivity(string $url, array $child = [])
+       public static function fetchMissingActivity(string $url, array $child = [], string $relay_actor = '')
        {
                if (!empty($child['receiver'])) {
                        $uid = ActivityPub\Receiver::getFirstUserFromReceivers($child['receiver']);
@@ -711,15 +725,22 @@ class Processor
                        return '';
                }
 
-               if (!empty($child['author'])) {
-                       $actor = $child['author'];
-               } elseif (!empty($object['actor'])) {
-                       $actor = $object['actor'];
+               if (!empty($object['actor'])) {
+                       $object_actor = $object['actor'];
                } elseif (!empty($object['attributedTo'])) {
-                       $actor = $object['attributedTo'];
+                       $object_actor = $object['attributedTo'];
                } else {
                        // Shouldn't happen
-                       $actor = '';
+                       $object_actor = '';
+               }
+
+               $signer = [$object_actor];
+
+               if (!empty($child['author'])) {
+                       $actor = $child['author'];
+                       $signer[] = $actor;
+               } else {
+                       $actor = $object_actor;
                }
 
                if (!empty($object['published'])) {
@@ -744,8 +765,9 @@ class Processor
                $ldactivity = JsonLD::compact($activity);
 
                $ldactivity['thread-completion'] = true;
+               $ldactivity['from-relay'] = Contact::getIdForURL($relay_actor);
 
-               ActivityPub\Receiver::processActivity($ldactivity, json_encode($activity), $uid, true, false, [$actor]);
+               ActivityPub\Receiver::processActivity($ldactivity, json_encode($activity), $uid, true, false, $signer);
 
                Logger::notice('Activity had been fetched and processed.', ['url' => $url, 'object' => $activity['id']]);