diff --git a/app/Helpers/StorageHelper.php b/app/Helpers/StorageHelper.php new file mode 100644 index 000000000..c5e084fa6 --- /dev/null +++ b/app/Helpers/StorageHelper.php @@ -0,0 +1,23 @@ +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 cbf15219b..28aa3097c 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 1e3ade907..33f47d123 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 6ca9662c0..c449df480 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 bce241aee..f5a3ea118 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]);