From fddba2fb87807547d3d1eedd5287408549a1c3a3 Mon Sep 17 00:00:00 2001 From: Aldarien Date: Wed, 22 Dec 2021 01:38:23 -0300 Subject: [PATCH] Manage uploaded files --- .idea/contabilidad.iml | 81 ------------- .idea/php.xml | 87 -------------- api/common/Controller/Files.php | 77 +++++++++++++ api/common/Service/FileHandler.php | 109 ++++++++++++++++++ api/nginx.conf | 6 +- api/public/uploads/pdfs/BICE-CC-2021-09.pdf | Bin 74452 -> 0 bytes .../uploads/pdfs/Scotiabank-CC-2021-10.pdf | Bin 12951 -> 0 bytes api/resources/routes/uploads.php | 12 ++ api/setup/settings/02_common.php | 2 +- api/setup/setups/02_common.php | 54 +++++---- 10 files changed, 234 insertions(+), 194 deletions(-) delete mode 100644 .idea/contabilidad.iml delete mode 100644 .idea/php.xml create mode 100644 api/common/Controller/Files.php create mode 100644 api/common/Service/FileHandler.php delete mode 100644 api/public/uploads/pdfs/BICE-CC-2021-09.pdf delete mode 100644 api/public/uploads/pdfs/Scotiabank-CC-2021-10.pdf create mode 100644 api/resources/routes/uploads.php diff --git a/.idea/contabilidad.iml b/.idea/contabilidad.iml deleted file mode 100644 index 8558fe5..0000000 --- a/.idea/contabilidad.iml +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/php.xml b/.idea/php.xml deleted file mode 100644 index e783343..0000000 --- a/.idea/php.xml +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/api/common/Controller/Files.php b/api/common/Controller/Files.php new file mode 100644 index 0000000..6441a24 --- /dev/null +++ b/api/common/Controller/Files.php @@ -0,0 +1,77 @@ +listFiles(); + usort($files, function($a, $b) { + $f = strcmp($a->folder, $b->folder); + if ($f == 0) { + return strcmp($a->filename, $b->filename); + } + return $f; + }); + return $this->withJson($response, compact('files')); + } + public function upload(Request $request, Response $response, Handler $handler, Factory $factory): Response { + $post = $request->getParsedBody(); + $cuenta = $factory->find(Cuenta::class)->one($post['cuenta']); + $file = $request->getUploadedFiles()['archivo']; + $new_name = implode(' - ', [$cuenta->nombre, $cuenta->categoria()->nombre, $post['fecha']]); + $output = [ + 'input' => [ + 'name' => $file->getClientFilename(), + 'type' => $file->getClientMediaType(), + 'size' => $file->getSize(), + 'error' => $file->getError() + ], + 'new_name' => $new_name, + 'uploaded' => $handler->uploadFile($file, $new_name) + ]; + return $this->withJson($response, $output); + } + public function get(Request $request, Response $response, Handler $handler, $folder, $filename): Response { + $file = $handler->getFile($folder, $filename); + return $response + ->withHeader('Content-Type', $handler->getType($folder)) + ->withHeader('Content-Disposition', 'attachment; filename=' . $filename) + ->withAddedHeader('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0') + ->withHeader('Cache-Control', 'post-check=0, pre-check=0') + ->withHeader('Pragma', 'no-cache') + ->withBody($file); + } + public function edit(Request $request, Response $response, Handler $handler, Factory $factory, $folder, $filename): Response { + $post = json_decode($request->getBody()); + $cuenta = $factory->find(Cuenta::class)->one($post->cuenta); + $filenfo = $handler->getInfo($folder, $filename); + $new_name = implode('.', [implode(' - ', [$cuenta->nombre, $cuenta->categoria()->nombre, $post->fecha]), $filenfo->getExtension()]); + $output = [ + 'input' => [ + 'folder' => $folder, + 'filename' => $filename, + 'post' => $post + ], + 'edited' => $handler->editFilename($folder, $filename, $new_name) + ]; + return $this->withJson($response, $output); + } + public function delete(Request $request, Response $response, Handler $handler, $folder, $filename): Response { + $output = [ + 'input' => [ + 'folder' => $folder, + 'filename' => $filename + ], + 'deleted' => $handler->deleteFile($folder, $filename) + ]; + return $this->withJson($response, $output); + } +} diff --git a/api/common/Service/FileHandler.php b/api/common/Service/FileHandler.php new file mode 100644 index 0000000..5d06b1b --- /dev/null +++ b/api/common/Service/FileHandler.php @@ -0,0 +1,109 @@ +base_folder = $params->folder; + $this->addValidTypes(array_keys($params->types)); + $this->addFolders($params->types); + } + public function addFolders(array $folders): FileHandler { + foreach ($folders as $type => $folder) { + $this->addFolder($type, $folder); + } + return $this; + } + public function addFolder(string $type, string $folder): FileHandler { + $this->folders[$type] = $folder; + return $this; + } + public function addValidTypes(array $valid_types): FileHandler { + foreach ($valid_types as $type) { + $this->addValidType($type); + } + return $this; + } + public function addValidType(string $type): FileHandler { + $this->valid_types []= $type; + return $this; + } + public function getType(string $folder): string { + return array_search($folder, $this->folders); + } + + public function uploadFile(UploadedFileInterface $file, string $new_name = null): bool { + if ($file->getError() !== UPLOAD_ERR_OK) { + return false; + } + if (!in_array($file->getClientMediaType(), array_keys($this->valid_types))) { + return false; + } + if ($new_name === null) { + $new_name = $file->getClientFilename(); + } + $filenfo = new \SplFileInfo($file->getClientFilename()); + if (!str_contains($new_name, $filenfo->getExtension())) { + $new_name .= '.' . $filenfo->getExtension(); + } + $to = implode(DIRECTORY_SEPARATOR, [$this->base_folder, $this->folders[$file->getClientMediaType()], $new_name]); + $file->moveTo($to); + return file_exists($to); + } + public function listFiles(): array { + $output = []; + foreach ($this->folders as $f) { + $folder = implode(DIRECTORY_SEPARATOR, [$this->base_folder, $f]); + $files = new \DirectoryIterator($folder); + foreach ($files as $file) { + if ($file->isDir()) { + continue; + } + $output []= (object) ['folder' => $f, 'filename' => $file->getBasename()]; + } + } + return $output; + } + protected function validateFilename(string $folder, string $filename): bool|string { + if (!in_array($folder, $this->folders)) { + return false; + } + $f = implode(DIRECTORY_SEPARATOR, [$this->base_folder, $folder, $filename]); + if (!file_exists($f)) { + return false; + } + return $f; + } + public function getInfo(string $folder, string $filename): \SplFileInfo|bool { + if (!$f = $this->validateFilename($folder, $filename)) { + return false; + } + return new \SplFileInfo($f); + } + public function getFile(string $folder, string $filename): StreamInterface|bool { + if (!$f = $this->validateFilename($folder, $filename)) { + return false; + } + return Stream::create(file_get_contents($f)); + } + public function editFilename(string $folder, string $filename, string $new_name): bool { + if (!$f = $this->validateFilename($folder, $filename)) { + return false; + } + $info = new \SplFileInfo($f); + $new = implode(DIRECTORY_SEPARATOR, [$this->base_folder, $folder, $new_name . '.' . $info->getExtension()]); + return rename($f, $new); + } + public function deleteFile(string $folder, string $filename): bool { + if (!$f = $this->validateFilename($folder, $filename)) { + return false; + } + return unlink($f); + } +} diff --git a/api/nginx.conf b/api/nginx.conf index 5d96382..069343f 100644 --- a/api/nginx.conf +++ b/api/nginx.conf @@ -15,8 +15,7 @@ server { if ($request_method = 'OPTIONS') { add_header 'Access-Control-Max-Age' 1728000; add_header 'Access-Control-Allow-Origin' '*'; - add_header 'Access-Control-Allow-Headers' 'Authorization,Accept,Origin,DNT,X-CustomHeader,Keep-Alive,User-Agent, - X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range'; + add_header 'Access-Control-Allow-Headers' 'Authorization,Accept,Origin,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range'; add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,PUT,DELETE,PATCH'; add_header 'Content-Type' 'application/json'; add_header 'Content-Length' 0; @@ -24,8 +23,7 @@ server { } add_header 'Access-Control-Allow-Origin' '*'; - add_header 'Access-Control-Allow-Headers' 'Authorization,Accept,Origin,DNT,X-CustomHeader,Keep-Alive,User-Agent, - X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range'; + add_header 'Access-Control-Allow-Headers' 'Authorization,Accept,Origin,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range'; add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,PUT,DELETE,PATCH'; try_files $uri =404; diff --git a/api/public/uploads/pdfs/BICE-CC-2021-09.pdf b/api/public/uploads/pdfs/BICE-CC-2021-09.pdf deleted file mode 100644 index d5216552447bf125dc177f8aab6ea6cb4bcc047c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74452 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 diff --git a/api/public/uploads/pdfs/Scotiabank-CC-2021-10.pdf b/api/public/uploads/pdfs/Scotiabank-CC-2021-10.pdf deleted file mode 100644 index 8fef2f32e600ad50f0002d6079eacf11c96a65a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12951 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 diff --git a/api/resources/routes/uploads.php b/api/resources/routes/uploads.php new file mode 100644 index 0000000..6138be8 --- /dev/null +++ b/api/resources/routes/uploads.php @@ -0,0 +1,12 @@ +group('/uploads', function($app) { + $app->post('/add[/]', [Files::class, 'upload']); + $app->get('[/]', Files::class); +}); +$app->group('/upload/{folder}/{filename}', function($app) { + $app->put('[/]', [Files::class, 'edit']); + $app->delete('[/]', [Files::class, 'delete']); + $app->get('[/]', [Files::class, 'get']); +}); diff --git a/api/setup/settings/02_common.php b/api/setup/settings/02_common.php index 1185ad3..eeb2bd9 100644 --- a/api/setup/settings/02_common.php +++ b/api/setup/settings/02_common.php @@ -19,7 +19,7 @@ return [ 'public' ]); $arr['uploads'] = implode(DIRECTORY_SEPARATOR, [ - $arr['public'], + $arr['base'], 'uploads' ]); $arr['pdfs'] = implode(DIRECTORY_SEPARATOR, [ diff --git a/api/setup/setups/02_common.php b/api/setup/setups/02_common.php index 27836d5..56eabc2 100644 --- a/api/setup/setups/02_common.php +++ b/api/setup/setups/02_common.php @@ -14,27 +14,27 @@ return [ $c->get(Contabilidad\Common\Service\Auth::class) ); }, - Contabilidad\Common\Service\PdfHandler::class => function(Container $c) { - return new Contabilidad\Common\Service\PdfHandler($c->get(GuzzleHttp\Client::class), $c->get('folders')->pdfs, implode('/', [ - $c->get('urls')->python, - 'pdf', - 'parse' - ])); - }, - Contabilidad\Common\Service\CsvHandler::class => function(Container $c) { - return new Contabilidad\Common\Service\CsvHandler($c->get('folders')->csvs); - }, - Contabilidad\Common\Service\XlsHandler::class => function(Container $c) { - return new Contabilidad\Common\Service\XlsHandler($c->get('folders')->xlss); - }, - Contabilidad\Common\Service\DocumentHandler::class => function(Container $c) { - $handlers = [ - $c->get(Contabilidad\Common\Service\XlsHandler::class), - $c->get(Contabilidad\Common\Service\CsvHandler::class), - $c->get(Contabilidad\Common\Service\PdfHandler::class) - ]; - return new Contabilidad\Common\Service\DocumentHandler($handlers); - }, + Contabilidad\Common\Service\PdfHandler::class => function(Container $c) { + return new Contabilidad\Common\Service\PdfHandler($c->get(GuzzleHttp\Client::class), $c->get('folders')->pdfs, implode('/', [ + $c->get('urls')->python, + 'pdf', + 'parse' + ])); + }, + Contabilidad\Common\Service\CsvHandler::class => function(Container $c) { + return new Contabilidad\Common\Service\CsvHandler($c->get('folders')->csvs); + }, + Contabilidad\Common\Service\XlsHandler::class => function(Container $c) { + return new Contabilidad\Common\Service\XlsHandler($c->get('folders')->xlss); + }, + Contabilidad\Common\Service\DocumentHandler::class => function(Container $c) { + $handlers = [ + $c->get(Contabilidad\Common\Service\XlsHandler::class), + $c->get(Contabilidad\Common\Service\CsvHandler::class), + $c->get(Contabilidad\Common\Service\PdfHandler::class) + ]; + return new Contabilidad\Common\Service\DocumentHandler($handlers); + }, Contabilidad\Common\Service\TiposCambios::class => function(Container $c) { return new Contabilidad\Common\Service\TiposCambios( $c->get(GuzzleHttp\Client::class), @@ -42,5 +42,17 @@ return [ $c->get('python_api'), $c->get('python_key') ); + }, + Contabilidad\Common\Service\FileHandler::class => function(Container $c) { + return new Contabilidad\Common\Service\FileHandler((object) [ + 'folder' => $c->get('folders')->uploads, + 'types' => [ + 'text/csv' => 'csvs', + 'application/pdf' => 'pdfs', + 'application/vnd.ms-excel' => 'xlss', + 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' => 'xlss', + 'application/json' => 'jsons' + ] + ]); } ];