From a0d30b68724c0012abf35899bc726cc51b3088c8 Mon Sep 17 00:00:00 2001 From: tenma Date: Sun, 20 Oct 2019 20:07:46 +0100 Subject: [PATCH] [ActivityPub] Fix some small known problems ActivityPubPlugin: - Rework onProfileDeleteRelated to account for the tables _rsa and _pending_follow_requests - Update onEndShowAccountProfileBlock to stop creating the ap_profile if it doesn't exist (we'll handle this in a different manner) Activitypub_profile: - Remove unnecessary code from from_profile method and add return type information Explorer: - Update travel_collection to call itself instead of _lookup, that was wrong --- plugins/ActivityPub/ActivityPubPlugin.php | 25 +++++++++---------- .../classes/Activitypub_profile.php | 5 ++-- plugins/ActivityPub/lib/explorer.php | 2 +- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/plugins/ActivityPub/ActivityPubPlugin.php b/plugins/ActivityPub/ActivityPubPlugin.php index 07253c2eb4..bd2df077ab 100644 --- a/plugins/ActivityPub/ActivityPubPlugin.php +++ b/plugins/ActivityPub/ActivityPubPlugin.php @@ -345,18 +345,17 @@ class ActivityPubPlugin extends Plugin */ public function onProfileDeleteRelated(Profile $profile, array &$related): void { - if ($profile->isLocal()) { - return; - } + $related[] = 'Activitypub_profile'; + $related[] = 'Activitypub_rsa'; - try { - $aprofile = Activitypub_profile::getKV('profile_id', $profile->getID()); - if ($aprofile instanceof Activitypub_profile) { - // mark for deletion - $related[] = 'Activitypub_profile'; + // pending_follow_requests doesn't have a profile_id column, + // so we must handle it manually + $follow = new Activitypub_pending_follow_requests(null, $profile->getID()); + + if ($follow->find()) { + while ($follow->fetch()) { + $follow->delete(); } - } catch (Exception $e) { - // nothing to do } } @@ -386,9 +385,9 @@ class ActivityPubPlugin extends Plugin if ($profile->isLocal()) { return true; } - try { - Activitypub_profile::from_profile($profile); - } catch (Exception $e) { + + $aprofile = Activitypub_profile::getKV('profile_id', $profile->getID()); + if (!$aprofile instanceof Activitypub_profile) { // Not a remote ActivityPub_profile! Maybe some other network // that has imported a non-local user (e.g.: OStatus)? return true; diff --git a/plugins/ActivityPub/classes/Activitypub_profile.php b/plugins/ActivityPub/classes/Activitypub_profile.php index b73d4bc131..954bf69706 100644 --- a/plugins/ActivityPub/classes/Activitypub_profile.php +++ b/plugins/ActivityPub/classes/Activitypub_profile.php @@ -201,7 +201,7 @@ class Activitypub_profile extends Managed_DataObject * @throws Exception if no Activitypub_profile exists for given Profile * @author Diogo Cordeiro */ - public static function from_profile(Profile $profile) + public static function from_profile(Profile $profile): Activitypub_profile { $profile_id = $profile->getID(); @@ -216,8 +216,9 @@ class Activitypub_profile extends Managed_DataObject } } + // extend the ap_profile with some information we + // don't store in the database $fields = [ - 'uri' => 'profileurl', 'nickname' => 'nickname', 'fullname' => 'fullname', 'bio' => 'bio' diff --git a/plugins/ActivityPub/lib/explorer.php b/plugins/ActivityPub/lib/explorer.php index da8718951c..7b1b2d5b6e 100644 --- a/plugins/ActivityPub/lib/explorer.php +++ b/plugins/ActivityPub/lib/explorer.php @@ -450,7 +450,7 @@ class Activitypub_explorer } // Go through entire collection if (!is_null($res["next"])) { - $this->_lookup($res["next"]); + $this->travel_collection($res["next"]); } return true;