Repo rebuild
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Modules\Helpdesk\Http\Controllers;
|
||||
|
||||
use Illuminate\Contracts\Filesystem\FileNotFoundException;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Support\Facades\Gate;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Illuminate\View\View;
|
||||
use Modules\Helpdesk\Models\Attachment;
|
||||
use Symfony\Component\HttpFoundation\StreamedResponse;
|
||||
|
||||
final class AttachmentPreviewController extends Controller
|
||||
{
|
||||
/**
|
||||
* Preview a safe Helpdesk attachment after enforcing ticket access.
|
||||
*
|
||||
* @throws FileNotFoundException
|
||||
*/
|
||||
public function __invoke(Attachment $attachment): View|StreamedResponse|RedirectResponse
|
||||
{
|
||||
$ticket = $attachment->ticket;
|
||||
|
||||
if ($ticket !== null) {
|
||||
Gate::authorize('view', $ticket);
|
||||
}
|
||||
|
||||
abort_unless(Storage::disk($attachment->disk)->exists($attachment->path), 404);
|
||||
|
||||
if ($attachment->isSourceCode()) {
|
||||
$contents = Storage::disk($attachment->disk)->get($attachment->path);
|
||||
|
||||
return view('helpdesk::attachments.source-preview', [
|
||||
'attachment' => $attachment,
|
||||
'contents' => is_string($contents) ? $contents : '',
|
||||
'language' => $attachment->language(),
|
||||
]);
|
||||
}
|
||||
|
||||
abort_unless($attachment->isPreviewableBinary(), 404);
|
||||
|
||||
return Storage::disk($attachment->disk)->response($attachment->path, $attachment->original_name, [
|
||||
'Content-Disposition' => 'inline; filename="' . addslashes($attachment->original_name) . '"',
|
||||
'X-Content-Type-Options' => 'nosniff',
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user