diff --git a/src/Protocol/ActivityPub/Processor.php b/src/Protocol/ActivityPub/Processor.php index 05e59fd3c1..69da8b7e5c 100644 --- a/src/Protocol/ActivityPub/Processor.php +++ b/src/Protocol/ActivityPub/Processor.php @@ -297,6 +297,7 @@ class Processor $cid = Contact::getIdForURL($activity['actor'], $uid); if (!empty($cid)) { + self::switchContact($cid); $contact = DBA::selectFirst('contact', [], ['id' => $cid, 'network' => Protocol::NATIVE_SUPPORT]); } else { $contact = false; @@ -311,11 +312,6 @@ class Processor return; } - $contact = DBA::selectFirst('contact', ['network'], ['id' => $cid]); - if ($contact['network'] != Protocol::ACTIVITYPUB) { - Contact::updateFromProbe($cid, Protocol::ACTIVITYPUB); - } - DBA::update('contact', ['hub-verify' => $activity['id']], ['id' => $cid]); logger('Follow user ' . $uid . ' from contact ' . $cid . ' with id ' . $activity['id']); } @@ -381,6 +377,8 @@ class Processor return; } + self::switchContact($cid); + $fields = ['pending' => false]; $contact = DBA::selectFirst('contact', ['rel'], ['id' => $cid]); @@ -413,6 +411,8 @@ class Processor return; } + self::switchContact($cid); + if (DBA::exists('contact', ['id' => $cid, 'rel' => Contact::SHARING, 'pending' => true])) { Contact::remove($cid); logger('Rejected contact request from contact ' . $cid . ' for user ' . $uid . ' - contact had been removed.', LOGGER_DEBUG); @@ -464,6 +464,8 @@ class Processor return; } + self::switchContact($cid); + $contact = DBA::selectFirst('contact', [], ['id' => $cid]); if (!DBA::isResult($contact)) { return; @@ -472,4 +474,20 @@ class Processor Contact::removeFollower($owner, $contact); logger('Undo following request from contact ' . $cid . ' for user ' . $uid, LOGGER_DEBUG); } + + /** + * Switches a contact to AP if needed + * + * @param integer $cid Contact ID + */ + private static function switchContact($cid) + { + $contact = DBA::selectFirst('contact', ['network'], ['id' => $cid, 'network' => Protocol::NATIVE_SUPPORT]); + if (!DBA::isResult($contact) || ($contact['network'] == Protocol::ACTIVITYPUB)) { + return; + } + + logger('Change existing contact ' . $cid . ' from ' . $contact['network'] . ' to ActivityPub.'); + Contact::updateFromProbe($cid, Protocol::ACTIVITYPUB); + } }