diff --git a/app/Http/Controllers/Admin/ReleaseController.php b/app/Http/Controllers/Admin/ReleaseController.php index a68ff65..2d2b5e2 100644 --- a/app/Http/Controllers/Admin/ReleaseController.php +++ b/app/Http/Controllers/Admin/ReleaseController.php @@ -68,7 +68,17 @@ final class ReleaseController extends Controller 'version' => ['required','string','max:40'], 'build_number' => ['required','integer','min:1'], 'channel' => ['required', Rule::in(['stable','beta'])], 'minimum_macos' => ['nullable','string','max:30'], 'release_notes' => ['nullable','string','max:20000'], 'sparkle_signature' => ['nullable','string','max:2000'], - 'package' => [$release->exists ? 'nullable' : 'required','file','max:1048576','mimes:dmg,zip'], + 'package' => [ + $release->exists ? 'nullable' : 'required', + 'file', + 'max:1048576', + function (string $attribute, $value, \Closure $fail): void { + $extension = strtolower($value->getClientOriginalExtension()); + if (! in_array($extension, ['dmg', 'zip'], true)) { + $fail('The package must be a DMG or ZIP file.'); + } + }, + ], 'is_published' => ['nullable','boolean'], 'is_featured' => ['nullable','boolean'], ]); $data['is_published'] = $request->boolean('is_published');