From 8ec47c855fdcdbda5084f545de24142d18adac45 Mon Sep 17 00:00:00 2001 From: netkas Date: Fri, 6 Jun 2025 18:18:20 -0400 Subject: [PATCH] Implement GetBlacklistRecord functionality to retrieve specific blacklist entries --- src/FederationServer/Classes/Enums/Method.php | 7 ++- .../Methods/Blacklist/GetBlacklistRecord.php | 54 +++++++++++++++++++ 2 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 src/FederationServer/Methods/Blacklist/GetBlacklistRecord.php diff --git a/src/FederationServer/Classes/Enums/Method.php b/src/FederationServer/Classes/Enums/Method.php index f9673bd..f1ae158 100644 --- a/src/FederationServer/Classes/Enums/Method.php +++ b/src/FederationServer/Classes/Enums/Method.php @@ -10,6 +10,7 @@ use FederationServer\Methods\Audit\ViewAuditEntry; use FederationServer\Methods\Blacklist\BlacklistEntity; use FederationServer\Methods\Blacklist\DeleteBlacklist; + use FederationServer\Methods\Blacklist\GetBlacklistRecord; use FederationServer\Methods\Blacklist\LiftBlacklist; use FederationServer\Methods\Blacklist\ListBlacklist; use FederationServer\Methods\Entities\DeleteEntity; @@ -204,11 +205,9 @@ case self::LIFT_BLACKLIST: LiftBlacklist::handleRequest(); break; - case self::BLACKLIST_ATTACH_EVIDENCE: - throw new \Exception('To be implemented'); - break; case self::GET_BLACKLIST_RECORD: - throw new \Exception('To be implemented'); + GetBlacklistRecord::handleRequest(); + break; } } diff --git a/src/FederationServer/Methods/Blacklist/GetBlacklistRecord.php b/src/FederationServer/Methods/Blacklist/GetBlacklistRecord.php new file mode 100644 index 0000000..ad06802 --- /dev/null +++ b/src/FederationServer/Methods/Blacklist/GetBlacklistRecord.php @@ -0,0 +1,54 @@ +isBlacklistPublic() && $authenticatedOperator === null) + { + throw new RequestException('You must be authenticated to view blacklist records', 401); + } + + if(!preg_match('#^/blacklist/([a-fA-F0-9\-]{36,})$#', FederationServer::getPath(), $matches)) + { + throw new RequestException('Blacklist UUID required', 405); + } + + $blacklistUuid = $matches[1]; + if(!$blacklistUuid || !Validate::uuid($blacklistUuid)) + { + throw new RequestException('Invalid blacklist UUID', 400); + } + + try + { + if(!BlacklistManager::blacklistExists($blacklistUuid)) + { + throw new RequestException('Blacklist record not found', 404); + } + + $blacklistRecord = BlacklistManager::getBlacklistEntry($blacklistUuid); + } + catch (DatabaseOperationException $e) + { + throw new RequestException('Unable to retrieve blacklist records', 500, $e); + } + + self::successResponse($blacklistRecord->toArray()); + } + } +