From 8986a2ef9a0ae7025f14c576b7cc3f39e3679a01 Mon Sep 17 00:00:00 2001 From: Awilum Date: Sun, 28 Jun 2020 15:10:41 +0300 Subject: [PATCH] feat(media): add create media file endpoint #428 --- src/flextype/endpoints/files.php | 89 ++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) diff --git a/src/flextype/endpoints/files.php b/src/flextype/endpoints/files.php index a66880af..52565f96 100644 --- a/src/flextype/endpoints/files.php +++ b/src/flextype/endpoints/files.php @@ -98,3 +98,92 @@ $app->get('/api/files', function (Request $request, Response $response) use ($fl return $response ->withJson($api_sys_messages['AccessTokenInvalid'], 401); }); + +/** + * Create a media file + * + * endpoint: POST /api/files + * + * Body: + * folder - [REQUIRED] - The folder you're targetting. + * token - [REQUIRED] - Valid Entries token. + * access_token - [REQUIRED] - Valid Access token. + * file - [REQUIRED] - Raw file data (multipart/form-data). + * + * Returns: + * Returns the entry item object for the entry item that was just created. + */ +$app->post('/api/files', function (Request $request, Response $response) use ($flextype, $api_sys_messages) { + + // Get Post Data + $post_data = $request->getParsedBody(); + + // Set variables + $token = $post_data['token']; + $access_token = $post_data['access_token']; + $folder = $post_data['folder']; + $file = $_FILES['file']; + + if ($flextype['registry']->get('flextype.settings.api.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'; + $access_token_file_path = PATH['project'] . '/tokens/access/' . $access_token . '/token.yaml'; + + // Set files and access token file + if (($files_token_file_data = $flextype['serializer']->decode(Filesystem::read($files_token_file_path), 'yaml')) && + ($access_token_file_data = $flextype['serializer']->decode(Filesystem::read($access_token_file_path), 'yaml'))) { + + if ($files_token_file_data['state'] === 'disabled' || + ($files_token_file_data['limit_calls'] !== 0 && $files_token_file_data['calls'] >= $files_token_file_data['limit_calls'])) { + return $response->withJson($api_sys_messages['AccessTokenInvalid'], 401); + } + + 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->withJson($api_sys_messages['AccessTokenInvalid'], 401); + } + + // Create entry + $create_file = $flextype['media_files']->create($file, $folder); + + if ($create_file) { + $response_data['data'] = $flextype['media_files']->fetch($folder . '/' . basename($create_file)); + } else { + $response_data['data'] = []; + } + + // Set response code + $response_code = (Filesystem::has($create_file)) ? 200 : 404; + + // Return response + return $response + ->withJson($response_data, $response_code); + + // Update calls counter + Filesystem::write($files_token_file_path, $flextype['serializer']->encode(array_replace_recursive($files_token_file_data, ['calls' => $files_token_file_data['calls'] + 1]), 'yaml')); + + if ($response_code == 404) { + + // Return response + return $response + ->withJson($api_sys_messages['NotFound'], $response_code); + } + + // Return response + return $response + ->withJson($response_data, $response_code); + } + + return $response + ->withJson($api_sys_messages['AccessTokenInvalid'], 401); + } + + return $response + ->withJson($api_sys_messages['AccessTokenInvalid'], 401); + } + + return $response + ->withJson($api_sys_messages['AccessTokenInvalid'], 401); +});