From aa2a32d16f20ee71dfcf7ec0f999b8b3f636ad81 Mon Sep 17 00:00:00 2001 From: Michael Date: Mon, 4 Apr 2022 16:03:53 +0000 Subject: [PATCH] Store the "EmojiReact" activity --- src/Protocol/Activity.php | 16 ++++++++++++---- src/Protocol/ActivityNamespace.php | 4 ++++ src/Protocol/ActivityPub/Processor.php | 4 ++++ src/Protocol/ActivityPub/Receiver.php | 20 ++++++++++++++++---- 4 files changed, 36 insertions(+), 8 deletions(-) diff --git a/src/Protocol/Activity.php b/src/Protocol/Activity.php index 4ebb02b8d..637669a61 100644 --- a/src/Protocol/Activity.php +++ b/src/Protocol/Activity.php @@ -176,6 +176,13 @@ final class Activity const O_UNFOLLOW = ActivityNamespace::OSTATUS . '/unfollow'; const O_UNFAVOURITE = ActivityNamespace::OSTATUS . '/unfavorite'; + /** + * React to a post via an emoji + * + * @var string + */ + const EMOJIREACT = ActivityNamespace::LITEPUB . '/emojireact'; + /** * likes (etc.) can apply to other things besides posts. Check if they are post children, * in which case we handle them specially @@ -183,10 +190,11 @@ final class Activity * Hidden activities, which doesn't need to be shown */ const HIDDEN_ACTIVITIES = [ - Activity::LIKE, Activity::DISLIKE, - Activity::ATTEND, Activity::ATTENDNO, Activity::ATTENDMAYBE, - Activity::FOLLOW, - Activity::ANNOUNCE, + self::LIKE, self::DISLIKE, + self::ATTEND, self::ATTENDNO, self::ATTENDMAYBE, + self::FOLLOW, + self::ANNOUNCE, + self::EMOJIREACT, ]; /** diff --git a/src/Protocol/ActivityNamespace.php b/src/Protocol/ActivityNamespace.php index 550655460..5dbf88c86 100644 --- a/src/Protocol/ActivityNamespace.php +++ b/src/Protocol/ActivityNamespace.php @@ -148,4 +148,8 @@ final class ActivityNamespace * @var string */ const MASTODON = 'http://mastodon.social/schema/1.0'; + /** + * @var string + */ + const LITEPUB = 'http://litepub.social'; } diff --git a/src/Protocol/ActivityPub/Processor.php b/src/Protocol/ActivityPub/Processor.php index 3fc7dabe0..533d3a29b 100644 --- a/src/Protocol/ActivityPub/Processor.php +++ b/src/Protocol/ActivityPub/Processor.php @@ -430,6 +430,10 @@ class Processor unset($item['post-type']); $item['object-type'] = Activity\ObjectType::NOTE; + if (!empty($activity['content'])) { + $item['body'] = HTML::toBBCode($activity['content']); + } + $item['diaspora_signed_text'] = $activity['diaspora:like'] ?? ''; self::postItem($activity, $item); diff --git a/src/Protocol/ActivityPub/Receiver.php b/src/Protocol/ActivityPub/Receiver.php index f53ce7419..13d1a921f 100644 --- a/src/Protocol/ActivityPub/Receiver.php +++ b/src/Protocol/ActivityPub/Receiver.php @@ -384,7 +384,7 @@ class Receiver } else { $object_data['directmessage'] = JsonLD::fetchElement($activity, 'litepub:directMessage'); } - } elseif (in_array($type, array_merge(self::ACTIVITY_TYPES, ['as:Follow'])) && in_array($object_type, self::CONTENT_TYPES)) { + } elseif (in_array($type, array_merge(self::ACTIVITY_TYPES, ['as:Follow', 'litepub:EmojiReact'])) && in_array($object_type, self::CONTENT_TYPES)) { // Create a mostly empty array out of the activity data (instead of the object). // This way we later don't have to check for the existence of each individual array element. $object_data = self::processObject($activity); @@ -752,8 +752,10 @@ class Receiver break; case 'litepub:EmojiReact': - if (in_array($object_data['object_type'], array_merge([''], self::CONTENT_TYPES))) { - // Unhandled Pleroma activity to react to a post via an emoji + if (in_array($object_data['object_type'], self::CONTENT_TYPES)) { + ActivityPub\Processor::createActivity($object_data, Activity::EMOJIREACT); + } elseif ($object_data['object_type'] == '') { + // The object type couldn't be determined. We don't have it and we can't fetch it. We ignore this activity. } else { self::storeUnhandledActivity(true, $type, $object_data, $activity, $body, $uid, $trust_source, $push, $signer); } @@ -786,7 +788,17 @@ class Receiver return; } - $tempfile = tempnam(System::getTempPath(), ($unknown ? 'unknown-' : 'unhandled-') . str_replace(':', '-', $type) . '-' . str_replace(':', '-', $object_data['object_type']) . '-' . str_replace(':', '-', $object_data['object_object_type'] ?? '') . '-'); + $file = ($unknown ? 'unknown-' : 'unhandled-') . str_replace(':', '-', $type) . '-'; + + if (!empty($object_data['object_type'])) { + $file .= str_replace(':', '-', $object_data['object_type']) . '-'; + } + + if (!empty($object_data['object_object_type'])) { + $file .= str_replace(':', '-', $object_data['object_object_type']) . '-'; + } + + $tempfile = tempnam(System::getTempPath(), $file); file_put_contents($tempfile, json_encode(['activity' => $activity, 'body' => $body, 'uid' => $uid, 'trust_source' => $trust_source, 'push' => $push, 'signer' => $signer, 'object_data' => $object_data], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)); Logger::notice('Unknown activity stored', ['type' => $type, 'object_type' => $object_data['object_type'], $object_data['object_object_type'] ?? '', 'file' => $tempfile]); }