From cec094c5b1d8f63050e07123ab74b5a352785d81 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 17 Mar 2019 13:50:14 +0000 Subject: [PATCH 1/3] Centralise the item content processing in a single function --- src/Protocol/ActivityPub/Processor.php | 122 ++++++++++++------------- 1 file changed, 61 insertions(+), 61 deletions(-) diff --git a/src/Protocol/ActivityPub/Processor.php b/src/Protocol/ActivityPub/Processor.php index ccc3138408..9fa16a91f7 100644 --- a/src/Protocol/ActivityPub/Processor.php +++ b/src/Protocol/ActivityPub/Processor.php @@ -137,33 +137,12 @@ class Processor $item['changed'] = DateTimeFormat::utcNow(); $item['edited'] = $activity['updated']; - $item['title'] = HTML::toBBCode($activity['name']); - if (!empty($activity['source'])) { - $content = $activity['source']; - } else { - $item['content-warning'] = HTML::toBBCode($activity['summary']); - - $content = HTML::toBBCode($activity['content']); - $content = self::replaceEmojis($content, $activity['emojis']); - $content = self::convertMentions($content); - - if (($item['thr-parent'] != $item['uri']) && ($item['gravity'] == GRAVITY_COMMENT)) { - $parent = Item::selectFirst(['id', 'author-link', 'alias'], ['uri' => $item['thr-parent']]); - if (!DBA::isResult($parent)) { - Logger::warning('Unknown parent item.', ['uri' => $item['thr-parent']]); - return; - } - - $potential_implicit_mentions = self::getImplicitMentionList($parent); - $content = self::removeImplicitMentionsFromBody($content, $potential_implicit_mentions); - $activity['tags'] = self::convertImplicitMentionsInTags($activity['tags'], $potential_implicit_mentions); - } + $item = self::processContent($activity, $item); + if (empty($item)) { + return; } - $item['body'] = $content; - $item['tag'] = self::constructTagString($activity['tags'], $activity['sensitive']); - Item::update($item, ['uri' => $activity['id']]); } @@ -268,6 +247,61 @@ class Processor Logger::log('Event '.$event_id.' was stored', Logger::DEBUG); } + /** + * Process the content + * + * @param array $activity Activity array + * @param array $item + * @return array + * @throws \Exception + */ + private static function processContent($activity, $item) + { + $item['title'] = HTML::toBBCode($activity['name']); + + if (!empty($activity['source'])) { + $item['body'] = $activity['source']; + } else { + $content = HTML::toBBCode($activity['content']); + $content = self::replaceEmojis($content, $activity['emojis']); + $content = self::convertMentions($content); + + if (($item['thr-parent'] != $item['uri']) && ($item['gravity'] == GRAVITY_COMMENT)) { + $item_private = !in_array(0, $activity['item_receiver']); + $parent = Item::selectFirst(['id', 'private', 'author-link', 'alias'], ['uri' => $item['thr-parent']]); + if (!DBA::isResult($parent)) { + return false; + } + if ($item_private && !$parent['private']) { + Logger::warning('Item is private but the parent is not. Dropping.', ['item-uri' => $item['uri'], 'thr-parent' => $item['thr-parent']]); + return false; + } + + $potential_implicit_mentions = self::getImplicitMentionList($parent); + $content = self::removeImplicitMentionsFromBody($content, $potential_implicit_mentions); + $activity['tags'] = self::convertImplicitMentionsInTags($activity['tags'], $potential_implicit_mentions); + } + $item['content-warning'] = HTML::toBBCode($activity['summary']); + $item['body'] = $content; + + if (($activity['object_type'] == 'as:Video') && !empty($activity['alternate-url'])) { + $item['body'] .= "\n[video]" . $activity['alternate-url'] . '[/video]'; + } + } + + $item['tag'] = self::constructTagString($activity['tags'], $activity['sensitive']); + + $item['location'] = $activity['location']; + + if (!empty($item['latitude']) && !empty($item['longitude'])) { + $item['coord'] = $item['latitude'] . ' ' . $item['longitude']; + } + + $item['app'] = $activity['generator']; + + return $item; + } + /** * Creates an item post * @@ -300,54 +334,20 @@ class Processor } $item['uri'] = $activity['id']; - $content = HTML::toBBCode($activity['content']); - $content = self::replaceEmojis($content, $activity['emojis']); - $content = self::convertMentions($content); - - if (($item['thr-parent'] != $item['uri']) && ($item['gravity'] == GRAVITY_COMMENT)) { - $item_private = !in_array(0, $activity['item_receiver']); - $parent = Item::selectFirst(['id', 'private', 'author-link', 'alias'], ['uri' => $item['thr-parent']]); - if (!DBA::isResult($parent)) { - return; - } - if ($item_private && !$parent['private']) { - Logger::warning('Item is private but the parent is not. Dropping.', ['item-uri' => $item['uri'], 'thr-parent' => $item['thr-parent']]); - return; - } - - $potential_implicit_mentions = self::getImplicitMentionList($parent); - $content = self::removeImplicitMentionsFromBody($content, $potential_implicit_mentions); - $activity['tags'] = self::convertImplicitMentionsInTags($activity['tags'], $potential_implicit_mentions); - } $item['created'] = $activity['published']; $item['edited'] = $activity['updated']; $item['guid'] = $activity['diaspora:guid']; - $item['title'] = HTML::toBBCode($activity['name']); - $item['content-warning'] = HTML::toBBCode($activity['summary']); - $item['body'] = $content; - if (($activity['object_type'] == 'as:Video') && !empty($activity['alternate-url'])) { - $item['body'] .= "\n[video]" . $activity['alternate-url'] . '[/video]'; + $item = self::processContent($activity, $item); + if (empty($item)) { + return; } - $item['location'] = $activity['location']; - - if (!empty($item['latitude']) && !empty($item['longitude'])) { - $item['coord'] = $item['latitude'] . ' ' . $item['longitude']; - } - - $item['tag'] = self::constructTagString($activity['tags'], $activity['sensitive']); - $item['app'] = $activity['generator']; $item['plink'] = defaults($activity, 'alternate-url', $item['uri']); $item = self::constructAttachList($activity['attachments'], $item); - if (!empty($activity['source'])) { - $item['content-warning'] = ''; - $item['body'] = $activity['source']; - } - $stored = false; foreach ($activity['receiver'] as $receiver) { From 75ec384fc3e42c77727e552751651029cd54a010 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 17 Mar 2019 13:56:47 +0000 Subject: [PATCH 2/3] Added logging since this exixted before --- 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 9fa16a91f7..de17770601 100644 --- a/src/Protocol/ActivityPub/Processor.php +++ b/src/Protocol/ActivityPub/Processor.php @@ -270,6 +270,7 @@ class Processor $item_private = !in_array(0, $activity['item_receiver']); $parent = Item::selectFirst(['id', 'private', 'author-link', 'alias'], ['uri' => $item['thr-parent']]); if (!DBA::isResult($parent)) { + Logger::warning('Unknown parent item.', ['uri' => $item['thr-parent']]); return false; } if ($item_private && !$parent['private']) { From f78c1480135b9445d94a815fbfcc138f1a4dea58 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 17 Mar 2019 15:49:21 +0000 Subject: [PATCH 3/3] Clarified return values --- src/Protocol/ActivityPub/Processor.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Protocol/ActivityPub/Processor.php b/src/Protocol/ActivityPub/Processor.php index de17770601..c38cba28f1 100644 --- a/src/Protocol/ActivityPub/Processor.php +++ b/src/Protocol/ActivityPub/Processor.php @@ -252,7 +252,7 @@ class Processor * * @param array $activity Activity array * @param array $item - * @return array + * @return array|bool Returns the item array or false if there was an unexpected occurrence * @throws \Exception */ private static function processContent($activity, $item)