From ca12d1549b3269234186dac6b7c4f87a4fc1987f Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 23 Dec 2022 22:11:50 +0000 Subject: [PATCH 1/3] AP: We can now store received reports --- src/DI.php | 10 ++++++++ src/Protocol/ActivityPub/Processor.php | 33 ++++++++++++++++++++++++++ src/Protocol/ActivityPub/Receiver.php | 17 ++++++++++++- 3 files changed, 59 insertions(+), 1 deletion(-) diff --git a/src/DI.php b/src/DI.php index 59f48fcb5..bf2b5a237 100644 --- a/src/DI.php +++ b/src/DI.php @@ -532,6 +532,16 @@ abstract class DI return self::$dice->create(Contact\Introduction\Factory\Introduction::class); } + public static function report(): Moderation\Repository\Report + { + return self::$dice->create(Moderation\Repository\Report::class); + } + + public static function reportFactory(): Moderation\Factory\Report + { + return self::$dice->create(Moderation\Factory\Report::class); + } + public static function localRelationship(): Contact\LocalRelationship\Repository\LocalRelationship { return self::$dice->create(Contact\LocalRelationship\Repository\LocalRelationship::class); diff --git a/src/Protocol/ActivityPub/Processor.php b/src/Protocol/ActivityPub/Processor.php index d689ba72a..a4333217d 100644 --- a/src/Protocol/ActivityPub/Processor.php +++ b/src/Protocol/ActivityPub/Processor.php @@ -1821,6 +1821,39 @@ class Processor Queue::remove($activity); } + /** + * Report a user + * + * @param array $activity + * @return void + * @throws \Exception + */ + public static function ReportAccount(array $activity) + { + $account_id = Contact::getIdForURL($activity['object_id']); + if (empty($account_id)) { + Logger::info('Unknown account', ['activity' => $activity]); + Queue::remove($activity); + return; + } + + $status_ids = $activity['object_ids']; + array_shift($status_ids); + + $uri_ids = []; + foreach ($status_ids as $status_id) { + $post = Post::selectFirst(['uri-id'], ['uri' => $status_id]); + if (!empty($post['uri-id'])) { + $uri_ids[] = $post['uri-id']; + } + } + + $report = DI::reportFactory()->createFromReportsRequest(0, $account_id, $activity['content'], false, $uri_ids); + DI::report()->save($report); + + Logger::info('Stored report', ['account_id' => $account_id, 'comment' => $activity['content'], 'status_ids' => $status_ids]); + } + /** * Accept a follow request * diff --git a/src/Protocol/ActivityPub/Receiver.php b/src/Protocol/ActivityPub/Receiver.php index cb76ca7e1..85965d712 100644 --- a/src/Protocol/ActivityPub/Receiver.php +++ b/src/Protocol/ActivityPub/Receiver.php @@ -406,7 +406,14 @@ class Receiver } // Any activities on account types must not be altered - if (in_array($object_type, self::ACCOUNT_TYPES)) { + if (in_array($type, ['as:Flag'])) { + $object_data = []; + $object_data['id'] = JsonLD::fetchElement($activity, '@id'); + $object_data['object_id'] = JsonLD::fetchElement($activity, 'as:object', '@id'); + $object_data['object_ids'] = JsonLD::fetchElementArray($activity, 'as:object', '@id'); + $object_data['content'] = JsonLD::fetchElement($activity, 'as:content', '@type'); + $object_data['push'] = $push; + } elseif (in_array($object_type, self::ACCOUNT_TYPES)) { $object_data = []; $object_data['id'] = JsonLD::fetchElement($activity, '@id'); $object_data['object_id'] = JsonLD::fetchElement($activity, 'as:object', '@id'); @@ -843,6 +850,14 @@ class Receiver } break; + case 'as:Flag': + if (in_array($object_data['object_type'], self::ACCOUNT_TYPES)) { + ActivityPub\Processor::ReportAccount($object_data); + } else { + return false; + } + break; + case 'as:Remove': if (in_array($object_data['object_type'], self::CONTENT_TYPES)) { ActivityPub\Processor::removeFromFeaturedCollection($object_data); From 72e1d5d417375effc307227a19c4152ac67ce8b5 Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 23 Dec 2022 22:43:32 +0000 Subject: [PATCH 2/3] Fix storing reports --- src/Moderation/Repository/Report.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Moderation/Repository/Report.php b/src/Moderation/Repository/Report.php index 3ffc0de8a..75a7f06dc 100644 --- a/src/Moderation/Repository/Report.php +++ b/src/Moderation/Repository/Report.php @@ -45,7 +45,7 @@ class Report extends \Friendica\BaseRepository $this->factory = $factory; } - public function selectOneById(int $lastInsertId): \Friendica\Moderation\Factory\Report + public function selectOneById(int $lastInsertId): \Friendica\Moderation\Entity\Report { return $this->_selectOne(['id' => $lastInsertId]); } @@ -59,6 +59,8 @@ class Report extends \Friendica\BaseRepository 'forward' => $Report->forward, ]; + $postUriIds = $Report->postUriIds; + if ($Report->id) { $this->db->update(self::$table_name, $fields, ['id' => $Report->id]); } else { @@ -70,7 +72,7 @@ class Report extends \Friendica\BaseRepository $this->db->delete('report-post', ['rid' => $Report->id]); - foreach ($Report->postUriIds as $uriId) { + foreach ($postUriIds as $uriId) { if (Post::exists(['uri-id' => $uriId])) { $this->db->insert('report-post', ['rid' => $Report->id, 'uri-id' => $uriId]); } else { From 8cb85368ff3667201320ed7168317ae658592cec Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 23 Dec 2022 22:48:57 +0000 Subject: [PATCH 3/3] Added comment --- src/Protocol/ActivityPub/Processor.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Protocol/ActivityPub/Processor.php b/src/Protocol/ActivityPub/Processor.php index a4333217d..843f4b8cf 100644 --- a/src/Protocol/ActivityPub/Processor.php +++ b/src/Protocol/ActivityPub/Processor.php @@ -1848,6 +1848,7 @@ class Processor } } + // @todo We should store the actor $report = DI::reportFactory()->createFromReportsRequest(0, $account_id, $activity['content'], false, $uri_ids); DI::report()->save($report);