Wire admin studio SSR and search infrastructure
This commit is contained in:
@@ -3,12 +3,14 @@
|
||||
use App\Http\Middleware\ConditionalShareErrorsFromSession;
|
||||
use App\Http\Middleware\ConditionalStartSession;
|
||||
use App\Http\Middleware\ConditionalValidateCsrfToken;
|
||||
use Illuminate\Auth\AuthenticationException;
|
||||
use Illuminate\Session\Middleware\StartSession;
|
||||
use Illuminate\Foundation\Http\Middleware\ValidateCsrfToken;
|
||||
use Illuminate\View\Middleware\ShareErrorsFromSession;
|
||||
use Illuminate\Foundation\Application;
|
||||
use Illuminate\Foundation\Configuration\Exceptions;
|
||||
use Illuminate\Foundation\Configuration\Middleware;
|
||||
use Sentry\Laravel\Integration;
|
||||
|
||||
return Application::configure(basePath: dirname(__DIR__))
|
||||
->withRouting(
|
||||
@@ -28,6 +30,7 @@ return Application::configure(basePath: dirname(__DIR__))
|
||||
$middleware->validateCsrfTokens(except: [
|
||||
'chat_post',
|
||||
'chat_post/*',
|
||||
'api/art/*/view',
|
||||
]);
|
||||
|
||||
$middleware->web(append: [
|
||||
@@ -43,6 +46,7 @@ return Application::configure(basePath: dirname(__DIR__))
|
||||
$middleware->alias([
|
||||
'artwork.maturity.access' => \App\Http\Middleware\EnsureArtworkMaturityAccess::class,
|
||||
'admin.moderation' => \App\Http\Middleware\EnsureAdminOrModerator::class,
|
||||
'admin.access' => \App\Http\Middleware\EnsureStaffAccess::class,
|
||||
'creator.access' => \App\Http\Middleware\EnsureCreatorAccess::class,
|
||||
'ensure.email.login.upgrade'=> \App\Http\Middleware\EnsureEmailLoginUpgradeComplete::class,
|
||||
'ensure.onboarding.complete'=> \App\Http\Middleware\EnsureOnboardingComplete::class,
|
||||
@@ -56,8 +60,20 @@ return Application::configure(basePath: dirname(__DIR__))
|
||||
]);
|
||||
})
|
||||
->withExceptions(function (Exceptions $exceptions): void {
|
||||
Integration::handles($exceptions);
|
||||
|
||||
// ── 404 / 410 / 403 — web HTML responses only ─────────────────────────
|
||||
$exceptions->render(function (
|
||||
AuthenticationException $e,
|
||||
\Illuminate\Http\Request $request
|
||||
) {
|
||||
if ($request->expectsJson()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return redirect()->to(route('login'));
|
||||
});
|
||||
|
||||
// ── HTML HTTP errors — use Nova-styled templates when possible ───────
|
||||
$exceptions->render(function (
|
||||
\Symfony\Component\HttpKernel\Exception\HttpException $e,
|
||||
\Illuminate\Http\Request $request
|
||||
@@ -68,24 +84,29 @@ return Application::configure(basePath: dirname(__DIR__))
|
||||
|
||||
$status = $e->getStatusCode();
|
||||
|
||||
// 403 and 401 use their generic Blade views — no extra data needed.
|
||||
if ($status === 403) {
|
||||
return response(view('errors.403', ['message' => $e->getMessage() ?: null]), 403);
|
||||
}
|
||||
if ($status === 401) {
|
||||
return response(view('errors.401'), 401);
|
||||
}
|
||||
if ($status === 410) {
|
||||
return response(view('errors.410'), 410);
|
||||
}
|
||||
|
||||
// Generic 404 — smart URL-pattern routing to contextual views.
|
||||
if ($status === 404) {
|
||||
return app(\App\Http\Controllers\Web\ErrorController::class)
|
||||
->handleNotFound($request);
|
||||
}
|
||||
|
||||
return null; // Fallback to Laravel's default.
|
||||
$view = view()->exists("errors.{$status}")
|
||||
? "errors.{$status}"
|
||||
: 'errors.http';
|
||||
|
||||
$data = $view === 'errors.http'
|
||||
? [
|
||||
'error_code' => $status,
|
||||
'error_title' => \Symfony\Component\HttpFoundation\Response::$statusTexts[$status] ?? 'Unexpected Error',
|
||||
'error_message' => $e->getMessage() ?: 'Something went wrong while loading this page.',
|
||||
]
|
||||
: [];
|
||||
|
||||
if ($status === 403) {
|
||||
$data['message'] = $e->getMessage() ?: null;
|
||||
}
|
||||
|
||||
return response()->view($view, $data, $status, $e->getHeaders());
|
||||
});
|
||||
|
||||
// ── ModelNotFoundException → contextual 404 on web ───────────────────
|
||||
|
||||
Reference in New Issue
Block a user