From 1f316d0dec76e932ae55c445989a251aa9bceded Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 27 May 2020 19:04:40 +0000 Subject: [PATCH 1/3] Issue 8700: Resolvable activities --- src/Module/Objects.php | 28 ++++++++++++++++++------ src/Protocol/ActivityPub/Transmitter.php | 4 ++-- static/routes.config.php | 2 +- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/Module/Objects.php b/src/Module/Objects.php index b5b522714..b1346b585 100644 --- a/src/Module/Objects.php +++ b/src/Module/Objects.php @@ -65,17 +65,31 @@ class Objects extends BaseModule $last_modified = $item['changed']; Network::checkEtagModified($etag, $last_modified); - $activity = ActivityPub\Transmitter::createActivityFromItem($item['id'], true); - $activity['type'] = $activity['type'] == 'Update' ? 'Create' : $activity['type']; + if (empty($parameters['activity'])) { + $activity = ActivityPub\Transmitter::createActivityFromItem($item['id'], true); + $activity['type'] = $activity['type'] == 'Update' ? 'Create' : $activity['type']; - // Only display "Create" activity objects here, no reshares or anything else - if (empty($activity['object']) || ($activity['type'] != 'Create')) { + // Only display "Create" activity objects here, no reshares or anything else + if (empty($activity['object']) || ($activity['type'] != 'Create')) { + throw new HTTPException\NotFoundException(); + } + + $data = ['@context' => ActivityPub::CONTEXT]; + $data = array_merge($data, $activity['object']); + } elseif (in_array($parameters['activity'], ['Create', 'Announce', 'Update', + 'Like', 'Dislike', 'Accept', 'Reject', 'TentativeAccept', 'Follow', 'Add'])) { + $data = ActivityPub\Transmitter::createActivityFromItem($item['id']); + if (empty($data)) { + throw new HTTPException\NotFoundException(); + } + if ($parameters['activity'] != 'Create') { + $data['type'] = $parameters['activity']; + $data['id'] = str_replace('/Create', '/' . $parameters['activity'], $data['id']); + } + } else { throw new HTTPException\NotFoundException(); } - $data = ['@context' => ActivityPub::CONTEXT]; - $data = array_merge($data, $activity['object']); - // Relaxed CORS header for public items header('Access-Control-Allow-Origin: *'); System::jsonExit($data, 'application/activity+json'); diff --git a/src/Protocol/ActivityPub/Transmitter.php b/src/Protocol/ActivityPub/Transmitter.php index a7e4a7384..9cb5efca4 100644 --- a/src/Protocol/ActivityPub/Transmitter.php +++ b/src/Protocol/ActivityPub/Transmitter.php @@ -729,7 +729,7 @@ class Transmitter $data = []; } - $data['id'] = $mail['uri'] . '#Create'; + $data['id'] = $mail['uri'] . '/Create'; $data['type'] = 'Create'; $data['actor'] = $mail['author-link']; $data['published'] = DateTimeFormat::utc($mail['created'] . '+00:00', DateTimeFormat::ATOM); @@ -893,7 +893,7 @@ class Transmitter $data = []; } - $data['id'] = $item['uri'] . '#' . $type; + $data['id'] = $item['uri'] . '/' . $type; $data['type'] = $type; if (Item::isForumPost($item) && ($type != 'Announce')) { diff --git a/static/routes.config.php b/static/routes.config.php index 85ec6d8bb..9fbe35883 100644 --- a/static/routes.config.php +++ b/static/routes.config.php @@ -218,7 +218,7 @@ return [ '/mark/all' => [Module\Notifications\Notification::class, [R::GET]], '/{id:\d+}' => [Module\Notifications\Notification::class, [R::GET, R::POST]], ], - '/objects/{guid}' => [Module\Objects::class, [R::GET]], + '/objects/{guid}[/{activity}]' => [Module\Objects::class, [R::GET]], '/oembed' => [ '/b2h' => [Module\Oembed::class, [R::GET]], From 51e9b257005550d28681f431a8bcd1cf0fda9e65 Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 27 May 2020 22:16:33 +0000 Subject: [PATCH 2/3] Fixing #8702 --- include/conversation.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/conversation.php b/include/conversation.php index b163184af..375dda726 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -771,7 +771,7 @@ function conversation_add_children(array $parents, $block_authors, $order, $uid) $items = []; foreach ($parents AS $parent) { - $condition = ["`item`.`parent-uri` = ? AND `item`.`uid` IN (0, ?) AND `vid` != ?", + $condition = ["`item`.`parent-uri` = ? AND `item`.`uid` IN (0, ?) AND `vid` != ? ", $parent['uri'], $uid, Verb::getID(Activity::FOLLOW)]; $items = conversation_fetch_items($parent, $items, $condition, $block_authors, $params); } From bdfe47dcfd2bb05da64240f6c4a804c354f402b0 Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 28 May 2020 06:08:03 +0000 Subject: [PATCH 3/3] Add the space at a different place --- include/conversation.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/conversation.php b/include/conversation.php index 375dda726..1f597756f 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -771,7 +771,7 @@ function conversation_add_children(array $parents, $block_authors, $order, $uid) $items = []; foreach ($parents AS $parent) { - $condition = ["`item`.`parent-uri` = ? AND `item`.`uid` IN (0, ?) AND `vid` != ? ", + $condition = ["`item`.`parent-uri` = ? AND `item`.`uid` IN (0, ?) AND `vid` != ?", $parent['uri'], $uid, Verb::getID(Activity::FOLLOW)]; $items = conversation_fetch_items($parent, $items, $condition, $block_authors, $params); } @@ -799,7 +799,7 @@ function conversation_add_children(array $parents, $block_authors, $order, $uid) */ function conversation_fetch_items(array $parent, array $items, array $condition, bool $block_authors, array $params) { if ($block_authors) { - $condition[0] .= "AND NOT `author`.`hidden`"; + $condition[0] .= " AND NOT `author`.`hidden`"; } $thread_items = Item::selectForUser(local_user(), array_merge(Item::DISPLAY_FIELDLIST, ['contact-uid', 'gravity']), $condition, $params);