diff --git a/app/Helpers/StorageHelper.php b/app/Helpers/StorageHelper.php new file mode 100644 index 0000000000000000000000000000000000000000..c5e084fa68a9157281f1172abd3dc8ee8326571b --- /dev/null +++ b/app/Helpers/StorageHelper.php @@ -0,0 +1,23 @@ +<?php + +namespace App\Helpers; +use Illuminate\Support\Facades\Storage; + +class StorageHelper +{ + static function downloader($filename, $disk = 'default') { + if($disk == 'default') { + $disk = config('filesystems.default'); + } + switch(config("filesystems.disks.$disk.driver")) { + case 'local': + return response()->download(Storage::disk($disk)->path($filename)); //works for PRIVATE or public?! + + case 's3': + return redirect()->away(Storage::disk($disk)->temporaryUrl($filename, now()->addMinutes(5))); //works for private or public, I guess? + + default: + return Storage::disk($disk)->download($filename); + } + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Assets/AssetFilesController.php b/app/Http/Controllers/Assets/AssetFilesController.php index cbf15219b73bf3df2d79540759f9bd43b19afea8..28aa3097c57971323853920d4ac3a98bd064a1b6 100644 --- a/app/Http/Controllers/Assets/AssetFilesController.php +++ b/app/Http/Controllers/Assets/AssetFilesController.php @@ -9,6 +9,7 @@ use App\Models\Actionlog; use App\Models\Asset; use Illuminate\Support\Facades\Response; use Illuminate\Support\Facades\Storage; +use App\Helpers\StorageHelper; class AssetFilesController extends Controller { @@ -86,7 +87,7 @@ class AssetFilesController extends Controller } return JsonResponse::create(["error" => "Failed validation: "], 500); } - return Storage::download($file); + return StorageHelper::downloader($file); } // Prepare the error message $error = trans('admin/hardware/message.does_not_exist', ['id' => $fileId]); diff --git a/app/Http/Controllers/Licenses/LicenseFilesController.php b/app/Http/Controllers/Licenses/LicenseFilesController.php index 1e3ade9074db750f8bd858e144194849c21c89a2..33f47d123894c0e681089d15f6075de43dc2c1fe 100644 --- a/app/Http/Controllers/Licenses/LicenseFilesController.php +++ b/app/Http/Controllers/Licenses/LicenseFilesController.php @@ -10,6 +10,7 @@ use Illuminate\Support\Facades\Input; use Illuminate\Support\Facades\Response; use Illuminate\Support\Facades\Storage; use Symfony\Component\HttpFoundation\JsonResponse; +use App\Helpers\StorageHelper; class LicenseFilesController extends Controller { @@ -143,18 +144,18 @@ class LicenseFilesController extends Controller // We have to override the URL stuff here, since local defaults in Laravel's Flysystem // won't work, as they're not accessible via the web - if (config('filesystems.default') == 'local') { - return Storage::download($file); + if (config('filesystems.default') == 'local') { // TODO - is there any way to fix this at the StorageHelper layer? + return StorageHelper::downloader($file); } else { if ($download != 'true') { \Log::debug('display the file'); - if ($contents = file_get_contents(Storage::url($file))) { + if ($contents = file_get_contents(Storage::url($file))) { // TODO - this will fail on private S3 files or large public ones return Response::make(Storage::url($file)->header('Content-Type', mime_content_type($file))); } return JsonResponse::create(["error" => "Failed validation: "], 500); } - return Storage::download($file); + return StorageHelper::downloader($file); } } diff --git a/app/Http/Controllers/SettingsController.php b/app/Http/Controllers/SettingsController.php index 6ca9662c07af0cf819bd39b037a33fbf003231c2..c449df48006b725332b4858859442a8868d43e7a 100755 --- a/app/Http/Controllers/SettingsController.php +++ b/app/Http/Controllers/SettingsController.php @@ -21,6 +21,7 @@ use Image; use Input; use Redirect; use Response; +use App\Helpers\StorageHelper; /** * This controller handles all actions related to Settings for @@ -1091,7 +1092,7 @@ class SettingsController extends Controller if (! config('app.lock_passwords')) { if (Storage::exists($path . '/' . $filename)) { - return Storage::download($path . '/' . $filename); + return StorageHelper::downloader($path . '/' . $filename); } else { // Redirect to the backup page return redirect()->route('settings.backups.index')->with('error', trans('admin/settings/message.backup.file_not_found')); diff --git a/app/Http/Controllers/Users/UserFilesController.php b/app/Http/Controllers/Users/UserFilesController.php index bce241aee2393dee84485517bc105f4a2e2e7fac..f5a3ea1180ad8b07ec8efbe32a9b824cf7cdd090 100644 --- a/app/Http/Controllers/Users/UserFilesController.php +++ b/app/Http/Controllers/Users/UserFilesController.php @@ -117,7 +117,7 @@ class UserFilesController extends Controller $log = Actionlog::find($fileId); $file = $log->get_src('users'); - return Response::download($file); + return Response::download($file); //FIXME this doesn't use the new StorageHelper yet, but it's complicated... } // Prepare the error message $error = trans('admin/users/message.user_not_found', ['id' => $userId]);