%PDF- %PDF-
Direktori : /www/varak.net/nextcloud.varak.net/apps_old/apps/passwords/lib/Middleware/ |
Current File : /www/varak.net/nextcloud.varak.net/apps_old/apps/passwords/lib/Middleware/ApiSecurityMiddleware.php |
<?php /** * This file is part of the Passwords App * created by Marius David Wieschollek * and licensed under the AGPL. */ namespace OCA\Passwords\Middleware; use Exception; use OCA\Passwords\Exception\ApiException; use OCA\Passwords\Services\LoggingService; use OCP\AppFramework\Controller; use OCP\AppFramework\Db\DoesNotExistException; use OCP\AppFramework\Http; use OCP\AppFramework\Http\JSONResponse; use OCP\AppFramework\Middleware; use OCP\IRequest; /** * Class ApiSecurityMiddleware * * @package OCA\Passwords\Middleware */ class ApiSecurityMiddleware extends Middleware { /** * @var LoggingService */ protected LoggingService $logger; /** * @var IRequest */ protected IRequest $request; /** * ApiSecurityMiddleware constructor. * * @param LoggingService $logger * @param IRequest $request */ public function __construct(LoggingService $logger, IRequest $request) { $this->logger = $logger; $this->request = $request; } /** * @param Controller $controller * @param string $methodName * * @throws ApiException */ public function beforeController($controller, $methodName): void { if($this->isApiClass($controller) && $this->request->getServerProtocol() !== 'https') { throw new ApiException('HTTPS required', Http::STATUS_BAD_REQUEST); } parent::beforeController($controller, $methodName); } /** * @param Controller $controller * @param string $methodName * @param Exception $exception * * @return JSONResponse * @throws Exception */ public function afterException($controller, $methodName, Exception $exception): JSONResponse { if(!$this->isApiClass($controller)) throw $exception; $message = 'Unable to complete request'; $id = 0; $statusCode = Http::STATUS_SERVICE_UNAVAILABLE; $this->logger->error(['Error "%1$s" in %2$s::%3$s', $exception->getMessage(), get_class($controller), $methodName]); $this->logger->logException($exception); if(get_class($exception) === ApiException::class || is_subclass_of($exception, ApiException::class)) { /** @var ApiException $exception */ $id = $exception->getId(); $message = $exception->getMessage(); $statusCode = $exception->getHttpCode(); } if(get_class($exception) === DoesNotExistException::class) { $id = 404; $message = 'Resource not found'; $statusCode = 404; } return new JSONResponse( [ 'status' => 'error', 'id' => $id, 'message' => $message ], $statusCode ); } /** * @param $object * * @return bool */ protected function isApiClass($object): bool { $class = get_class($object); return substr($class, 0, 28) === 'OCA\Passwords\Controller\Api' || substr($class, 0, 30) === 'OCA\Passwords\Controller\Admin'; } }