1
0
mirror of https://github.com/flextype/flextype.git synced 2025-08-06 05:07:41 +02:00

feat(endpoints): use new Tokens API instead of old Utils API

This commit is contained in:
Awilum
2022-05-02 20:15:01 +03:00
parent 14e8f38b85
commit 2bc66d6f34
3 changed files with 238 additions and 88 deletions

View File

@@ -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);
}
}

View File

@@ -0,0 +1,126 @@
<?php
declare(strict_types=1);
/**
* Flextype - Hybrid Content Management System with the freedom of a headless CMS
* and with the full functionality of a traditional CMS!
*
* Copyright (c) Sergey Romanenko (https://awilum.github.io)
*
* Licensed under The MIT License.
*
* For full copyright and license information, please see the LICENSE
* Redistributions of files must retain the above copyright notice.
*/
namespace Flextype;
use Flextype\Endpoints\Tokens;
use function app;
/**
* Generate token
*
* endpoint: POST /api/v0/tokens/generate
*
* Body:
* token - [REQUIRED] - Valid public token.
* access_token - [REQUIRED] - Valid private access token.
*
* Returns:
* Generated token object.
*/
app()->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');

View File

@@ -1,80 +0,0 @@
<?php
declare(strict_types=1);
/**
* Flextype - Hybrid Content Management System with the freedom of a headless CMS
* and with the full functionality of a traditional CMS!
*
* Copyright (c) Sergey Romanenko (https://awilum.github.io)
*
* Licensed under The MIT License.
*
* For full copyright and license information, please see the LICENSE
* Redistributions of files must retain the above copyright notice.
*/
namespace Flextype;
use Flextype\Endpoints\Utils;
use function app;
/**
* Generate token
*
* endpoint: POST /api/v0/utils/generate-token
*
* Body:
* token - [REQUIRED] - Valid public token.
* access_token - [REQUIRED] - Valid private access token.
*
* Returns:
* Generated token object.
*/
app()->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');