From 0ad53d6032430586c50bf093b1adc4d422e29fb7 Mon Sep 17 00:00:00 2001 From: netkas Date: Fri, 6 Jun 2025 18:11:58 -0400 Subject: [PATCH] Implement DeleteBlacklist functionality and refactor related methods --- src/FederationServer/Classes/Enums/Method.php | 3 +- .../Classes/Managers/BlacklistManager.php | 14 ++--- .../Methods/Blacklist/DeleteBlacklist.php | 54 +++++++++++++++++++ 3 files changed, 63 insertions(+), 8 deletions(-) create mode 100644 src/FederationServer/Methods/Blacklist/DeleteBlacklist.php diff --git a/src/FederationServer/Classes/Enums/Method.php b/src/FederationServer/Classes/Enums/Method.php index 2b78564..f54c130 100644 --- a/src/FederationServer/Classes/Enums/Method.php +++ b/src/FederationServer/Classes/Enums/Method.php @@ -9,6 +9,7 @@ use FederationServer\Methods\Audit\ListAuditLogs; use FederationServer\Methods\Audit\ViewAuditEntry; use FederationServer\Methods\Blacklist\BlacklistEntity; + use FederationServer\Methods\Blacklist\DeleteBlacklist; use FederationServer\Methods\Blacklist\ListBlacklist; use FederationServer\Methods\Entities\DeleteEntity; use FederationServer\Methods\Entities\GetEntityRecord; @@ -197,7 +198,7 @@ BlacklistEntity::handleRequest(); break; case self::DELETE_BLACKLIST: - throw new \Exception('To be implemented'); + DeleteBlacklist::handleRequest(); break; case self::LIFT_BLACKLIST: throw new \Exception('To be implemented'); diff --git a/src/FederationServer/Classes/Managers/BlacklistManager.php b/src/FederationServer/Classes/Managers/BlacklistManager.php index 033b3dd..bd317f7 100644 --- a/src/FederationServer/Classes/Managers/BlacklistManager.php +++ b/src/FederationServer/Classes/Managers/BlacklistManager.php @@ -166,26 +166,26 @@ /** * Deletes a blacklist entry for a specific entity. * - * @param string $entity The UUID of the entity to remove from the blacklist. + * @param string $uuid The UUID of the blacklist entry to delete. * @throws InvalidArgumentException If the entity is empty. * @throws DatabaseOperationException If there is an error preparing or executing the SQL statement. */ - public static function deleteBlacklistEntry(string $entity): void + public static function deleteBlacklistRecord(string $uuid): void { - if(empty($entity)) + if(empty($uuid)) { - throw new InvalidArgumentException("Entity cannot be empty."); + throw new InvalidArgumentException("UUID cannot be empty."); } try { - $stmt = DatabaseConnection::getConnection()->prepare("DELETE FROM blacklist WHERE entity = :entity"); - $stmt->bindParam(':entity', $entity); + $stmt = DatabaseConnection::getConnection()->prepare("DELETE FROM blacklist WHERE uuid = :uuid"); + $stmt->bindParam(':uuid', $uuid); $stmt->execute(); } catch (PDOException $e) { - throw new DatabaseOperationException("Failed to delete blacklist entry: " . $e->getMessage(), 0, $e); + throw new DatabaseOperationException("Failed to delete blacklist record: " . $e->getMessage(), 0, $e); } } diff --git a/src/FederationServer/Methods/Blacklist/DeleteBlacklist.php b/src/FederationServer/Methods/Blacklist/DeleteBlacklist.php new file mode 100644 index 0000000..c2759af --- /dev/null +++ b/src/FederationServer/Methods/Blacklist/DeleteBlacklist.php @@ -0,0 +1,54 @@ +canManageBlacklist()) + { + throw new RequestException('Insufficient permissions to manage the blacklist', 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); + } + + BlacklistManager::deleteBlacklistRecord($blacklistUuid); + } + catch (DatabaseOperationException $e) + { + throw new RequestException('Unable to retrieve blacklist records', 500, $e); + } + + self::successResponse(); + } + } +