From 3aea945547743e2007858f3ff78666b09bae8b4b Mon Sep 17 00:00:00 2001 From: Awilum Date: Tue, 10 Aug 2021 12:03:18 +0300 Subject: [PATCH] feat(endpoints): add Utils Endpoints class #565 --- src/flextype/core/Endpoints/utils.php | 100 ++++++++++++-------------- 1 file changed, 45 insertions(+), 55 deletions(-) diff --git a/src/flextype/core/Endpoints/utils.php b/src/flextype/core/Endpoints/utils.php index 5ad70607..0c69d139 100644 --- a/src/flextype/core/Endpoints/utils.php +++ b/src/flextype/core/Endpoints/utils.php @@ -7,69 +7,59 @@ declare(strict_types=1); * Founded by Sergey Romanenko and maintained by Flextype Community. */ -namespace Flextype; +namespace Flextype\Endpoints; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; +use Flextype\Endpoints\Endpoints; use function array_replace_recursive; use function filesystem; use function flextype; -/** - * Clear cache - * - * endpoint: POST /api/utils/cache/clear - * - * Body: - * token - [REQUIRED] - Valid public token. - * access_token - [REQUIRED] - Valid access token. - * - * Returns: - * Returns an empty body with HTTP status 204 - */ -app()->post('/api/utils/cache/clear', function (ServerRequestInterface $request, ResponseInterface $response) { +class Utils extends Endpoints +{ + public function clearCache(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface + { + // Get Query Params + $data = $request->getParsedBody(); - // Get Query Params - $data = $request->getParsedBody(); + // Check is utils api enabled + if (! registry()->get('flextype.settings.api.utils.enabled')) { + return $this->getApiResponse($response, $this->statusCodeMessages['400'], 400); + } - // Check is utils api enabled - if (! registry()->get('flextype.settings.api.utils.enabled')) { - return getApiResponseWithError($response, 400); + // Check is token param exists + if (! isset($data['token'])) { + return $this->getApiResponse($response, $this->statusCodeMessages['400'], 400); + } + + // Check is token exists + if (! tokens()->has($data['token'])) { + return $this->getApiResponse($response, $this->statusCodeMessages['401'], 401); + } + + // Fetch token + $tokenData = tokens()->fetch($data['token']); + + // Verify access token + if (password_verify($tokenData['hashed_access_token'], $data['access_token'])) { + return $this->getApiResponse($response, $this->statusCodeMessages['401'], 401); + } + + // Check token state and limit_calls + if ($tokenData['state'] === 'disabled' || + ($tokenData['limit_calls'] !== 0 && $tokenData['calls'] >= $tokenData['limit_calls'])) { + return $this->getApiResponse($response, $this->statusCodeMessages['400'], 400); + } + + // Update token calls + tokens()->update($data['token'], ['calls' => $tokenData['calls'] + 1]); + + // Clear cache + filesystem()->directory(PATH['tmp'])->delete(); + + // Return success response + return $this->getApiResponse($response, [], 204); } - - // Check is token param exists - if (! isset($data['token'])) { - return getApiResponseWithError($response, 400); - } - - // Check is token exists - if (! tokens()->has($data['token'])) { - return getApiResponseWithError($response, 401); - } - - // Fetch token - $tokenData = tokens()->fetch($data['token']); - - // Verify access token - if (password_verify($tokenData['hashed_access_token'], $data['access_token'])) { - return getApiResponseWithError($response, 401); - } - - // Check token state and limit_calls - if ($tokenData['state'] === 'disabled' || - ($tokenData['limit_calls'] !== 0 && $tokenData['calls'] >= $tokenData['limit_calls'])) { - return getApiResponseWithError($response, 400); - } - - // Update token calls - tokens()->update($data['token'], ['calls' => $tokenData['calls'] + 1]); - - // Clear cache - filesystem()->directory(PATH['tmp'])->delete(); - - // Return success response - $response->withStatus(204); - $response->withHeader('Content-Type', 'application/json;charset=' . registry()->get('flextype.settings.charset')); - return $response; -}); \ No newline at end of file +} \ No newline at end of file