From 91cb7950548f8ddd34243d0c89c5bfa2cae383a1 Mon Sep 17 00:00:00 2001 From: Peter Papp Date: Wed, 21 Jul 2021 18:00:45 +0200 Subject: [PATCH] controller refactoring part 23 --- routes/file.php | 26 ++-- routes/share.php | 16 +- .../Users/Controllers/GetAvatarController.php | 28 ++++ .../VisitorBrowseFolderContentController.php | 19 ++- .../FileAccess/GetFileController.php | 42 +++++ .../FileAccess/GetThumbnailController.php | 31 ++++ .../FileAccess/VisitorGetFileController.php | 46 ++++++ .../VisitorGetThumbnailController.php | 46 ++++++ .../Controllers/FileAccessController.php | 144 ------------------ ...ller.php => VisitorShowFileController.php} | 2 +- ...er.php => VisitorUploadFileController.php} | 2 +- .../Controllers/GetIAppController.php | 28 ++++ .../FileSharedAccessController.php | 108 ------------- .../Zipping/Controllers/GetZipController.php | 48 ++++++ .../Controllers/VisitorGetZipController.php | 47 ++++++ ...ller.php => VisitorZipFilesController.php} | 7 +- ...ler.php => VisitorZipFolderController.php} | 10 +- src/Support/Services/HelperService.php | 22 --- 18 files changed, 360 insertions(+), 312 deletions(-) create mode 100644 src/App/Users/Controllers/GetAvatarController.php create mode 100644 src/Domain/Files/Controllers/FileAccess/GetFileController.php create mode 100644 src/Domain/Files/Controllers/FileAccess/GetThumbnailController.php create mode 100644 src/Domain/Files/Controllers/FileAccess/VisitorGetFileController.php create mode 100644 src/Domain/Files/Controllers/FileAccess/VisitorGetThumbnailController.php delete mode 100644 src/Domain/Files/Controllers/FileAccessController.php rename src/Domain/Files/Controllers/{VisitorGetSingleFileInfoController.php => VisitorShowFileController.php} (95%) rename src/Domain/Files/Controllers/{VisitorUploadFilesController.php => VisitorUploadFileController.php} (96%) create mode 100644 src/Domain/Settings/Controllers/GetIAppController.php delete mode 100644 src/Domain/Sharing/Controllers/FileSharedAccessController.php create mode 100644 src/Domain/Zipping/Controllers/GetZipController.php create mode 100644 src/Domain/Zipping/Controllers/VisitorGetZipController.php rename src/Domain/Zipping/Controllers/{EditorZipFilesController.php => VisitorZipFilesController.php} (87%) rename src/Domain/Zipping/Controllers/{EditorZipFolderController.php => VisitorZipFolderController.php} (84%) diff --git a/routes/file.php b/routes/file.php index 85998ac9..f6158be7 100644 --- a/routes/file.php +++ b/routes/file.php @@ -1,20 +1,26 @@ name('avatar'); -Route::get('/system/{image}', [FileAccessController::class, 'get_system_image']); +Route::get('/avatars/{avatar}', GetAvatarController::class); +Route::get('/system/{image}', GetIAppController::class); // Get public thumbnails and files -Route::get('/thumbnail/{name}/{shared}', [FileSharedAccessController::class, 'get_thumbnail_public']); -Route::get('/file/{name}/{shared}', [FileSharedAccessController::class, 'get_file_public']); -Route::get('/zip/{id}/public/{token}', [FileSharedAccessController::class, 'get_zip_public'])->name('zip_public'); +Route::get('/thumbnail/{name}/{shared}', VisitorGetThumbnailController::class); +Route::get('/zip/{id}/public/{token}', VisitorGetZipController::class); +Route::get('/file/{name}/{shared}', VisitorGetFileController::class); // User master,editor,visitor access to image thumbnails and file downloads Route::group(['middleware' => ['auth:sanctum']], function () { - Route::get('/thumbnail/{name}', [FileAccessController::class, 'get_thumbnail'])->name('thumbnail'); - Route::get('/file/{name}', [FileAccessController::class, 'get_file'])->name('file'); - Route::get('/zip/{id}', [FileAccessController::class, 'get_zip'])->name('zip'); + Route::get('/thumbnail/{name}', GetThumbnailController::class)->name('thumbnail'); + Route::get('/file/{name}', GetFileController::class)->name('file'); + Route::get('/zip/{id}', GetZipController::class)->name('zip'); }); diff --git a/routes/share.php b/routes/share.php index 010f1bd9..3990e971 100644 --- a/routes/share.php +++ b/routes/share.php @@ -2,12 +2,12 @@ use Domain\Sharing\Controllers\ShareController; use Domain\Sharing\Controllers\OGSiteController; -use Domain\Zipping\Controllers\EditorZipFilesController; -use Domain\Zipping\Controllers\EditorZipFolderController; -use Domain\Files\Controllers\VisitorUploadFilesController; +use Domain\Zipping\Controllers\VisitorZipFilesController; +use Domain\Zipping\Controllers\VisitorZipFolderController; +use Domain\Files\Controllers\VisitorUploadFileController; use Domain\Folders\Controllers\VisitorCreateFolderController; use Domain\Items\Controllers\VisitorMoveFileOrFolderController; -use Domain\Files\Controllers\VisitorGetSingleFileInfoController; +use Domain\Files\Controllers\VisitorShowFileController; use Domain\Items\Controllers\VisitorDeleteFileOrFolderController; use Domain\Items\Controllers\VisitorRenameFileOrFolderController; use Domain\Browsing\Controllers\VisitorBrowseFolderContentController; @@ -18,7 +18,7 @@ use Domain\Sharing\Controllers\VisitorAuthenticateProtectedShareController; // Browse functions Route::group(['prefix' => 'editor'], function () { Route::post('/create-folder/{shared}', VisitorCreateFolderController::class); - Route::post('/upload/{shared}', VisitorUploadFilesController::class); + Route::post('/upload/{shared}', VisitorUploadFileController::class); Route::patch('/rename/{id}/{shared}', VisitorRenameFileOrFolderController::class); Route::post('/remove/{shared}', VisitorDeleteFileOrFolderController::class); @@ -27,8 +27,8 @@ Route::group(['prefix' => 'editor'], function () { // Zip shared items Route::group(['prefix' => 'zip'], function () { - Route::get('/folder/{id}/{shared}', EditorZipFolderController::class); - Route::post('/files/{shared}', EditorZipFilesController::class); + Route::get('/folder/{id}/{shared}', VisitorZipFolderController::class); + Route::post('/files/{shared}', VisitorZipFilesController::class); }); // Browse share content @@ -37,7 +37,7 @@ Route::group(['prefix' => 'browse'], function () { Route::get('/folders/{id}/{shared}', VisitorBrowseFolderContentController::class); Route::get('/navigation/{shared}', VisitorNavigationFolderTreeController::class); Route::get('/search/{shared}', VisitorSearchFilesAndFoldersController::class); - Route::get('/file/{shared}', VisitorGetSingleFileInfoController::class); + Route::get('/file/{shared}', VisitorShowFileController::class); Route::get('/share/{shared}', [ShareController::class, 'show']); }); diff --git a/src/App/Users/Controllers/GetAvatarController.php b/src/App/Users/Controllers/GetAvatarController.php new file mode 100644 index 00000000..124b7855 --- /dev/null +++ b/src/App/Users/Controllers/GetAvatarController.php @@ -0,0 +1,28 @@ +helper->check_item_access($id, $shared); // Get files and folders - list($folders, $files) = $this->helper->get_items_under_shared_by_folder_id($id, $shared); + $folders = Folder::where('user_id', $shared->user_id) + ->where('parent_id', $id) + ->sortable() + ->get(); + + $files = File::where('user_id', $shared->user_id) + ->where('folder_id', $id) + ->sortable() + ->get(); // Set thumbnail links for public files - $files->map(function ($file) use ($shared) { - $file->setPublicUrl($shared->token); - }); + $files->map(fn ($file) => $file->setPublicUrl($shared->token)); // Collect folders and files to single array return collect([$folders, $files]) diff --git a/src/Domain/Files/Controllers/FileAccess/GetFileController.php b/src/Domain/Files/Controllers/FileAccess/GetFileController.php new file mode 100644 index 00000000..10d769c8 --- /dev/null +++ b/src/Domain/Files/Controllers/FileAccess/GetFileController.php @@ -0,0 +1,42 @@ +where('user_id', Auth::id()) + ->where('basename', $filename) + ->firstOrFail(); + + // Store user download size + ($this->recordDownload)( + file_size: (int) $file->getRawOriginal('filesize'), + user_id: Auth::id(), + ); + + return $this->helper->download_file($file, Auth::id()); + } +} \ No newline at end of file diff --git a/src/Domain/Files/Controllers/FileAccess/GetThumbnailController.php b/src/Domain/Files/Controllers/FileAccess/GetThumbnailController.php new file mode 100644 index 00000000..96a295de --- /dev/null +++ b/src/Domain/Files/Controllers/FileAccess/GetThumbnailController.php @@ -0,0 +1,31 @@ +whereUserId(Auth::id()) + ->whereThumbnail($filename) + ->firstOrFail(); + + return $this->helper->download_thumbnail_file($file, Auth::id()); + } +} \ No newline at end of file diff --git a/src/Domain/Files/Controllers/FileAccess/VisitorGetFileController.php b/src/Domain/Files/Controllers/FileAccess/VisitorGetFileController.php new file mode 100644 index 00000000..c4333e43 --- /dev/null +++ b/src/Domain/Files/Controllers/FileAccess/VisitorGetFileController.php @@ -0,0 +1,46 @@ +helper->check_protected_share_record($shared); + + // Get file record + $file = UserFile::where('user_id', $shared->user_id) + ->where('basename', $filename) + ->firstOrFail(); + + // Check file access + $this->helper->check_guest_access_to_shared_items($shared, $file); + + // Store user download size + ($this->recordDownload)( + file_size: (int) $file->getRawOriginal('filesize'), + user_id: $shared->user_id, + ); + + return $this->helper->download_file($file, $shared->user_id); + } +} \ No newline at end of file diff --git a/src/Domain/Files/Controllers/FileAccess/VisitorGetThumbnailController.php b/src/Domain/Files/Controllers/FileAccess/VisitorGetThumbnailController.php new file mode 100644 index 00000000..a8483426 --- /dev/null +++ b/src/Domain/Files/Controllers/FileAccess/VisitorGetThumbnailController.php @@ -0,0 +1,46 @@ +helper->check_protected_share_record($shared); + + // Get file record + $file = UserFile::where('user_id', $shared->user_id) + ->where('thumbnail', $filename) + ->firstOrFail(); + + // Check file access + $this->helper->check_guest_access_to_shared_items($shared, $file); + + // Store user download size + ($this->recordDownload)( + file_size: (int) $file->getRawOriginal('filesize'), + user_id: $shared->user_id, + ); + + return $this->helper->download_thumbnail_file($file, $shared->user_id); + } +} \ No newline at end of file diff --git a/src/Domain/Files/Controllers/FileAccessController.php b/src/Domain/Files/Controllers/FileAccessController.php deleted file mode 100644 index 60b40432..00000000 --- a/src/Domain/Files/Controllers/FileAccessController.php +++ /dev/null @@ -1,144 +0,0 @@ -where('user_id', Auth::id()) - ->where('basename', $filename) - ->firstOrFail(); - - // Check user permission - /*if (!$request->user()->tokenCan('master')) { - - // Get shared token - $shared = get_shared($request->cookie('shared_token')); - - // Check access to file - $this->check_file_access($shared, $file); - }*/ - - // Store user download size - ($this->recordDownload)( - (int) $file->getRawOriginal('filesize'), - Auth::id() - ); - - return $this->helper->download_file($file, Auth::id()); - } - - /** - * Get generated zip for user - * - * @param $id - * @return \Symfony\Component\HttpFoundation\StreamedResponse - */ - public function get_zip($id) - { - $disk = Storage::disk('local'); - - $zip = Zip::whereId($id) - ->where('user_id', Auth::id()) - ->firstOrFail(); - - // Store user download size - ($this->recordDownload)( - $disk->size("zip/$zip->basename"), - $zip->user_id - ); - - return $disk->download("zip/$zip->basename", $zip->basename, [ - 'Content-Type' => 'application/zip', - 'Content-Length' => $disk->size("zip/$zip->basename"), - 'Accept-Ranges' => 'bytes', - 'Content-Range' => 'bytes 0-600/' . $disk->size("zip/$zip->basename"), - 'Content-Disposition' => "attachment; filename=$zip->basename", - ]); - } - - /** - * Get image thumbnail - * - * @param Request $request - * @param $filename - * @return mixed - * @throws \Illuminate\Contracts\Filesystem\FileNotFoundException - */ - public function get_thumbnail(Request $request, $filename) - { - // Get file record - $file = UserFile::withTrashed() - ->whereUserId(Auth::id()) - ->whereThumbnail($filename) - ->firstOrFail(); - - // Check user permission - /*if (!$request->user()->tokenCan('master')) { - $this->check_file_access($request, $file); - }*/ - - return $this->helper->download_thumbnail_file($file, Auth::id()); - } -} diff --git a/src/Domain/Files/Controllers/VisitorGetSingleFileInfoController.php b/src/Domain/Files/Controllers/VisitorShowFileController.php similarity index 95% rename from src/Domain/Files/Controllers/VisitorGetSingleFileInfoController.php rename to src/Domain/Files/Controllers/VisitorShowFileController.php index 8a9fb487..cadfa230 100644 --- a/src/Domain/Files/Controllers/VisitorGetSingleFileInfoController.php +++ b/src/Domain/Files/Controllers/VisitorShowFileController.php @@ -10,7 +10,7 @@ use Domain\Files\Resources\FileResource; /** * Get shared file record */ -class VisitorGetSingleFileInfoController +class VisitorShowFileController { public function __construct( public HelperService $helper, diff --git a/src/Domain/Files/Controllers/VisitorUploadFilesController.php b/src/Domain/Files/Controllers/VisitorUploadFileController.php similarity index 96% rename from src/Domain/Files/Controllers/VisitorUploadFilesController.php rename to src/Domain/Files/Controllers/VisitorUploadFileController.php index 867fbf89..74f25862 100644 --- a/src/Domain/Files/Controllers/VisitorUploadFilesController.php +++ b/src/Domain/Files/Controllers/VisitorUploadFileController.php @@ -12,7 +12,7 @@ use Support\Demo\Actions\FakeUploadFileAction; /** * guest user upload file into shared folder */ -class VisitorUploadFilesController extends Controller +class VisitorUploadFileController extends Controller { public function __construct( public HelperService $helper, diff --git a/src/Domain/Settings/Controllers/GetIAppController.php b/src/Domain/Settings/Controllers/GetIAppController.php new file mode 100644 index 00000000..b872e0c1 --- /dev/null +++ b/src/Domain/Settings/Controllers/GetIAppController.php @@ -0,0 +1,28 @@ +where('shared_token', $token) - ->first(); - - // Store user download size - ($this->recordDownload)( - $disk->size("zip/$zip->basename"), - $zip->user_id - ); - - return $disk - ->download("zip/$zip->basename", $zip->basename, [ - 'Content-Type' => 'application/zip', - 'Content-Length' => $disk->size("zip/$zip->basename"), - 'Accept-Ranges' => 'bytes', - 'Content-Range' => 'bytes 0-600/' . $disk->size("zip/$zip->basename"), - 'Content-Disposition' => 'attachment; filename=' . $zip->basename, - ]); - } - - /** - * Get file public - * - * @param $filename - * @param Share $shared - * @return mixed - */ - public function get_file_public($filename, Share $shared) - { - // Check ability to access protected share files - $this->helper->check_protected_share_record($shared); - - // Get file record - $file = UserFile::where('user_id', $shared->user_id) - ->where('basename', $filename) - ->firstOrFail(); - - // Check file access - $this->helper->check_guest_access_to_shared_items($shared, $file); - - // Store user download size - ($this->recordDownload)( - (int) $file->getRawOriginal('filesize'), - $shared->user_id - ); - - return $this->helper->download_file($file, $shared->user_id); - } - - /** - * Get public image thumbnail - * - * @param $filename - * @param Share $shared - * @return mixed - */ - public function get_thumbnail_public($filename, Share $shared) - { - // Check ability to access protected share files - $this->helper->check_protected_share_record($shared); - - // Get file record - $file = UserFile::where('user_id', $shared->user_id) - ->where('thumbnail', $filename) - ->firstOrFail(); - - // Check file access - $this->helper->check_guest_access_to_shared_items($shared, $file); - - // Store user download size - ($this->recordDownload)( - (int) $file->getRawOriginal('filesize'), - $shared->user_id - ); - - return $this->helper->download_thumbnail_file($file, $shared->user_id); - } -} diff --git a/src/Domain/Zipping/Controllers/GetZipController.php b/src/Domain/Zipping/Controllers/GetZipController.php new file mode 100644 index 00000000..87e355eb --- /dev/null +++ b/src/Domain/Zipping/Controllers/GetZipController.php @@ -0,0 +1,48 @@ +where('user_id', Auth::id()) + ->firstOrFail(); + + // Store user download size + ($this->recordDownload)( + file_size: $disk->size("zip/$zip->basename"), + user_id: $zip->user_id, + ); + + return $disk->download("zip/$zip->basename", $zip->basename, [ + 'Content-Type' => 'application/zip', + 'Content-Length' => $disk->size("zip/$zip->basename"), + 'Accept-Ranges' => 'bytes', + 'Content-Range' => 'bytes 0-600/' . $disk->size("zip/$zip->basename"), + 'Content-Disposition' => "attachment; filename=$zip->basename", + ]); + } +} \ No newline at end of file diff --git a/src/Domain/Zipping/Controllers/VisitorGetZipController.php b/src/Domain/Zipping/Controllers/VisitorGetZipController.php new file mode 100644 index 00000000..bbe87d17 --- /dev/null +++ b/src/Domain/Zipping/Controllers/VisitorGetZipController.php @@ -0,0 +1,47 @@ +where('shared_token', $token) + ->first(); + + // Store user download size + ($this->recordDownload)( + file_size: $disk->size("zip/$zip->basename"), + user_id: $zip->user_id, + ); + + return $disk->download("zip/$zip->basename", $zip->basename, [ + 'Content-Type' => 'application/zip', + 'Content-Length' => $disk->size("zip/$zip->basename"), + 'Accept-Ranges' => 'bytes', + 'Content-Range' => 'bytes 0-600/' . $disk->size("zip/$zip->basename"), + 'Content-Disposition' => 'attachment; filename=' . $zip->basename, + ]); + } +} \ No newline at end of file diff --git a/src/Domain/Zipping/Controllers/EditorZipFilesController.php b/src/Domain/Zipping/Controllers/VisitorZipFilesController.php similarity index 87% rename from src/Domain/Zipping/Controllers/EditorZipFilesController.php rename to src/Domain/Zipping/Controllers/VisitorZipFilesController.php index 6b9afab8..d1338ee3 100644 --- a/src/Domain/Zipping/Controllers/EditorZipFilesController.php +++ b/src/Domain/Zipping/Controllers/VisitorZipFilesController.php @@ -12,7 +12,7 @@ use Domain\Zipping\Actions\ZipFilesAction; /** * Guest download multiple files via zip */ -class EditorZipFilesController extends Controller +class VisitorZipFilesController extends Controller { public function __construct( public HelperService $helper, @@ -45,10 +45,7 @@ class EditorZipFilesController extends Controller // Get file return response([ - 'url' => route('zip_public', [ - 'id' => $zip->id, - 'token' => $shared->token, - ]), + 'url' => url("/zip/{$zip->id}/public/{$shared->token}"), 'name' => $zip->basename, ], 201); } diff --git a/src/Domain/Zipping/Controllers/EditorZipFolderController.php b/src/Domain/Zipping/Controllers/VisitorZipFolderController.php similarity index 84% rename from src/Domain/Zipping/Controllers/EditorZipFolderController.php rename to src/Domain/Zipping/Controllers/VisitorZipFolderController.php index cca76956..1225f7bc 100644 --- a/src/Domain/Zipping/Controllers/EditorZipFolderController.php +++ b/src/Domain/Zipping/Controllers/VisitorZipFolderController.php @@ -11,12 +11,11 @@ use Domain\Zipping\Actions\ZipFolderAction; /** * Guest download folder via zip */ -class EditorZipFolderController extends Controller +class VisitorZipFolderController extends Controller { public function __construct( public HelperService $helper, - ) { - } + ) {} public function __invoke( ZipFolderAction $zipFolder, @@ -41,10 +40,7 @@ class EditorZipFolderController extends Controller // Get file return response([ - 'url' => route('zip_public', [ - 'id' => $zip->id, - 'token' => $shared->token, - ]), + 'url' => url("/zip/{$zip->id}/public/{$shared->token}"), 'name' => $zip->basename, ], 201); } diff --git a/src/Support/Services/HelperService.php b/src/Support/Services/HelperService.php index dc11652a..251c00c6 100644 --- a/src/Support/Services/HelperService.php +++ b/src/Support/Services/HelperService.php @@ -115,28 +115,6 @@ class HelperService return Storage::download($path, $file->getRawOriginal('thumbnail')); } - /** - * Get all folders and files under the share record - * - * @param $id - * @param $shared - * @return array - */ - public function get_items_under_shared_by_folder_id($id, $shared): array - { - $folders = Folder::where('user_id', $shared->user_id) - ->where('parent_id', $id) - ->sortable() - ->get(); - - $files = File::where('user_id', $shared->user_id) - ->where('folder_id', $id) - ->sortable() - ->get(); - - return [$folders, $files]; - } - /** * @param Share $shared */