1
0
mirror of https://github.com/flextype/flextype.git synced 2025-08-08 14:16:46 +02:00

feath(rest-api): reorganize endpoints for Media Rest API #514

This commit is contained in:
Awilum
2020-12-17 19:44:02 +03:00
parent 00718efb7e
commit 01a9872884
4 changed files with 575 additions and 593 deletions

View File

@@ -1,551 +0,0 @@
<?php
declare(strict_types=1);
/**
* Flextype (http://flextype.org)
* Founded by Sergey Romanenko and maintained by Flextype Community.
*/
namespace Flextype;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Http\Response;
use Atomastic\Arrays\Arrays;
use function array_replace_recursive;
use function count;
use function filesystem;
use function flextype;
/**
* Validate folders token
*/
function validate_folders_token($token): bool
{
return filesystem()->file(PATH['project'] . '/tokens/folders/' . $token . '/token.yaml')->exists();
}
/**
* Fetch folders(s)
*
* endpoint: GET /api/folders
*
* Query:
* path - [REQUIRED] - Folder path.
* collection - [OPTIONAL] - Collection or single.
* token - [REQUIRED] - Valid Folders token.
*
* Returns:
* An array of folder(s) item objects.
*/
flextype()->get('/api/folders', function (Request $request, Response $response) use ($api_errors) {
// Get Query Params
$query = $request->getQueryParams();
if (! isset($query['id']) || ! isset($query['token'])) {
return $response->withStatus($api_errors['0600']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0600']));
}
// Set variables
$id = $query['id'];
$token = $query['token'];
$options = $query['options'] ?? [];
$method = $query['method'] ?? '';
if (flextype('registry')->get('flextype.settings.api.folders.enabled')) {
// Validate delivery token
if (validate_folders_token($token)) {
$folders_token_file_path = PATH['project'] . '/tokens/folders/' . $token . '/token.yaml';
// Set delivery token file
if ($folders_token_file_data = flextype('yaml')->decode(filesystem()->file($folders_token_file_path)->get())) {
if (
$folders_token_file_data['state'] === 'disabled' ||
($folders_token_file_data['limit_calls'] !== 0 && $folders_token_file_data['calls'] >= $folders_token_file_data['limit_calls'])
) {
return $response->withStatus($api_errors['0501']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0501']));
}
// Create folders array
$folders = [];
if (isset($method) &&
strpos($method, 'fetch') !== false &&
is_callable([flextype('media_folders'), $method])) {
$fetchFromCallbackMethod = $method;
} else {
$fetchFromCallbackMethod = 'fetch';
}
// Get fetch result
$folders = flextype('media_folders')->{$fetchFromCallbackMethod}($id, $options);
$folders = ($folders instanceof Arrays) ? $folders->toArray() : $folders;
// Write response data
$response_data = [];
$response_data['data'] = $folders;
// Set response code
$response_code = count($response_data['data']) > 0 ? 200 : 404;
// Update calls counter
filesystem()->file($folders_token_file_path)->put(flextype('yaml')->encode(array_replace_recursive($folders_token_file_data, ['calls' => $folders_token_file_data['calls'] + 1])));
if ($response_code === 404) {
// Return response
return $response
->withStatus($api_errors['0602']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0602']));
}
// Return response
return $response
->withStatus($response_code)
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($response_data));
}
return $response
->withStatus($api_errors['0003']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0003']));
}
return $response
->withStatus($api_errors['0003']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0003']));
}
return $response
->withStatus($api_errors['0003']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0003']));
});
/**
* Create folder
*
* endpoint: PUT /api/folders
*
* Body:
* path - [REQUIRED] - New folder path.
* token - [REQUIRED] - Valid Folders token.
* access_token - [REQUIRED] - Valid Access token.
*
* Returns:
* Returns the folder object for the folder that was just created.
*/
flextype()->post('/api/folders', function (Request $request, Response $response) use ($api_errors) {
// Get Post Data
$post_data = $request->getParsedBody();
if (! isset($post_data['token']) || ! isset($post_data['access_token']) || ! isset($post_data['path'])) {
return $response->withStatus($api_errors['0601']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0601']));
}
// Set variables
$token = $post_data['token'];
$access_token = $post_data['access_token'];
$id = $post_data['path'];
if (flextype('registry')->get('flextype.settings.api.folders.enabled')) {
// Validate files and access token
if (validate_folders_token($token) && validate_access_token($access_token)) {
$folders_token_file_path = PATH['project'] . '/tokens/folders/' . $token . '/token.yaml';
$access_token_file_path = PATH['project'] . '/tokens/access/' . $access_token . '/token.yaml';
// Set files and access token file
if (
($folders_token_file_data = flextype('yaml')->decode(filesystem()->file($folders_token_file_path)->get())) &&
($access_token_file_data = flextype('yaml')->decode(filesystem()->file($access_token_file_path)->get()))
) {
if (
$folders_token_file_data['state'] === 'disabled' ||
($folders_token_file_data['limit_calls'] !== 0 && $folders_token_file_data['calls'] >= $folders_token_file_data['limit_calls'])
) {
return $response->withStatus($api_errors['0501']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0501']));
}
if (
$access_token_file_data['state'] === 'disabled' ||
($access_token_file_data['limit_calls'] !== 0 && $access_token_file_data['calls'] >= $access_token_file_data['limit_calls'])
) {
return $response->withStatus($api_errors['0501']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0501']));
}
// Create folder
$create_folder = flextype('media_folders')->create($id);
$response_data = [];
if ($create_folder) {
$response_data['data'] = flextype('media_folders')->fetch($id);
}
// Set response code
$response_code = $create_folder ? 200 : 404;
// Update calls counter
filesystem()->file($folders_token_file_path)->put(flextype('yaml')->encode(array_replace_recursive($folders_token_file_data, ['calls' => $folders_token_file_data['calls'] + 1])));
if ($response_code === 404) {
// Return response
return $response
->withStatus($api_errors['0602']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0602']));
}
// Return response
return $response
->withStatus($response_code)
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($response_data));
}
return $response
->withStatus($api_errors['0003']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0003']));
}
return $response
->withStatus($api_errors['0003']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0003']));
}
return $response
->withStatus($api_errors['0003']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0003']));
});
/**
* Copy folder
*
* endpoint: PUT /api/folders/copy
*
* Body:
* path - [REQUIRED] - Unique identifier of the folder.
* new_path - [REQUIRED] - New Unique identifier of the folder.
* token - [REQUIRED] - Valid Folder token.
* access_token - [REQUIRED] - Valid Access token.
*
* Returns:
* Returns the folders object for the folders that was just copied.
*/
flextype()->put('/api/folders/copy', function (Request $request, Response $response) use ($api_errors) {
// Get Post Data
$post_data = $request->getParsedBody();
if (! isset($post_data['token']) || ! isset($post_data['access_token']) || ! isset($post_data['path']) || ! isset($post_data['new_path'])) {
return $response->withStatus($api_errors['0601']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0601']));
}
// Set variables
$token = $post_data['token'];
$access_token = $post_data['access_token'];
$id = $post_data['path'];
$new_path = $post_data['new_path'];
if (flextype('registry')->get('flextype.settings.api.folders.enabled')) {
// Validate files and access token
if (validate_folders_token($token) && validate_access_token($access_token)) {
$folders_token_file_path = PATH['project'] . '/tokens/folders/' . $token . '/token.yaml';
$access_token_file_path = PATH['project'] . '/tokens/access/' . $access_token . '/token.yaml';
// Set files and access token file
if (
($folders_token_file_data = flextype('yaml')->decode(filesystem()->file($folders_token_file_path)->get())) &&
($access_token_file_data = flextype('yaml')->decode(filesystem()->file($access_token_file_path)->get()))
) {
if (
$folders_token_file_data['state'] === 'disabled' ||
($folders_token_file_data['limit_calls'] !== 0 && $folders_token_file_data['calls'] >= $folders_token_file_data['limit_calls'])
) {
return $response->withStatus($api_errors['0601']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0601']));
}
if (
$access_token_file_data['state'] === 'disabled' ||
($access_token_file_data['limit_calls'] !== 0 && $access_token_file_data['calls'] >= $access_token_file_data['limit_calls'])
) {
return $response->withStatus($api_errors['0601']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0601']));
}
// Copy folder
$copy_folder = flextype('media_folders')->copy($id, $new_path);
$response_data = [];
if ($copy_folder) {
$response_data['data'] = flextype('media_folders')->fetch($new_path);
} else {
$response_data['data'] = $copy_folder;
}
// Set response code
$response_code = $copy_folder ? 200 : 404;
// Update calls counter
filesystem()->file($folders_token_file_path)->put(flextype('yaml')->encode(array_replace_recursive($folders_token_file_data, ['calls' => $folders_token_file_data['calls'] + 1])));
if ($response_code === 404) {
// Return response
return $response
->withStatus($api_errors['0602']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0602']));
}
// Return response
return $response
->withStatus($response_code)
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($response_data));
}
return $response
->withStatus($api_errors['0003']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0003']));
}
return $response
->withStatus($api_errors['0003']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0003']));
}
return $response
->withStatus($api_errors['0003']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0003']));
});
/**
* Move folder
*
* endpoint: PUT /api/folders
*
* Body:
* path - [REQUIRED] - Unique identifier of the folder.
* new_pah - [REQUIRED] - New Unique identifier of the folder.
* token - [REQUIRED] - Valid Folder token.
* access_token - [REQUIRED] - Valid Access token.
*
* Returns:
* Returns the folders object for the folders that was just renamed.
*/
flextype()->put('/api/folders', function (Request $request, Response $response) use ($api_errors) {
// Get Post Data
$post_data = $request->getParsedBody();
if (! isset($post_data['token']) || ! isset($post_data['access_token']) || ! isset($post_data['path']) || ! isset($post_data['new_path'])) {
return $response->withStatus($api_errors['0601']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0601']));
}
// Set variables
$token = $post_data['token'];
$access_token = $post_data['access_token'];
$id = $post_data['path'];
$new_path = $post_data['new_path'];
if (flextype('registry')->get('flextype.settings.api.folders.enabled')) {
// Validate files and access token
if (validate_folders_token($token) && validate_access_token($access_token)) {
$folders_token_file_path = PATH['project'] . '/tokens/folders/' . $token . '/token.yaml';
$access_token_file_path = PATH['project'] . '/tokens/access/' . $access_token . '/token.yaml';
// Set files and access token file
if (
($folders_token_file_data = flextype('yaml')->decode(filesystem()->file($folders_token_file_path)->get())) &&
($access_token_file_data = flextype('yaml')->decode(filesystem()->file($access_token_file_path)->get()))
) {
if (
$folders_token_file_data['state'] === 'disabled' ||
($folders_token_file_data['limit_calls'] !== 0 && $folders_token_file_data['calls'] >= $folders_token_file_data['limit_calls'])
) {
return $response->withStatus($api_errors['0501']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0501']));
}
if (
$access_token_file_data['state'] === 'disabled' ||
($access_token_file_data['limit_calls'] !== 0 && $access_token_file_data['calls'] >= $access_token_file_data['limit_calls'])
) {
return $response->withStatus($api_errors['0501']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0501']));
}
// Rename folder
$move_folder = flextype('media_folders')->move($id, $new_path);
$response_data = [];
if ($move_folder) {
$response_data['data'] = flextype('media_folders')->fetch($new_path);
}
// Set response code
$response_code = $move_folder ? 200 : 404;
// Update calls counter
filesystem()->file($folders_token_file_path)->put(flextype('yaml')->encode(array_replace_recursive($folders_token_file_data, ['calls' => $folders_token_file_data['calls'] + 1])));
if ($response_code === 404) {
// Return response
return $response
->withStatus($api_errors['0602']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0602']));
}
// Return response
return $response
->withStatus($response_code)
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($response_data));
}
return $response
->withStatus($api_errors['0003']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0003']));
}
return $response
->withStatus($api_errors['0003']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0003']));
}
return $response
->withStatus($api_errors['0003']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0003']));
});
/**
* Delete folder
*
* endpoint: DELETE /api/folders
*
* Body:
* id - [REQUIRED] - Unique identifier of the folder.
* token - [REQUIRED] - Valid Folders token.
* access_token - [REQUIRED] - Valid Authentication token.
*
* Returns:
* Returns an empty body with HTTP status 204
*/
flextype()->delete('/api/folders', function (Request $request, Response $response) use ($api_errors) {
// Get Post Data
$post_data = $request->getParsedBody();
if (! isset($post_data['token']) || ! isset($post_data['access_token']) || ! isset($post_data['path'])) {
return $response->withStatus($api_errors['0601']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0601']));
}
// Set variables
$token = $post_data['token'];
$access_token = $post_data['access_token'];
$id = $post_data['path'];
if (flextype('registry')->get('flextype.settings.api.folders.enabled')) {
// Validate files and access token
if (validate_folders_token($token) && validate_access_token($access_token)) {
$folders_token_file_path = PATH['project'] . '/tokens/folders/' . $token . '/token.yaml';
$access_token_file_path = PATH['project'] . '/tokens/access/' . $access_token . '/token.yaml';
// Set files and access token file
if (
($folders_token_file_data = flextype('yaml')->decode(filesystem()->file($folders_token_file_path)->get())) &&
($access_token_file_data = flextype('yaml')->decode(filesystem()->file($access_token_file_path)->get()))
) {
if (
$folders_token_file_data['state'] === 'disabled' ||
($folders_token_file_data['limit_calls'] !== 0 && $folders_token_file_data['calls'] >= $folders_token_file_data['limit_calls'])
) {
return $response->withStatus($api_errors['0501']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0501']));
}
if (
$access_token_file_data['state'] === 'disabled' ||
($access_token_file_data['limit_calls'] !== 0 && $access_token_file_data['calls'] >= $access_token_file_data['limit_calls'])
) {
return $response->withStatus($api_errors['0501']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0501']));
}
// Delete folder
$delete_folder = flextype('media_folders')->delete($id);
// Set response code
$response_code = $delete_folder ? 204 : 404;
// Update calls counter
filesystem()->file($folders_token_file_path)->put(flextype('yaml')->encode(array_replace_recursive($folders_token_file_data, ['calls' => $folders_token_file_data['calls'] + 1])));
if ($response_code === 404) {
// Return response
return $response
->withStatus($api_errors['0602']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0602']));
}
// Return response
return $response
->withStatus($response_code)
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($delete_folder));
}
return $response
->withStatus($api_errors['0003']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0003']));
}
return $response
->withStatus($api_errors['0003']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0003']));
}
return $response
->withStatus($api_errors['0003']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0003']));
});

View File

@@ -25,13 +25,21 @@ use function is_dir;
*/
function validate_files_token($token): bool
{
return filesystem()->file(PATH['project'] . '/tokens/files/' . $token . '/token.yaml')->exists();
return filesystem()->file(PATH['project'] . '/tokens/media/files/' . $token . '/token.yaml')->exists();
}
/**
* Validate folders token
*/
function validate_folders_token($token): bool
{
return filesystem()->file(PATH['project'] . '/tokens/media/folders/' . $token . '/token.yaml')->exists();
}
/**
* Fetch file(s)
*
* endpoint: GET /api/files
* endpoint: GET /api/media/files
*
* Query:
* path - [REQUIRED] - Unique identifier of the file path.
@@ -40,7 +48,7 @@ function validate_files_token($token): bool
* Returns:
* An array of file item objects.
*/
flextype()->get('/api/files', function (Request $request, Response $response) use ($api_errors) {
flextype()->get('/api/media/files', function (Request $request, Response $response) use ($api_errors) {
// Get Query Params
$query = $request->getQueryParams();
@@ -56,10 +64,10 @@ flextype()->get('/api/files', function (Request $request, Response $response) us
$options = $query['options'] ?? [];
$method = $query['method'] ?? '';
if (flextype('registry')->get('flextype.settings.api.files.enabled')) {
if (flextype('registry')->get('flextype.settings.api.media.files.enabled')) {
// Validate delivery token
if (validate_files_token($token)) {
$files_token_file_path = PATH['project'] . '/tokens/files/' . $token . '/token.yaml';
$files_token_file_path = PATH['project'] . '/tokens/media/files/' . $token . '/token.yaml';
// Set delivery token file
if ($files_token_file_data = flextype('yaml')->decode(filesystem()->file($files_token_file_path)->get())) {
@@ -134,7 +142,7 @@ flextype()->get('/api/files', function (Request $request, Response $response) us
/**
* Upload media file
*
* endpoint: POST /api/files
* endpoint: POST /api/media/files
*
* Body:
* folder - [REQUIRED] - The folder you're targetting.
@@ -145,7 +153,7 @@ flextype()->get('/api/files', function (Request $request, Response $response) us
* Returns:
* Returns the file object for the file that was just uploaded.
*/
flextype()->post('/api/files', function (Request $request, Response $response) use ($api_errors) {
flextype()->post('/api/media/files', function (Request $request, Response $response) use ($api_errors) {
// Get Post Data
$post_data = $request->getParsedBody();
@@ -161,10 +169,10 @@ flextype()->post('/api/files', function (Request $request, Response $response) u
$folder = $post_data['folder'];
$file = $_FILES['file'];
if (flextype('registry')->get('flextype.settings.api.files.enabled')) {
if (flextype('registry')->get('flextype.settings.api.media.files.enabled')) {
// Validate files and access token
if (validate_files_token($token) && validate_access_token($access_token)) {
$files_token_file_path = PATH['project'] . '/tokens/files/' . $token . '/token.yaml';
$files_token_file_path = PATH['project'] . '/tokens/media/files/' . $token . '/token.yaml';
$access_token_file_path = PATH['project'] . '/tokens/access/' . $access_token . '/token.yaml';
// Set files and access token file
@@ -244,7 +252,7 @@ flextype()->post('/api/files', function (Request $request, Response $response) u
/**
* Rename media file
*
* endpoint: PUT /api/files
* endpoint: PUT /api/media/files
*
* Body:
* id - [REQUIRED] - Unique identifier of the file.
@@ -255,7 +263,7 @@ flextype()->post('/api/files', function (Request $request, Response $response) u
* Returns:
* Returns the file object for the file that was just created.
*/
flextype()->put('/api/files', function (Request $request, Response $response) use ($api_errors) {
flextype()->put('/api/media/files', function (Request $request, Response $response) use ($api_errors) {
// Get Post Data
$post_data = $request->getParsedBody();
@@ -271,10 +279,10 @@ flextype()->put('/api/files', function (Request $request, Response $response) us
$id = $post_data['path'];
$new_path = $post_data['new_path'];
if (flextype('registry')->get('flextype.settings.api.files.enabled')) {
if (flextype('registry')->get('flextype.settings.api.media.files.enabled')) {
// Validate files and access token
if (validate_files_token($token) && validate_access_token($access_token)) {
$files_token_file_path = PATH['project'] . '/tokens/files/' . $token . '/token.yaml';
$files_token_file_path = PATH['project'] . '/tokens/media/files/' . $token . '/token.yaml';
$access_token_file_path = PATH['project'] . '/tokens/access/' . $access_token . '/token.yaml';
// Set files and access token file
@@ -353,7 +361,7 @@ flextype()->put('/api/files', function (Request $request, Response $response) us
/**
* Copy media file
*
* endpoint: PUT /api/files
* endpoint: PUT /api/media/files
*
* Body:
* id - [REQUIRED] - Unique identifier of the file.
@@ -364,7 +372,7 @@ flextype()->put('/api/files', function (Request $request, Response $response) us
* Returns:
* Returns the file object for the file that was just created.
*/
flextype()->put('/api/files/copy', function (Request $request, Response $response) use ($api_errors) {
flextype()->put('/api/media/files/copy', function (Request $request, Response $response) use ($api_errors) {
// Get Post Data
$post_data = $request->getParsedBody();
@@ -380,10 +388,10 @@ flextype()->put('/api/files/copy', function (Request $request, Response $respons
$id = $post_data['path'];
$new_path = $post_data['new_path'];
if (flextype('registry')->get('flextype.settings.api.files.enabled')) {
if (flextype('registry')->get('flextype.settings.api.media.files.enabled')) {
// Validate files and access token
if (validate_files_token($token) && validate_access_token($access_token)) {
$files_token_file_path = PATH['project'] . '/tokens/files/' . $token . '/token.yaml';
$files_token_file_path = PATH['project'] . '/tokens/media/files/' . $token . '/token.yaml';
$access_token_file_path = PATH['project'] . '/tokens/access/' . $access_token . '/token.yaml';
// Set files and access token file
@@ -462,7 +470,7 @@ flextype()->put('/api/files/copy', function (Request $request, Response $respons
/**
* Delete file
*
* endpoint: DELETE /api/files
* endpoint: DELETE /api/media/files
*
* Body:
* id - [REQUIRED] - Unique identifier of the file.
@@ -472,7 +480,7 @@ flextype()->put('/api/files/copy', function (Request $request, Response $respons
* Returns:
* Returns an empty body with HTTP status 204
*/
flextype()->delete('/api/files', function (Request $request, Response $response) use ($api_errors) {
flextype()->delete('/api/media/files', function (Request $request, Response $response) use ($api_errors) {
// Get Post Data
$post_data = $request->getParsedBody();
@@ -487,10 +495,10 @@ flextype()->delete('/api/files', function (Request $request, Response $response)
$access_token = $post_data['access_token'];
$id = $post_data['path'];
if (flextype('registry')->get('flextype.settings.api.files.enabled')) {
if (flextype('registry')->get('flextype.settings.api.media.files.enabled')) {
// Validate files and access token
if (validate_files_token($token) && validate_access_token($access_token)) {
$files_token_file_path = PATH['project'] . '/tokens/files/' . $token . '/token.yaml';
$files_token_file_path = PATH['project'] . '/tokens/media/files/' . $token . '/token.yaml';
$access_token_file_path = PATH['project'] . '/tokens/access/' . $access_token . '/token.yaml';
// Set files and access token file
@@ -563,7 +571,7 @@ flextype()->delete('/api/files', function (Request $request, Response $response)
/**
* Update file meta information
*
* endpoint: PATCH /api/files/meta
* endpoint: PATCH /api/media/files/meta
*
* Body:
* path - [REQUIRED] - File path.
@@ -575,7 +583,7 @@ flextype()->delete('/api/files', function (Request $request, Response $response)
* Returns:
* Returns the file object for the file that was just updated.
*/
flextype()->patch('/api/files/meta', function (Request $request, Response $response) use ($api_errors) {
flextype()->patch('/api/media/files/meta', function (Request $request, Response $response) use ($api_errors) {
// Get Post Data
$post_data = $request->getParsedBody();
@@ -592,10 +600,10 @@ flextype()->patch('/api/files/meta', function (Request $request, Response $respo
$field = $post_data['field'];
$value = $post_data['value'];
if (flextype('registry')->get('flextype.settings.api.files.enabled')) {
if (flextype('registry')->get('flextype.settings.api.media.files.enabled')) {
// Validate files and access token
if (validate_files_token($token) && validate_access_token($access_token)) {
$files_token_file_path = PATH['project'] . '/tokens/files/' . $token . '/token.yaml';
$files_token_file_path = PATH['project'] . '/tokens/media/files/' . $token . '/token.yaml';
$access_token_file_path = PATH['project'] . '/tokens/access/' . $access_token . '/token.yaml';
// Set files and access token file
@@ -674,7 +682,7 @@ flextype()->patch('/api/files/meta', function (Request $request, Response $respo
/**
* Add file meta information
*
* endpoint: POST /api/files/meta
* endpoint: POST /api/media/files/meta
*
* Body:
* path - [REQUIRED] - File path.
@@ -686,7 +694,7 @@ flextype()->patch('/api/files/meta', function (Request $request, Response $respo
* Returns:
* Returns the file object for the file that was just created.
*/
flextype()->post('/api/files/meta', function (Request $request, Response $response) use ($api_errors) {
flextype()->post('/api/media/files/meta', function (Request $request, Response $response) use ($api_errors) {
// Get Post Data
$post_data = $request->getParsedBody();
@@ -703,10 +711,10 @@ flextype()->post('/api/files/meta', function (Request $request, Response $respon
$field = $post_data['field'];
$value = $post_data['value'];
if (flextype('registry')->get('flextype.settings.api.files.enabled')) {
if (flextype('registry')->get('flextype.settings.api.media.files.enabled')) {
// Validate files and access token
if (validate_files_token($token) && validate_access_token($access_token)) {
$files_token_file_path = PATH['project'] . '/tokens/files/' . $token . '/token.yaml';
$files_token_file_path = PATH['project'] . '/tokens/media/files/' . $token . '/token.yaml';
$access_token_file_path = PATH['project'] . '/tokens/access/' . $access_token . '/token.yaml';
// Set files and access token file
@@ -786,7 +794,7 @@ flextype()->post('/api/files/meta', function (Request $request, Response $respon
/**
* Delete file meta information
*
* endpoint: DELETE /api/files/meta
* endpoint: DELETE /api/media/files/meta
*
* Body:
* path - [REQUIRED] - File path.
@@ -797,7 +805,7 @@ flextype()->post('/api/files/meta', function (Request $request, Response $respon
* Returns:
* Returns the file object for the file that was just created.
*/
flextype()->delete('/api/files/meta', function (Request $request, Response $response) use ($api_errors) {
flextype()->delete('/api/media/files/meta', function (Request $request, Response $response) use ($api_errors) {
// Get Post Data
$post_data = $request->getParsedBody();
@@ -813,10 +821,10 @@ flextype()->delete('/api/files/meta', function (Request $request, Response $resp
$id = $post_data['path'];
$field = $post_data['field'];
if (flextype('registry')->get('flextype.settings.api.files.enabled')) {
if (flextype('registry')->get('flextype.settings.api.media.files.enabled')) {
// Validate files and access token
if (validate_files_token($token) && validate_access_token($access_token)) {
$files_token_file_path = PATH['project'] . '/tokens/files/' . $token . '/token.yaml';
$files_token_file_path = PATH['project'] . '/tokens/media/files/' . $token . '/token.yaml';
$access_token_file_path = PATH['project'] . '/tokens/access/' . $access_token . '/token.yaml';
// Set files and access token file
@@ -891,3 +899,528 @@ flextype()->delete('/api/files/meta', function (Request $request, Response $resp
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0003']));
});
/**
* Fetch folders(s)
*
* endpoint: GET /api/media/folders
*
* Query:
* path - [REQUIRED] - Folder path.
* collection - [OPTIONAL] - Collection or single.
* token - [REQUIRED] - Valid Folders token.
*
* Returns:
* An array of folder(s) item objects.
*/
flextype()->get('/api/media/folders', function (Request $request, Response $response) use ($api_errors) {
// Get Query Params
$query = $request->getQueryParams();
if (! isset($query['id']) || ! isset($query['token'])) {
return $response->withStatus($api_errors['0600']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0600']));
}
// Set variables
$id = $query['id'];
$token = $query['token'];
$options = $query['options'] ?? [];
$method = $query['method'] ?? '';
if (flextype('registry')->get('flextype.settings.api.media.folders.enabled')) {
// Validate delivery token
if (validate_folders_token($token)) {
$folders_token_file_path = PATH['project'] . '/tokens/media/folders/' . $token . '/token.yaml';
// Set delivery token file
if ($folders_token_file_data = flextype('yaml')->decode(filesystem()->file($folders_token_file_path)->get())) {
if (
$folders_token_file_data['state'] === 'disabled' ||
($folders_token_file_data['limit_calls'] !== 0 && $folders_token_file_data['calls'] >= $folders_token_file_data['limit_calls'])
) {
return $response->withStatus($api_errors['0501']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0501']));
}
// Create folders array
$folders = [];
if (isset($method) &&
strpos($method, 'fetch') !== false &&
is_callable([flextype('media_folders'), $method])) {
$fetchFromCallbackMethod = $method;
} else {
$fetchFromCallbackMethod = 'fetch';
}
// Get fetch result
$folders = flextype('media_folders')->{$fetchFromCallbackMethod}($id, $options);
$folders = ($folders instanceof Arrays) ? $folders->toArray() : $folders;
// Write response data
$response_data = [];
$response_data['data'] = $folders;
// Set response code
$response_code = count($response_data['data']) > 0 ? 200 : 404;
// Update calls counter
filesystem()->file($folders_token_file_path)->put(flextype('yaml')->encode(array_replace_recursive($folders_token_file_data, ['calls' => $folders_token_file_data['calls'] + 1])));
if ($response_code === 404) {
// Return response
return $response
->withStatus($api_errors['0602']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0602']));
}
// Return response
return $response
->withStatus($response_code)
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($response_data));
}
return $response
->withStatus($api_errors['0003']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0003']));
}
return $response
->withStatus($api_errors['0003']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0003']));
}
return $response
->withStatus($api_errors['0003']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0003']));
});
/**
* Create folder
*
* endpoint: PUT /api/media/folders
*
* Body:
* path - [REQUIRED] - New folder path.
* token - [REQUIRED] - Valid Folders token.
* access_token - [REQUIRED] - Valid Access token.
*
* Returns:
* Returns the folder object for the folder that was just created.
*/
flextype()->post('/api/media/folders', function (Request $request, Response $response) use ($api_errors) {
// Get Post Data
$post_data = $request->getParsedBody();
if (! isset($post_data['token']) || ! isset($post_data['access_token']) || ! isset($post_data['path'])) {
return $response->withStatus($api_errors['0601']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0601']));
}
// Set variables
$token = $post_data['token'];
$access_token = $post_data['access_token'];
$id = $post_data['path'];
if (flextype('registry')->get('flextype.settings.api.media.folders.enabled')) {
// Validate files and access token
if (validate_folders_token($token) && validate_access_token($access_token)) {
$folders_token_file_path = PATH['project'] . '/tokens/media/folders/' . $token . '/token.yaml';
$access_token_file_path = PATH['project'] . '/tokens/access/' . $access_token . '/token.yaml';
// Set files and access token file
if (
($folders_token_file_data = flextype('yaml')->decode(filesystem()->file($folders_token_file_path)->get())) &&
($access_token_file_data = flextype('yaml')->decode(filesystem()->file($access_token_file_path)->get()))
) {
if (
$folders_token_file_data['state'] === 'disabled' ||
($folders_token_file_data['limit_calls'] !== 0 && $folders_token_file_data['calls'] >= $folders_token_file_data['limit_calls'])
) {
return $response->withStatus($api_errors['0501']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0501']));
}
if (
$access_token_file_data['state'] === 'disabled' ||
($access_token_file_data['limit_calls'] !== 0 && $access_token_file_data['calls'] >= $access_token_file_data['limit_calls'])
) {
return $response->withStatus($api_errors['0501']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0501']));
}
// Create folder
$create_folder = flextype('media_folders')->create($id);
$response_data = [];
if ($create_folder) {
$response_data['data'] = flextype('media_folders')->fetch($id);
}
// Set response code
$response_code = $create_folder ? 200 : 404;
// Update calls counter
filesystem()->file($folders_token_file_path)->put(flextype('yaml')->encode(array_replace_recursive($folders_token_file_data, ['calls' => $folders_token_file_data['calls'] + 1])));
if ($response_code === 404) {
// Return response
return $response
->withStatus($api_errors['0602']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0602']));
}
// Return response
return $response
->withStatus($response_code)
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($response_data));
}
return $response
->withStatus($api_errors['0003']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0003']));
}
return $response
->withStatus($api_errors['0003']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0003']));
}
return $response
->withStatus($api_errors['0003']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0003']));
});
/**
* Copy folder
*
* endpoint: PUT /api/media/folders/copy
*
* Body:
* path - [REQUIRED] - Unique identifier of the folder.
* new_path - [REQUIRED] - New Unique identifier of the folder.
* token - [REQUIRED] - Valid Folder token.
* access_token - [REQUIRED] - Valid Access token.
*
* Returns:
* Returns the folders object for the folders that was just copied.
*/
flextype()->put('/api/media/folders/copy', function (Request $request, Response $response) use ($api_errors) {
// Get Post Data
$post_data = $request->getParsedBody();
if (! isset($post_data['token']) || ! isset($post_data['access_token']) || ! isset($post_data['path']) || ! isset($post_data['new_path'])) {
return $response->withStatus($api_errors['0601']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0601']));
}
// Set variables
$token = $post_data['token'];
$access_token = $post_data['access_token'];
$id = $post_data['path'];
$new_path = $post_data['new_path'];
if (flextype('registry')->get('flextype.settings.api.media.folders.enabled')) {
// Validate files and access token
if (validate_folders_token($token) && validate_access_token($access_token)) {
$folders_token_file_path = PATH['project'] . '/tokens/media/folders/' . $token . '/token.yaml';
$access_token_file_path = PATH['project'] . '/tokens/access/' . $access_token . '/token.yaml';
// Set files and access token file
if (
($folders_token_file_data = flextype('yaml')->decode(filesystem()->file($folders_token_file_path)->get())) &&
($access_token_file_data = flextype('yaml')->decode(filesystem()->file($access_token_file_path)->get()))
) {
if (
$folders_token_file_data['state'] === 'disabled' ||
($folders_token_file_data['limit_calls'] !== 0 && $folders_token_file_data['calls'] >= $folders_token_file_data['limit_calls'])
) {
return $response->withStatus($api_errors['0601']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0601']));
}
if (
$access_token_file_data['state'] === 'disabled' ||
($access_token_file_data['limit_calls'] !== 0 && $access_token_file_data['calls'] >= $access_token_file_data['limit_calls'])
) {
return $response->withStatus($api_errors['0601']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0601']));
}
// Copy folder
$copy_folder = flextype('media_folders')->copy($id, $new_path);
$response_data = [];
if ($copy_folder) {
$response_data['data'] = flextype('media_folders')->fetch($new_path);
} else {
$response_data['data'] = $copy_folder;
}
// Set response code
$response_code = $copy_folder ? 200 : 404;
// Update calls counter
filesystem()->file($folders_token_file_path)->put(flextype('yaml')->encode(array_replace_recursive($folders_token_file_data, ['calls' => $folders_token_file_data['calls'] + 1])));
if ($response_code === 404) {
// Return response
return $response
->withStatus($api_errors['0602']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0602']));
}
// Return response
return $response
->withStatus($response_code)
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($response_data));
}
return $response
->withStatus($api_errors['0003']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0003']));
}
return $response
->withStatus($api_errors['0003']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0003']));
}
return $response
->withStatus($api_errors['0003']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0003']));
});
/**
* Move folder
*
* endpoint: PUT /api/media/folders
*
* Body:
* path - [REQUIRED] - Unique identifier of the folder.
* new_pah - [REQUIRED] - New Unique identifier of the folder.
* token - [REQUIRED] - Valid Folder token.
* access_token - [REQUIRED] - Valid Access token.
*
* Returns:
* Returns the folders object for the folders that was just renamed.
*/
flextype()->put('/api/media/folders', function (Request $request, Response $response) use ($api_errors) {
// Get Post Data
$post_data = $request->getParsedBody();
if (! isset($post_data['token']) || ! isset($post_data['access_token']) || ! isset($post_data['path']) || ! isset($post_data['new_path'])) {
return $response->withStatus($api_errors['0601']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0601']));
}
// Set variables
$token = $post_data['token'];
$access_token = $post_data['access_token'];
$id = $post_data['path'];
$new_path = $post_data['new_path'];
if (flextype('registry')->get('flextype.settings.api.media.folders.enabled')) {
// Validate files and access token
if (validate_folders_token($token) && validate_access_token($access_token)) {
$folders_token_file_path = PATH['project'] . '/tokens/media/folders/' . $token . '/token.yaml';
$access_token_file_path = PATH['project'] . '/tokens/access/' . $access_token . '/token.yaml';
// Set files and access token file
if (
($folders_token_file_data = flextype('yaml')->decode(filesystem()->file($folders_token_file_path)->get())) &&
($access_token_file_data = flextype('yaml')->decode(filesystem()->file($access_token_file_path)->get()))
) {
if (
$folders_token_file_data['state'] === 'disabled' ||
($folders_token_file_data['limit_calls'] !== 0 && $folders_token_file_data['calls'] >= $folders_token_file_data['limit_calls'])
) {
return $response->withStatus($api_errors['0501']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0501']));
}
if (
$access_token_file_data['state'] === 'disabled' ||
($access_token_file_data['limit_calls'] !== 0 && $access_token_file_data['calls'] >= $access_token_file_data['limit_calls'])
) {
return $response->withStatus($api_errors['0501']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0501']));
}
// Rename folder
$move_folder = flextype('media_folders')->move($id, $new_path);
$response_data = [];
if ($move_folder) {
$response_data['data'] = flextype('media_folders')->fetch($new_path);
}
// Set response code
$response_code = $move_folder ? 200 : 404;
// Update calls counter
filesystem()->file($folders_token_file_path)->put(flextype('yaml')->encode(array_replace_recursive($folders_token_file_data, ['calls' => $folders_token_file_data['calls'] + 1])));
if ($response_code === 404) {
// Return response
return $response
->withStatus($api_errors['0602']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0602']));
}
// Return response
return $response
->withStatus($response_code)
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($response_data));
}
return $response
->withStatus($api_errors['0003']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0003']));
}
return $response
->withStatus($api_errors['0003']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0003']));
}
return $response
->withStatus($api_errors['0003']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0003']));
});
/**
* Delete folder
*
* endpoint: DELETE /api/media/folders
*
* Body:
* id - [REQUIRED] - Unique identifier of the folder.
* token - [REQUIRED] - Valid Folders token.
* access_token - [REQUIRED] - Valid Authentication token.
*
* Returns:
* Returns an empty body with HTTP status 204
*/
flextype()->delete('/api/media/folders', function (Request $request, Response $response) use ($api_errors) {
// Get Post Data
$post_data = $request->getParsedBody();
if (! isset($post_data['token']) || ! isset($post_data['access_token']) || ! isset($post_data['path'])) {
return $response->withStatus($api_errors['0601']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0601']));
}
// Set variables
$token = $post_data['token'];
$access_token = $post_data['access_token'];
$id = $post_data['path'];
if (flextype('registry')->get('flextype.settings.api.media.folders.enabled')) {
// Validate files and access token
if (validate_folders_token($token) && validate_access_token($access_token)) {
$folders_token_file_path = PATH['project'] . '/tokens/media/folders/' . $token . '/token.yaml';
$access_token_file_path = PATH['project'] . '/tokens/access/' . $access_token . '/token.yaml';
// Set files and access token file
if (
($folders_token_file_data = flextype('yaml')->decode(filesystem()->file($folders_token_file_path)->get())) &&
($access_token_file_data = flextype('yaml')->decode(filesystem()->file($access_token_file_path)->get()))
) {
if (
$folders_token_file_data['state'] === 'disabled' ||
($folders_token_file_data['limit_calls'] !== 0 && $folders_token_file_data['calls'] >= $folders_token_file_data['limit_calls'])
) {
return $response->withStatus($api_errors['0501']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0501']));
}
if (
$access_token_file_data['state'] === 'disabled' ||
($access_token_file_data['limit_calls'] !== 0 && $access_token_file_data['calls'] >= $access_token_file_data['limit_calls'])
) {
return $response->withStatus($api_errors['0501']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0501']));
}
// Delete folder
$delete_folder = flextype('media_folders')->delete($id);
// Set response code
$response_code = $delete_folder ? 204 : 404;
// Update calls counter
filesystem()->file($folders_token_file_path)->put(flextype('yaml')->encode(array_replace_recursive($folders_token_file_data, ['calls' => $folders_token_file_data['calls'] + 1])));
if ($response_code === 404) {
// Return response
return $response
->withStatus($api_errors['0602']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0602']));
}
// Return response
return $response
->withStatus($response_code)
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($delete_folder));
}
return $response
->withStatus($api_errors['0003']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0003']));
}
return $response
->withStatus($api_errors['0003']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0003']));
}
return $response
->withStatus($api_errors['0003']['http_status_code'])
->withHeader('Content-Type', 'application/json;charset=' . flextype('registry')->get('flextype.settings.charset'))
->write(flextype('json')->encode($api_errors['0003']));
});

View File

@@ -177,8 +177,7 @@ if (flextype()->isApiRequest()) {
include_once ROOT_DIR . '/src/flextype/Endpoints/Utils/access.php';
include_once ROOT_DIR . '/src/flextype/Endpoints/entries.php';
include_once ROOT_DIR . '/src/flextype/Endpoints/registry.php';
include_once ROOT_DIR . '/src/flextype/Endpoints/files.php';
include_once ROOT_DIR . '/src/flextype/Endpoints/folders.php';
include_once ROOT_DIR . '/src/flextype/Endpoints/media.php';
include_once ROOT_DIR . '/src/flextype/Endpoints/images.php';
}

View File

@@ -422,7 +422,7 @@ media:
session:
name: Flextype
# Flextype APIs
# Flextype Rest APIs
api:
entries:
enabled: true
@@ -430,12 +430,13 @@ api:
registry:
enabled: true
default_token:
files:
enabled: true
default_token:
folders:
enabled: true
default_token:
media:
files:
enabled: true
default_token:
folders:
enabled: true
default_token:
images:
enabled: true
default_token: