X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModule%2FActivityPub%2FObjects.php;h=9aeef3bb52a66ca03fc22e5f0cc31ba0a770438a;hb=53e8b21ca3b5dc8ccb0f4422d9c0ab1e72d7adfc;hp=5798c5685da7b93940d999218c06f847e016c612;hpb=4208535c16f0e8196effe230cc34141551a7be18;p=friendica.git diff --git a/src/Module/ActivityPub/Objects.php b/src/Module/ActivityPub/Objects.php index 5798c5685d..9aeef3bb52 100644 --- a/src/Module/ActivityPub/Objects.php +++ b/src/Module/ActivityPub/Objects.php @@ -1,6 +1,6 @@ parameters['guid'])) { throw new HTTPException\BadRequestException(); @@ -70,9 +70,7 @@ class Objects extends BaseModule } } - $item = Post::selectFirst(['id', 'uid', 'origin', 'author-link', 'changed', 'private', 'psid', 'gravity', 'deleted', 'parent-uri-id'], - ['uri-id' => $itemuri['id']], ['order' => ['origin' => true]]); - + $item = Post::selectFirst([], ['uri-id' => $itemuri['id'], 'origin' => true]); if (!DBA::isResult($item)) { throw new HTTPException\NotFoundException(); } @@ -81,22 +79,14 @@ class Objects extends BaseModule if (!$validated) { $requester = HTTPSignature::getSigner('', $_SERVER); - if (!empty($requester) && $item['origin']) { - $requester_id = Contact::getIdForURL($requester, $item['uid']); - if (!empty($requester_id)) { - $permissionSets = DI::permissionSet()->selectByContactId($requester_id, $item['uid']); - $psids = array_merge($permissionSets->column('id'), [PermissionSet::PUBLIC]); - $validated = in_array($item['psid'], $psids); - } - } - } + if (!empty($requester)) { + $receivers = Item::enumeratePermissions($item, false); + $receivers[] = $item['contact-id']; - if ($validated) { - // Valid items are original post or posted from this node (including in the case of a forum) - $validated = ($item['origin'] || (parse_url($item['author-link'], PHP_URL_HOST) == parse_url(DI::baseUrl()->get(), PHP_URL_HOST))); - - if (!$validated && $item['deleted']) { - $validated = Post::exists(['origin' => true, 'uri-id' => $item['parent-uri-id']]); + $validated = in_array(Contact::getIdForURL($requester, $item['uid']), $receivers); + if (!$validated) { + $validated = in_array(Contact::getIdForURL($requester), $receivers); + } } } @@ -108,8 +98,8 @@ class Objects extends BaseModule $last_modified = $item['changed']; Network::checkEtagModified($etag, $last_modified); - if (empty($this->parameters['activity']) && ($item['gravity'] != GRAVITY_ACTIVITY)) { - $activity = ActivityPub\Transmitter::createActivityFromItem($item['id'], true); + if (empty($this->parameters['activity']) && ($item['gravity'] != Item::GRAVITY_ACTIVITY)) { + $activity = ActivityPub\Transmitter::createCachedActivityFromItem($item['id'], false, true); if (empty($activity['type'])) { throw new HTTPException\NotFoundException(); } @@ -126,7 +116,7 @@ class Objects extends BaseModule } elseif (empty($this->parameters['activity']) || in_array($this->parameters['activity'], ['Create', 'Announce', 'Update', 'Like', 'Dislike', 'Accept', 'Reject', 'TentativeAccept', 'Follow', 'Add'])) { - $data = ActivityPub\Transmitter::createActivityFromItem($item['id']); + $data = ActivityPub\Transmitter::createCachedActivityFromItem($item['id']); if (empty($data)) { throw new HTTPException\NotFoundException(); } @@ -140,6 +130,7 @@ class Objects extends BaseModule // Relaxed CORS header for public items header('Access-Control-Allow-Origin: *'); + System::jsonExit($data, 'application/activity+json'); } }