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:
@@ -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']));
|
||||
});
|
@@ -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']));
|
||||
});
|
@@ -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';
|
||||
}
|
||||
|
||||
|
@@ -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:
|
||||
|
Reference in New Issue
Block a user