withRouting( web: __DIR__ . '/../routes/web.php', commands: __DIR__ . '/../routes/console.php', health: '/up', using: function () { // Web Routes Route::middleware(['web', 'installed', 'appConfig'])->group(function () { // Public routes require base_path('routes/web.php'); // Auth routes Route::middleware(['smtpConfig'])->group(base_path('routes/auth.php')); // Admin routes Route::middleware(['auth', 'role:admin'])->group(base_path('routes/admin.php')); // Instructor routes Route::middleware(['auth', 'verified', 'role:admin,instructor'])->group(base_path('routes/instructor.php')); // Student routes Route::middleware(['auth', 'role:student,instructor,admin'])->group(base_path('routes/student.php')); // Payout routes Route::middleware(['auth', 'role:admin'])->group(base_path('routes/payout.php')); Route::get('/{slug}', [HomeController::class, 'inner_page'])->name('inner.page'); }); }, ) ->withMiddleware(function (Middleware $middleware) { $middleware->api(prepend: [ \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, ]); // Trust reverse proxy headers (X-Forwarded-Proto, etc.) so Laravel generates HTTPS URLs // correctly when TLS is terminated in front of the container (e.g. Dokploy/Traefik). $middleware->trustProxies(at: '*'); $middleware->encryptCookies(except: ['appearance']); $middleware->web(append: [ HandleAppearance::class, HandleInertiaRequests::class, AddLinkHeadersForPreloadedAssets::class, ]); $middleware->preventRequestsDuringMaintenance(except: [ 'system/*', 'install/refresh', ]); $middleware->alias([ 'customize' => \App\Http\Middleware\IntroCustomize::class, 'appConfig' => \App\Http\Middleware\AppConfig::class, 'authConfig' => \App\Http\Middleware\AuthConfig::class, 'smtpConfig' => \App\Http\Middleware\SmtpConfig::class, 'checkSmtp' => \App\Http\Middleware\SmtpConfigCheck::class, 'checkEnroll' => \App\Http\Middleware\CheckEnroll::class, 'checkCourseCreation' => \App\Http\Middleware\CheckCourseCreation::class, 'ip.detector' => \App\Http\Middleware\IpDetectorMiddleware::class, 'verifiedAccess' => \App\Http\Middleware\VerifiedAccess::class, 'role' => \App\Http\Middleware\CheckRole::class, 'installed' => \Modules\Installer\Http\Middleware\InstalledRoutes::class, ]); }) ->withExceptions(function (Exceptions $exceptions) { $exceptions->renderable(function (\Exception $e, $request) { if ($request->is('dashboard/*') && !$request->is('dashboard/uploads/chunked/*')) { return back()->with('error', $e->getMessage()); } }); })->create();