diff --git a/app/Http/Controllers/Api/SettingsController.php b/app/Http/Controllers/Api/SettingsController.php index 9444b5980..62380b221 100644 --- a/app/Http/Controllers/Api/SettingsController.php +++ b/app/Http/Controllers/Api/SettingsController.php @@ -2,6 +2,9 @@ namespace App\Http\Controllers\Api; +use App\Helpers\Helper; +use App\Helpers\StorageHelper; +use App\Http\Transformers\DatatablesTransformer; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use App\Models\Ldap; @@ -265,4 +268,52 @@ class SettingsController extends Controller return (new LoginAttemptsTransformer)->transformLoginAttempts($login_attempt_results, $total); } + + + public function listBackups() { + $settings = Setting::getSettings(); + $path = 'app/backups'; + $backup_files = Storage::files($path); + $files_raw = []; + $count = 0; + + if (count($backup_files) > 0) { + + for ($f = 0; $f < count($backup_files); $f++) { + + // Skip dotfiles like .gitignore and .DS_STORE + if ((substr(basename($backup_files[$f]), 0, 1) != '.')) { + $file_timestamp = Storage::lastModified($backup_files[$f]); + + $files_raw[] = [ + 'filename' => basename($backup_files[$f]), + 'filesize' => Setting::fileSizeConvert(Storage::size($backup_files[$f])), + 'modified_value' => $file_timestamp, + 'modified_display' => date($settings->date_display_format.' '.$settings->time_display_format, $file_timestamp), + + ]; + $count++; + } + + + } + } + + $files = array_reverse($files_raw); + return (new DatatablesTransformer)->transformDatatables($files, $count); + + } + + + public function downloadBackup($file) { + + $path = 'app/backups'; + if (Storage::exists($path.'/'.$file)) { + $headers = ['ContentType' => 'application/zip']; + return Storage::download($path.'/'.$file, $file, $headers); + } else { + return response()->json(Helper::formatStandardApiResponse('error', null, 'File not found')); + } + + } } \ No newline at end of file diff --git a/routes/api.php b/routes/api.php index 0b16f84ad..3c0ab53c7 100644 --- a/routes/api.php +++ b/routes/api.php @@ -786,6 +786,20 @@ Route::group(['prefix' => 'v1', 'middleware' => ['api', 'throttle:api']], functi ] )->name('api.settings.mailtest'); + Route::get('backups', + [ + Api\SettingsController::class, + 'listBackups' + ] + )->name('api.settings.backups.index'); + + Route::get('backups/download/{file}', + [ + Api\SettingsController::class, + 'downloadBackup' + ] + )->name('api.settings.backups.download'); + }); Route::resource('settings',