Read the attachment disk from config, not env (secrets S3)

The three reads were `config('ticketing.storage_disk', env('TICKETING_STORAGE_DISK', 'local'))`,
but this package had no config file at all — so the config() lookup was always
null and env() was the only reader.

Once `config:cache` runs in production, a runtime env() returns NULL. Every
ticket attachment would have silently gone to the 'local' disk, ignoring
whatever the operator had configured — and previously-stored attachments would
404 because show() looked on the wrong disk.

Verified rather than assumed: with TICKETING_STORAGE_DISK=s3proof set,
config() returned 's3proof' both cached and uncached, while env() returned
's3proof' uncached and NULL cached.

Adds config/ticketing.php + mergeConfigFrom so the value is captured at
cache time, and drops the env() fallbacks.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-26 14:00:15 -04:00
parent a54c01453d
commit 0be06694b2
5 changed files with 26 additions and 5 deletions

View File

@@ -49,7 +49,7 @@ class TicketAttachmentController extends Controller
]);
$file = $request->file('file');
$disk = config('ticketing.storage_disk', env('TICKETING_STORAGE_DISK', 'local'));
$disk = config('ticketing.storage_disk', 'local');
$path = $file->store('ticketing/attachments/' . $ticket->id, $disk);
TicketAttachment::create([
@@ -71,7 +71,7 @@ class TicketAttachmentController extends Controller
abort(403);
}
$disk = config('ticketing.storage_disk', env('TICKETING_STORAGE_DISK', 'local'));
$disk = config('ticketing.storage_disk', 'local');
return Storage::disk($disk)->download($attachment->path, $attachment->filename);
}
}

View File

@@ -322,7 +322,7 @@ class TicketController extends Controller
]);
if ($request->hasFile('attachments')) {
$disk = config('ticketing.storage_disk', env('TICKETING_STORAGE_DISK', 'local'));
$disk = config('ticketing.storage_disk', 'local');
foreach ($request->file('attachments') as $file) {
if (!$file->isValid()) continue;
$path = $file->store('ticketing/attachments/' . $ticket->id, $disk);

View File

@@ -6,7 +6,13 @@ use Illuminate\Support\ServiceProvider;
class TicketingServiceProvider extends ServiceProvider
{
public function register(): void {}
public function register(): void
{
// Merge so config('ticketing.*') resolves even when the host app has not
// published a copy — and, crucially, so the value is captured by
// config:cache instead of being read from env() at runtime (S3).
$this->mergeConfigFrom(__DIR__.'/../config/ticketing.php', 'ticketing');
}
public function boot(): void
{