From ba3baabb50007060cf0e79ac552d752d78a4c9c6 Mon Sep 17 00:00:00 2001 From: snipe Date: Mon, 19 Feb 2024 14:34:36 +0000 Subject: [PATCH 1/3] Fixed @return Signed-off-by: snipe --- app/Http/Controllers/Api/SettingsController.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/Api/SettingsController.php b/app/Http/Controllers/Api/SettingsController.php index 425a1859f8..5d63dd79b0 100644 --- a/app/Http/Controllers/Api/SettingsController.php +++ b/app/Http/Controllers/Api/SettingsController.php @@ -148,7 +148,7 @@ class SettingsController extends Controller * * @author [A. Gianotto] [] * @since [v3.0] - * @return Redirect + * @return JsonResponse */ public function ajaxTestEmail() { @@ -170,7 +170,7 @@ class SettingsController extends Controller * * @author [A. Gianotto] [] * @since [v5.0.0] - * @return Response + * @return JsonResponse */ public function purgeBarcodes() { @@ -211,7 +211,7 @@ class SettingsController extends Controller * @author [A. Gianotto] [] * @since [v5.0.0] * @param \Illuminate\Http\Request $request - * @return array + * @return array | JsonResponse */ public function showLoginAttempts(Request $request) { From 10bb844087cca96e82444e8068551ce52e914aff Mon Sep 17 00:00:00 2001 From: snipe Date: Mon, 19 Feb 2024 14:34:51 +0000 Subject: [PATCH 2/3] Added comment Signed-off-by: snipe --- app/Http/Controllers/Api/SettingsController.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/Http/Controllers/Api/SettingsController.php b/app/Http/Controllers/Api/SettingsController.php index 5d63dd79b0..3cb3102ce9 100644 --- a/app/Http/Controllers/Api/SettingsController.php +++ b/app/Http/Controllers/Api/SettingsController.php @@ -229,6 +229,12 @@ class SettingsController extends Controller } + /** + * Lists backup files + * + * @author [A. Gianotto] + * @return array | JsonResponse + */ public function listBackups() { $settings = Setting::getSettings(); $path = 'app/backups'; From 8f8edd4126fca520d21f77a12fe012f5d712a7c2 Mon Sep 17 00:00:00 2001 From: snipe Date: Mon, 19 Feb 2024 14:35:09 +0000 Subject: [PATCH 3/3] Added /backups/latest endpoint Signed-off-by: snipe --- .../Controllers/Api/SettingsController.php | 41 ++++++++++++++++++- routes/api.php | 7 ++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/Api/SettingsController.php b/app/Http/Controllers/Api/SettingsController.php index 3cb3102ce9..a481d67944 100644 --- a/app/Http/Controllers/Api/SettingsController.php +++ b/app/Http/Controllers/Api/SettingsController.php @@ -261,7 +261,6 @@ class SettingsController extends Controller $count++; } - } } @@ -271,6 +270,14 @@ class SettingsController extends Controller } + /** + * Downloads a backup file. + * We use response()->download() here instead of Storage::download() because Storage::download() + * exhausts memory on larger files. + * + * @author [A. Gianotto] + * @return JsonResponse|\Symfony\Component\HttpFoundation\BinaryFileResponse + */ public function downloadBackup($file) { $path = storage_path('app/backups'); @@ -283,4 +290,36 @@ class SettingsController extends Controller } } + + /** + * Determines and downloads the latest backup + * + * @author [A. Gianotto] + * @since [v6.3.1] + * @return JsonResponse|\Symfony\Component\HttpFoundation\BinaryFileResponse + */ + public function downloadLatestBackup() { + + $fileData = collect(); + foreach (Storage::files('app/backups') as $file) { + if (pathinfo($file, PATHINFO_EXTENSION) == 'zip') { + $fileData->push([ + 'file' => $file, + 'date' => Storage::lastModified($file) + ]); + } + } + + $newest = $fileData->sortByDesc('date')->first(); + if (Storage::exists($newest['file'])) { + $headers = ['ContentType' => 'application/zip']; + return response()->download(storage_path($newest['file']), basename($newest['file']), $headers); + } else { + return response()->json(Helper::formatStandardApiResponse('error', null, trans('general.file_not_found')), 404); + } + + + } + + } \ No newline at end of file diff --git a/routes/api.php b/routes/api.php index d10d90fbee..842e6210df 100644 --- a/routes/api.php +++ b/routes/api.php @@ -828,6 +828,13 @@ Route::group(['prefix' => 'v1', 'middleware' => ['api', 'throttle:api']], functi ] )->name('api.settings.backups.index'); + Route::get('backups/download/latest', + [ + Api\SettingsController::class, + 'downloadLatestBackup' + ] + )->name('api.settings.backups.latest'); + Route::get('backups/download/{file}', [ Api\SettingsController::class,