From 01a987288425ccce9e053f80c4c8926e09aaf866 Mon Sep 17 00:00:00 2001 From: Awilum Date: Thu, 17 Dec 2020 19:44:02 +0300 Subject: [PATCH] feath(rest-api): reorganize endpoints for Media Rest API #514 --- src/flextype/Endpoints/folders.php | 551 ---------------- .../Endpoints/{files.php => media.php} | 599 +++++++++++++++++- src/flextype/bootstrap.php | 3 +- src/flextype/settings.yaml | 15 +- 4 files changed, 575 insertions(+), 593 deletions(-) delete mode 100644 src/flextype/Endpoints/folders.php rename src/flextype/Endpoints/{files.php => media.php} (59%) diff --git a/src/flextype/Endpoints/folders.php b/src/flextype/Endpoints/folders.php deleted file mode 100644 index a712690f..00000000 --- a/src/flextype/Endpoints/folders.php +++ /dev/null @@ -1,551 +0,0 @@ -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'])); -}); diff --git a/src/flextype/Endpoints/files.php b/src/flextype/Endpoints/media.php similarity index 59% rename from src/flextype/Endpoints/files.php rename to src/flextype/Endpoints/media.php index 5ce25d31..fefcdd24 100644 --- a/src/flextype/Endpoints/files.php +++ b/src/flextype/Endpoints/media.php @@ -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'])); +}); diff --git a/src/flextype/bootstrap.php b/src/flextype/bootstrap.php index 7765d0fe..e679d8cf 100755 --- a/src/flextype/bootstrap.php +++ b/src/flextype/bootstrap.php @@ -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'; } diff --git a/src/flextype/settings.yaml b/src/flextype/settings.yaml index 78328bed..424e9734 100644 --- a/src/flextype/settings.yaml +++ b/src/flextype/settings.yaml @@ -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: