From b39c48fb026374aac40a5db65c9decc337e52be5 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 24 Mar 2024 06:05:37 +0000 Subject: [PATCH] Implementation of FEP-e232 for quoted posts --- src/Content/Item.php | 4 ++-- src/Protocol/ActivityPub/Receiver.php | 15 +++++++++++---- src/Protocol/ActivityPub/Transmitter.php | 16 ++++++++-------- 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/Content/Item.php b/src/Content/Item.php index bfc3979c5a..6c3f661476 100644 --- a/src/Content/Item.php +++ b/src/Content/Item.php @@ -800,14 +800,14 @@ class Item */ public function addShareLink(string $body, int $quote_uri_id): string { - $post = Post::selectFirstPost(['uri', 'plink'], ['uri-id' => $quote_uri_id]); + $post = Post::selectFirstPost(['uri'], ['uri-id' => $quote_uri_id]); if (empty($post)) { return $body; } $body = BBCode::removeSharedData($body); - $body .= "\n♲ " . ($post['plink'] ?: $post['uri']); + $body .= "\nRE: " . $post['uri']; return $body; } diff --git a/src/Protocol/ActivityPub/Receiver.php b/src/Protocol/ActivityPub/Receiver.php index fd5e05fb62..2dd6a76913 100644 --- a/src/Protocol/ActivityPub/Receiver.php +++ b/src/Protocol/ActivityPub/Receiver.php @@ -1577,7 +1577,8 @@ class Receiver $element = [ 'type' => str_replace('as:', '', JsonLD::fetchElement($tag, '@type') ?? ''), 'href' => JsonLD::fetchElement($tag, 'as:href', '@id'), - 'name' => JsonLD::fetchElement($tag, 'as:name', '@value') + 'name' => JsonLD::fetchElement($tag, 'as:name', '@value'), + 'mediaType' => JsonLD::fetchElement($tag, 'as:mediaType', '@value') ]; if (empty($element['type'])) { @@ -2094,12 +2095,18 @@ class Receiver } // Support for quoted posts (Pleroma, Fedibird and Misskey) - $object_data['quote-url'] = JsonLD::fetchElement($object, 'as:quoteUrl', '@value'); + $object_data['quote-url'] = JsonLD::fetchElement($object, 'as:quoteUrl', '@id'); if (empty($object_data['quote-url'])) { - $object_data['quote-url'] = JsonLD::fetchElement($object, 'fedibird:quoteUri', '@value'); + $object_data['quote-url'] = JsonLD::fetchElement($object, 'fedibird:quoteUri', '@id'); } if (empty($object_data['quote-url'])) { - $object_data['quote-url'] = JsonLD::fetchElement($object, 'misskey:_misskey_quote', '@value'); + $object_data['quote-url'] = JsonLD::fetchElement($object, 'misskey:_misskey_quote', '@id'); + } + + foreach ($object_data['tags'] as $tag) { + if (HTTPSignature::isValidContentType($tag['mediaType'] ?? '', $tag['href'])) { + $object_data['quote-url'] = $tag['href']; + } } // Misskey adds some data to the standard "content" value for quoted posts for backwards compatibility. diff --git a/src/Protocol/ActivityPub/Transmitter.php b/src/Protocol/ActivityPub/Transmitter.php index f322278574..1ba98b2f88 100644 --- a/src/Protocol/ActivityPub/Transmitter.php +++ b/src/Protocol/ActivityPub/Transmitter.php @@ -1589,15 +1589,14 @@ class Transmitter $tags[] = ['type' => 'Mention', 'href' => $announce['actor']['url'], 'name' => '@' . $announce['actor']['addr']]; } - // @see https://codeberg.org/fediverse/fep/src/branch/main/feps/fep-e232.md + // @see https://codeberg.org/fediverse/fep/src/branch/main/fep/e232/fep-e232.md if (!empty($quote_url)) { - // Currently deactivated because of compatibility issues with Pleroma - //$tags[] = [ - // 'type' => 'Link', - // 'mediaType' => 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"', - // 'href' => $quote_url, - // 'name' => '♲ ' . BBCode::convertForUriId($item['uri-id'], $quote_url, BBCode::ACTIVITYPUB) - //]; + $tags[] = [ + 'type' => 'Link', + 'mediaType' => 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"', + 'href' => $quote_url, + 'name' => 'RE: ' . $quote_url, + ]; } return $tags; @@ -1862,6 +1861,7 @@ class Transmitter if (!empty($item['quote-uri-id']) && ($item['quote-uri-id'] != $item['uri-id'])) { if (Post::exists(['uri-id' => $item['quote-uri-id'], 'network' => [Protocol::ACTIVITYPUB, Protocol::DFRN]])) { $real_quote = true; + $data['_misskey_content'] = BBCode::removeSharedData($body); $data['quoteUrl'] = $item['quote-uri']; $body = DI::contentItem()->addShareLink($body, $item['quote-uri-id']); } else {