Spaces:
Configuration error
Configuration error
| import { NextResponse } from "next/server"; | |
| import type { NextRequest } from "next/server"; | |
| const AUTH_COOKIE = "sas-auth-storage"; | |
| function getTokenFromCookie(request: NextRequest): string | null { | |
| const cookie = request.cookies.get(AUTH_COOKIE); | |
| if (!cookie?.value) return null; | |
| try { | |
| const parsed = JSON.parse(decodeURIComponent(cookie.value)); | |
| return parsed?.state?.token || null; | |
| } catch { | |
| return null; | |
| } | |
| } | |
| function parseRoleFromCookie(request: NextRequest): string | null { | |
| const cookie = request.cookies.get(AUTH_COOKIE); | |
| if (!cookie?.value) return null; | |
| try { | |
| const parsed = JSON.parse(decodeURIComponent(cookie.value)); | |
| return parsed?.state?.user?.role || null; | |
| } catch { | |
| return null; | |
| } | |
| } | |
| export function middleware(request: NextRequest): NextResponse { | |
| const { pathname } = request.nextUrl; | |
| const publicPaths = ["/login", "/api", "/_next", "/favicon.ico"]; | |
| if (publicPaths.some((p) => pathname.startsWith(p))) { | |
| return NextResponse.next(); | |
| } | |
| const token = getTokenFromCookie(request); | |
| if (pathname === "/") { | |
| if (token) { | |
| const role = parseRoleFromCookie(request); | |
| if (role === "ADMIN") { | |
| return NextResponse.redirect(new URL("/admin/dashboard", request.url)); | |
| } | |
| if (role === "TEACHER") { | |
| return NextResponse.redirect(new URL("/teacher/classes", request.url)); | |
| } | |
| } | |
| return NextResponse.redirect(new URL("/login", request.url)); | |
| } | |
| if (!token && !pathname.startsWith("/login")) { | |
| return NextResponse.redirect(new URL("/login", request.url)); | |
| } | |
| const role = parseRoleFromCookie(request); | |
| if (token && role) { | |
| if (role === "STUDENT") { | |
| if (pathname.startsWith("/admin") || pathname.startsWith("/teacher")) { | |
| return NextResponse.redirect(new URL("/login", request.url)); | |
| } | |
| } | |
| if (role !== "ADMIN" && pathname.startsWith("/admin")) { | |
| return NextResponse.redirect(new URL("/teacher/classes", request.url)); | |
| } | |
| if (role !== "TEACHER" && pathname.startsWith("/teacher")) { | |
| return NextResponse.redirect(new URL("/admin/dashboard", request.url)); | |
| } | |
| } | |
| return NextResponse.next(); | |
| } | |
| export const config = { | |
| matcher: ["/((?!_next/static|_next/image|favicon.ico).*)"], | |
| }; | |