diff --git a/bootstrap/app.php b/bootstrap/app.php
index 7271f0d..33a18db 100644
--- a/bootstrap/app.php
+++ b/bootstrap/app.php
@@ -1,8 +1,17 @@
withRouting(
@@ -13,16 +22,71 @@ return Application::configure(basePath: dirname(__DIR__))
)
->withMiddleware(function (Middleware $middleware): void {
$middleware->web(append: [
- \App\Http\Middleware\HandleInertiaRequests::class,
- \Illuminate\Http\Middleware\AddLinkHeadersForPreloadedAssets::class,
+ HandleInertiaRequests::class,
+ AddLinkHeadersForPreloadedAssets::class,
]);
$middleware->alias([
- 'role' => \Spatie\Permission\Middleware\RoleMiddleware::class,
- 'permission' => \Spatie\Permission\Middleware\PermissionMiddleware::class,
- 'role_or_permission' => \Spatie\Permission\Middleware\RoleOrPermissionMiddleware::class,
+ 'role' => RoleMiddleware::class,
+ 'permission' => PermissionMiddleware::class,
+ 'role_or_permission' => RoleOrPermissionMiddleware::class,
]);
//
})
->withExceptions(function (Exceptions $exceptions): void {
- //
+ $exceptions->respond(function (Response $response, Throwable $e, Request $request) {
+ $status = $response->getStatusCode();
+
+ $errors = [
+ 403 => [
+ 'title' => "The Cockpit is Off Limits",
+ 'message' => 'You don\'t have permission to access this page.',
+ ],
+ 404 => [
+ 'title' => 'You Flight Has Been Cancelled',
+ 'message' => 'The page you are looking for doesn\'t exist or has been moved.',
+ ],
+ 419 => [
+ 'title' => 'Page Expired',
+ 'message' => 'Your session has expired. Please refresh the page and try again.',
+ ],
+ 429 => [
+ 'title' => 'Too Many Requests',
+ 'message' => 'You\'re making too many requests. Please slow down and try again.',
+ ],
+ 500 => [
+ 'title' => 'This Plane Has Made An Emergency Landing',
+ 'message' => 'Something went wrong on our end. Please try again later.',
+ ],
+ 503 => [
+ 'title' => 'Service Unavailable',
+ 'message' => 'We\'re down for maintenance. Please check back soon.',
+ ],
+ ];
+
+ $isLocal = app()->environment(['local', 'testing']);
+ $handled = array_keys($errors);
+ $friendlyErrorsOnLocal = [404, 403];
+
+ // In local/testing, only handle 404. In production, handle all.
+ $shouldHandle = isset($errors[$status]) && (
+ !$isLocal || in_array($status, $friendlyErrorsOnLocal)
+ );
+
+ if (!$shouldHandle) {
+ return $response;
+ }
+
+ return Inertia::render('Error', [
+ 'statusCode' => $status,
+ 'statusTitle' => $errors[$status]['title'],
+ 'statusMessage' => $errors[$status]['message'],
+ 'auth' => [
+ 'user' => $request->user(),
+ 'roles' => $request->user()?->getRoleNames() ?? [],
+ 'permissions' => $request->user()?->getAllPermissions()->pluck('name') ?? [],
+ ],
+ ])
+ ->toResponse($request)
+ ->setStatusCode($status);
+ });
})->create();
diff --git a/resources/js/Components/FlightsGoneBy/FlightMap.vue b/resources/js/Components/FlightsGoneBy/FlightMap.vue
index 71031d8..f396f59 100644
--- a/resources/js/Components/FlightsGoneBy/FlightMap.vue
+++ b/resources/js/Components/FlightsGoneBy/FlightMap.vue
@@ -2,9 +2,12 @@
-