X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FProtocol%2FActivityPub%2FReceiver.php;h=1bc6f9041545dcdfb594e28fd92190e3b6c332ed;hb=07cea24430420cb0ac2b1d8f870d7292002c7faf;hp=a8b5a18db10136a78c01ad15961b479ae3b5f508;hpb=a248da8f2e720243702426d27e9394ddbac9d0d2;p=friendica.git diff --git a/src/Protocol/ActivityPub/Receiver.php b/src/Protocol/ActivityPub/Receiver.php index a8b5a18db1..1bc6f90415 100644 --- a/src/Protocol/ActivityPub/Receiver.php +++ b/src/Protocol/ActivityPub/Receiver.php @@ -12,6 +12,7 @@ use Friendica\Model\APContact; use Friendica\Model\Conversation; use Friendica\Model\Item; use Friendica\Model\User; +use Friendica\Protocol\Activity; use Friendica\Protocol\ActivityPub; use Friendica\Util\DateTimeFormat; use Friendica\Util\HTTPSignature; @@ -46,8 +47,8 @@ class Receiver */ public static function isRequest() { - return stristr(defaults($_SERVER, 'HTTP_ACCEPT', ''), 'application/activity+json') || - stristr(defaults($_SERVER, 'HTTP_ACCEPT', ''), 'application/ld+json'); + return stristr($_SERVER['HTTP_ACCEPT'] ?? '', 'application/activity+json') || + stristr($_SERVER['HTTP_ACCEPT'] ?? '', 'application/ld+json'); } /** @@ -260,7 +261,7 @@ class Receiver $object_data['type'] = $type; $object_data['actor'] = $actor; $object_data['item_receiver'] = $receivers; - $object_data['receiver'] = array_merge(defaults($object_data, 'receiver', []), $receivers); + $object_data['receiver'] = array_merge($object_data['receiver'] ?? [], $receivers); Logger::log('Processing ' . $object_data['type'] . ' ' . $object_data['object_type'] . ' ' . $object_data['id'], Logger::DEBUG); @@ -301,9 +302,9 @@ class Receiver $conversation = [ 'protocol' => Conversation::PARCEL_ACTIVITYPUB, 'item-uri' => $activity['id'], - 'reply-to-uri' => defaults($activity, 'reply-to-id', ''), - 'conversation-href' => defaults($activity, 'context', ''), - 'conversation-uri' => defaults($activity, 'conversation', ''), + 'reply-to-uri' => $activity['reply-to-id'] ?? '', + 'conversation-href' => $activity['context'] ?? '', + 'conversation-uri' => $activity['conversation'] ?? '', 'source' => $body, 'received' => DateTimeFormat::utcNow()]; @@ -386,41 +387,40 @@ class Receiver case 'as:Announce': if (in_array($object_data['object_type'], self::CONTENT_TYPES)) { $profile = APContact::getByURL($object_data['actor']); - if ($profile['type'] == 'Person') { - // Reshared posts from persons appear as summary at the bottom - // If this isn't set, then a single reshare appears on top. This is used for groups. - $object_data['thread-completion'] = true; - } + // Reshared posts from persons appear as summary at the bottom + // If this isn't set, then a single reshare appears on top. This is used for groups. + $object_data['thread-completion'] = ($profile['type'] != 'Group'); + ActivityPub\Processor::createItem($object_data); // Add the bottom reshare information only for persons - if ($profile['type'] == 'Person') { + if ($profile['type'] != 'Group') { $announce_object_data = self::processObject($activity); $announce_object_data['name'] = $type; $announce_object_data['author'] = JsonLD::fetchElement($activity, 'as:actor', '@id'); $announce_object_data['object_id'] = $object_data['object_id']; $announce_object_data['object_type'] = $object_data['object_type']; - ActivityPub\Processor::createActivity($announce_object_data, ACTIVITY2_ANNOUNCE); + ActivityPub\Processor::createActivity($announce_object_data, Activity::ANNOUNCE); } } break; case 'as:Like': if (in_array($object_data['object_type'], self::CONTENT_TYPES)) { - ActivityPub\Processor::createActivity($object_data, ACTIVITY_LIKE); + ActivityPub\Processor::createActivity($object_data, Activity::LIKE); } break; case 'as:Dislike': if (in_array($object_data['object_type'], self::CONTENT_TYPES)) { - ActivityPub\Processor::createActivity($object_data, ACTIVITY_DISLIKE); + ActivityPub\Processor::createActivity($object_data, Activity::DISLIKE); } break; case 'as:TentativeAccept': if (in_array($object_data['object_type'], self::CONTENT_TYPES)) { - ActivityPub\Processor::createActivity($object_data, ACTIVITY_ATTENDMAYBE); + ActivityPub\Processor::createActivity($object_data, Activity::ATTENDMAYBE); } break; @@ -445,7 +445,7 @@ class Receiver ActivityPub\Processor::followUser($object_data); } elseif (in_array($object_data['object_type'], self::CONTENT_TYPES)) { $object_data['reply-to-id'] = $object_data['object_id']; - ActivityPub\Processor::createActivity($object_data, ACTIVITY_FOLLOW); + ActivityPub\Processor::createActivity($object_data, Activity::FOLLOW); } break; @@ -453,7 +453,7 @@ class Receiver if ($object_data['object_type'] == 'as:Follow') { ActivityPub\Processor::acceptFollowUser($object_data); } elseif (in_array($object_data['object_type'], self::CONTENT_TYPES)) { - ActivityPub\Processor::createActivity($object_data, ACTIVITY_ATTEND); + ActivityPub\Processor::createActivity($object_data, Activity::ATTEND); } break; @@ -461,7 +461,7 @@ class Receiver if ($object_data['object_type'] == 'as:Follow') { ActivityPub\Processor::rejectFollowUser($object_data); } elseif (in_array($object_data['object_type'], self::CONTENT_TYPES)) { - ActivityPub\Processor::createActivity($object_data, ACTIVITY_ATTENDNO); + ActivityPub\Processor::createActivity($object_data, Activity::ATTENDNO); } break; @@ -509,7 +509,7 @@ class Receiver if (!empty($actor)) { $profile = APContact::getByURL($actor); - $followers = defaults($profile, 'followers', ''); + $followers = $profile['followers'] ?? ''; Logger::log('Actor: ' . $actor . ' - Followers: ' . $followers, Logger::DEBUG); } else { @@ -657,27 +657,19 @@ class Receiver */ public static function switchContact($cid, $uid, $url) { - $profile = ActivityPub::probeProfile($url); - if (empty($profile)) { + if (DBA::exists('contact', ['id' => $cid, 'network' => Protocol::ACTIVITYPUB])) { + Logger::info('Contact is already ActivityPub', ['id' => $cid, 'uid' => $uid, 'url' => $url]); return; } - Logger::log('Switch contact ' . $cid . ' (' . $profile['url'] . ') for user ' . $uid . ' to ActivityPub'); - - $photo = defaults($profile, 'photo', null); - unset($profile['photo']); - unset($profile['baseurl']); - unset($profile['guid']); - - $profile['nurl'] = Strings::normaliseLink($profile['url']); - DBA::update('contact', $profile, ['id' => $cid]); - - Contact::updateAvatar($photo, $uid, $cid); + if (Contact::updateFromProbe($cid, '', true)) { + Logger::info('Update was successful', ['id' => $cid, 'uid' => $uid, 'url' => $url]); + } // Send a new follow request to be sure that the connection still exists - if (($uid != 0) && DBA::exists('contact', ['id' => $cid, 'rel' => [Contact::SHARING, Contact::FRIEND]])) { - ActivityPub\Transmitter::sendActivity('Follow', $profile['url'], $uid); - Logger::log('Send a new follow request to ' . $profile['url'] . ' for user ' . $uid, Logger::DEBUG); + if (($uid != 0) && DBA::exists('contact', ['id' => $cid, 'rel' => [Contact::SHARING, Contact::FRIEND], 'network' => Protocol::ACTIVITYPUB])) { + Logger::info('Contact had been switched to ActivityPub. Sending a new follow request.', ['uid' => $uid, 'url' => $url]); + ActivityPub\Transmitter::sendActivity('Follow', $url, $uid); } }