From cf6b89aeb63b49c50da491b50ba4b79b3510252a Mon Sep 17 00:00:00 2001 From: netkas Date: Thu, 5 Jun 2025 15:08:03 -0400 Subject: [PATCH] Add ListEntityBlacklist request handler --- .../Methods/Entities/ListEntityBlacklist.php | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/FederationServer/Methods/Entities/ListEntityBlacklist.php diff --git a/src/FederationServer/Methods/Entities/ListEntityBlacklist.php b/src/FederationServer/Methods/Entities/ListEntityBlacklist.php new file mode 100644 index 0000000..386bf36 --- /dev/null +++ b/src/FederationServer/Methods/Entities/ListEntityBlacklist.php @@ -0,0 +1,68 @@ +isBlacklistPublic() && $authenticatedOperator === null) + { + throw new RequestException('Unauthorized: You must be authenticated to list blacklist records', 401); + } + + $limit = (int) (FederationServer::getParameter('limit') ?? Configuration::getServerConfiguration()->getListBlacklistMaxItems()); + $page = (int) (FederationServer::getParameter('page') ?? 1); + + if($limit < 1 || $limit > Configuration::getServerConfiguration()->getListBlacklistMaxItems()) + { + $limit = Configuration::getServerConfiguration()->getListBlacklistMaxItems(); + } + + if($page < 1) + { + $page = 1; + } + + if(!preg_match('#^/entities/([a-fA-F0-9\-]{36,})/blacklist$#', FederationServer::getPath(), $matches)) + { + throw new RequestException('Bad Request: Entity UUID is required', 400); + } + + $entityUuid = $matches[1]; + if(!$entityUuid || !Validate::uuid($entityUuid)) + { + throw new RequestException('Bad Request: a valid entity UUID is required', 400); + } + + try + { + if(!EntitiesManager::entityExistsByUuid($entityUuid)) + { + throw new RequestException('Entity not found', 404); + } + + $blacklistRecords = BlacklistManager::getEntriesByEntity($entityUuid, $limit, $page); + } + catch (DatabaseOperationException $e) + { + throw new RequestException('Internal Server Error: Unable to retrieve blacklist records from the entity', 500, $e); + } + + self::successResponse(array_map(fn($evidence) => $evidence->toArray(), $blacklistRecords)); + } + } +