diff --git a/src/FederationServer/Classes/Enums/Method.php b/src/FederationServer/Classes/Enums/Method.php index 8b72b67..a20d763 100644 --- a/src/FederationServer/Classes/Enums/Method.php +++ b/src/FederationServer/Classes/Enums/Method.php @@ -3,6 +3,7 @@ namespace FederationServer\Classes\Enums; use FederationServer\Exceptions\RequestException; + use FederationServer\Methods\ManageBlacklistPermission; use FederationServer\Methods\ManageOperatorsPermission; use FederationServer\Methods\CreateOperator; use FederationServer\Methods\DeleteOperator; @@ -20,6 +21,7 @@ case GET_OPERATOR; case REFRESH_OPERATOR_API_KEY; case MANAGE_OPERATORS_PERMISSION; + case MANAGE_BLACKLIST_PERMISSION; case UPLOAD_ATTACHMENT; case DOWNLOAD_ATTACHMENT; @@ -52,6 +54,9 @@ case self::MANAGE_OPERATORS_PERMISSION: ManageOperatorsPermission::handleRequest(); break; + case self::MANAGE_BLACKLIST_PERMISSION: + ManageBlacklistPermission::handleRequest(); + break; case self::UPLOAD_ATTACHMENT: UploadAttachment::handleRequest(); @@ -84,6 +89,7 @@ $requestMethod === 'POST' && $path === '/operators/enable' => Method::ENABLE_OPERATOR, $requestMethod === 'POST' && $path === '/operators/refresh' => Method::REFRESH_OPERATOR_API_KEY, $requestMethod === 'POST' && $path === '/operators/permissions/manage_operators' => Method::MANAGE_OPERATORS_PERMISSION, + $requestMethod === 'POST' && $path === '/operators/permissions/manage_blacklist' => Method::MANAGE_BLACKLIST_PERMISSION, default => null, }; diff --git a/src/FederationServer/Methods/ManageBlacklistPermission.php b/src/FederationServer/Methods/ManageBlacklistPermission.php new file mode 100644 index 0000000..d208303 --- /dev/null +++ b/src/FederationServer/Methods/ManageBlacklistPermission.php @@ -0,0 +1,50 @@ +canManageOperators()) + { + throw new RequestException('Unauthorized: Insufficient permissions manage permissions', 403); + } + + $operatorUuid = FederationServer::getParameter('uuid'); + $enabled = (bool)filter_var(FederationServer::getParameter('enabled'), FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE); + if($operatorUuid === null) + { + throw new RequestException('Bad Request: Missing required parameters', 400); + } + + if(!Validate::uuid($operatorUuid)) + { + throw new RequestException('Bad Request: Invalid operator UUID', 400); + } + + try + { + OperatorManager::setManageBlacklist($operatorUuid, $enabled); + } + catch(DatabaseOperationException $e) + { + Logger::log()->error('Database error while managing operator\'s permissions: ' . $e->getMessage(), $e); + throw new RequestException('Internal Server Error: Unable to manage operator\'s permissions', 500, $e); + } + + self::successResponse(); + } + } \ No newline at end of file