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);
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
*
}
// 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');
}
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);