diff --git a/src/flextype/core/Endpoints/Utils.php b/src/flextype/core/Endpoints/Tokens.php similarity index 54% rename from src/flextype/core/Endpoints/Utils.php rename to src/flextype/core/Endpoints/Tokens.php index 05f4eee9..288642a7 100644 --- a/src/flextype/core/Endpoints/Utils.php +++ b/src/flextype/core/Endpoints/Tokens.php @@ -22,7 +22,7 @@ use Psr\Http\Message\ServerRequestInterface; use function count; use function filesystem; -class Utils extends Api +class Tokens extends Api { /** * Generate token @@ -38,7 +38,7 @@ class Utils extends Api if ( count($result = $this->validateApiRequest([ 'request' => $request, - 'api' => 'utils', + 'api' => 'tokens', 'params' => ['token', 'access_token'], ])) > 0 ) { @@ -69,7 +69,7 @@ class Utils extends Api if ( count($result = $this->validateApiRequest([ 'request' => $request, - 'api' => 'utils', + 'api' => 'tokens', 'params' => ['token', 'access_token', 'string'], ])) > 0 ) { @@ -100,7 +100,7 @@ class Utils extends Api if ( count($result = $this->validateApiRequest([ 'request' => $request, - 'api' => 'utils', + 'api' => 'tokens', 'params' => ['token', 'access_token', 'string', 'hash'], ])) > 0 ) { @@ -115,20 +115,20 @@ class Utils extends Api } /** - * Create token + * Create token entry * * @param ServerRequestInterface $request PSR7 request. * @param ResponseInterface $response PSR7 response. * * @return ResponseInterface Response. */ - public function createToken(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface + public function create(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface { // Validate Api Request if ( count($result = $this->validateApiRequest([ 'request' => $request, - 'api' => 'utils', + 'api' => 'tokens', 'params' => ['token', 'access_token'], ])) > 0 ) { @@ -142,7 +142,7 @@ class Utils extends Api ! entries()->has('tokens') and entries()->create('tokens', ['title' => 'Tokens']); // Create new entry - entries()->create('tokens/' . $token, ['hashed_access_token' => $hashed_access_token]); + entries()->create('tokens/' . $token, array_merge($requestParsedBody['data'], ['hashed_access_token' => $hashed_access_token])); // Fetch entry $entryData = entries()->fetch('tokens/' . $token)->toArray(); @@ -154,4 +154,108 @@ class Utils extends Api return $this->getApiResponse($response, [], 404); } + + /** + * Fetch token entry. + * + * @param ServerRequestInterface $request PSR7 request. + * @param ResponseInterface $response PSR7 response. + * + * @return ResponseInterface Response. + */ + public function fetch(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface + { + // Get Request Query Params + $requestQueryParams = $request->getQueryParams(); + + // Validate Api Request + if ( + count($result = $this->validateApiRequest([ + 'request' => $request, + 'api' => 'tokens', + 'params' => ['token', 'id'], + ])) > 0 + ) { + return $this->getApiResponse($response, $this->getStatusCodeMessage($result['http_status_code']), $result['http_status_code']); + } + + // Get entry data + $entryData = entries()->fetch('tokens/' . $requestQueryParams['id'], $requestQueryParams['options'] ?? [])->toArray(); + + if (count($entryData) > 0) { + return $this->getApiResponse($response, $entryData, 200); + } + + return $this->getApiResponse($response, $this->getStatusCodeMessage(404), 404); + } + + /** + * Update token entry. + * + * @param ServerRequestInterface $request PSR7 request. + * @param ResponseInterface $response PSR7 response. + * + * @return ResponseInterface Response. + */ + public function update(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface + { + // Get Request Parsed Body + $requestParsedBody = $request->getParsedBody(); + + // Validate Api Request + if ( + count($result = $this->validateApiRequest([ + 'request' => $request, + 'api' => 'tokens', + 'params' => ['token', 'id', 'access_token'], + ])) > 0 + ) { + return $this->getApiResponse($response, $this->getStatusCodeMessage($result['http_status_code']), $result['http_status_code']); + } + + // Update entry + entries()->update('tokens/' . $requestParsedBody['id'], $requestParsedBody['data'] ?? []); + + // Fetch entry + $entryData = entries()->fetch('tokens/' . $requestParsedBody['id'])->toArray(); + + // Return response + if (count($entryData) > 0) { + return $this->getApiResponse($response, $entryData, 200); + } + + return $this->getApiResponse($response, [], 404); + } + + + /** + * Delete token entry. + * + * @param ServerRequestInterface $request PSR7 request. + * @param ResponseInterface $response PSR7 response. + * + * @return ResponseInterface Response. + */ + public function delete(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface + { + // Get Request Parsed Body + $requestParsedBody = $request->getParsedBody(); + + // Validate Api Request + if ( + count($result = $this->validateApiRequest([ + 'request' => $request, + 'api' => 'tokens', + 'params' => ['token', 'id', 'access_token'], + ])) > 0 + ) { + return $this->getApiResponse($response, $this->getStatusCodeMessage($result['http_status_code']), $result['http_status_code']); + } + + // Copy entry + entries()->delete('tokens/' . $requestParsedBody['id']); + + // Return success response + return $this->getApiResponse($response, [], 204); + } } diff --git a/src/flextype/routes/endpoints/tokens.php b/src/flextype/routes/endpoints/tokens.php new file mode 100644 index 00000000..622084d5 --- /dev/null +++ b/src/flextype/routes/endpoints/tokens.php @@ -0,0 +1,126 @@ +post('/api/v0/tokens/generate', [Tokens::class, 'generate'])->setName('tokens.generate'); + +/** + * Generate token hash + * + * endpoint: POST /api/v0/tokens/generate-hash + * + * Body: + * token - [REQUIRED] - Valid public token. + * access_token - [REQUIRED] - Valid private access token. + * string - [REQUIRED] - String to hash. + * + * Returns: + * Generated token hash object. + */ +app()->post('/api/v0/tokens/generate-hash', [Tokens::class, 'generateHash'])->setName('tokens.generate-hash'); + +/** + * Verify token hash + * + * endpoint: POST /api/v0/tokens/verify-hash + * + * Body: + * token - [REQUIRED] - Valid public token. + * access_token - [REQUIRED] - Valid private access token. + * string - [REQUIRED] - String to verify. + * hash - [REQUIRED] - Hash to verify. + * + * Returns: + * Token verification object. + */ +app()->post('/api/v0/tokens/verify-hash', [Tokens::class, 'verifyHash'])->setName('tokens.verify-hash'); + +/** + * Create token entry + * + * endpoint: POST /api/v0/tokens/create-token + * + * Body: + * token - [REQUIRED] - Valid public token. + * access_token - [REQUIRED] - Valid private access token. + * + * Returns: + * Token entry object with the token entry that was just created. + */ +app()->post('/api/v0/tokens', [Tokens::class, 'create'])->setName('tokens.create'); + +/** + * Update token entry + * + * endpoint: PATCH /api/v0/tokens + * + * Body: + * id - [REQUIRED] - Unique identifier of the token entry. + * token - [REQUIRED] - Valid public token. + * access_token - [REQUIRED] - Valid private access token. + * data - [REQUIRED] - Data to update for the token entry. + * + * Returns: + * Toeken entry object for the entry that was just updated. + */ +app()->patch('/api/v0/tokens', [Tokens::class, 'update'])->setName('tokens.update'); + +/** + * Delete token entry + * + * endpoint: DELETE /api/v0/tokens + * + * Body: + * id - [REQUIRED] - Unique identifier of the token entry. + * token - [REQUIRED] - Valid pulbic token. + * access_token - [REQUIRED] - Valid private access token. + * + * Returns: + * Empty body with HTTP status 204 + */ +app()->delete('/api/v0/tokens', [Tokens::class, 'delete'])->setName('tokens.delete'); + +/** + * Fetch token entry + * + * endpoint: GET /api/v0/tokens + * + * Query: + * id - [REQUIRED] - Unique identifier of the token entry. + * token - [REQUIRED] - Valid public token. + * options - [OPTIONAL] - Select items in collection by given conditions. + * + * Returns: + * Entry object. + */ +app()->get('/api/v0/tokens', [Tokens::class, 'fetch'])->setName('tokens.fetch'); diff --git a/src/flextype/routes/endpoints/utils.php b/src/flextype/routes/endpoints/utils.php deleted file mode 100644 index 224baa44..00000000 --- a/src/flextype/routes/endpoints/utils.php +++ /dev/null @@ -1,80 +0,0 @@ -post('/api/v0/utils/generate-token', [Utils::class, 'generateToken'])->setName('utils.generate-token'); - -/** - * Generate token hash - * - * endpoint: POST /api/v0/utils/generate-token-hash - * - * Body: - * token - [REQUIRED] - Valid public token. - * access_token - [REQUIRED] - Valid private access token. - * string - [REQUIRED] - String to hash. - * - * Returns: - * Generated token hash object. - */ -app()->post('/api/v0/utils/generate-token-hash', [Utils::class, 'generateTokenHash'])->setName('utils.generate-token-hash'); - -/** - * Verify token hash - * - * endpoint: POST /api/v0/utils/verify-token-hash - * - * Body: - * token - [REQUIRED] - Valid public token. - * access_token - [REQUIRED] - Valid private access token. - * string - [REQUIRED] - String to verify. - * hash - [REQUIRED] - Hash to verify. - * - * Returns: - * Token verification object. - */ -app()->post('/api/v0/utils/verify-token-hash', [Utils::class, 'verifyTokenHash'])->setName('utils.verify-token-hash'); - -/** - * Create token - * - * endpoint: POST /api/v0/utils/create-token - * - * Body: - * token - [REQUIRED] - Valid public token. - * access_token - [REQUIRED] - Valid private access token. - * - * Returns: - * Token entry object with the token entry that was just created. - */ -app()->post('/api/v0/utils/create-token', [Utils::class, 'createToken'])->setName('utils.create-token');