import { NextResponse, type NextRequest } from "next/server"; import { OAC_CASE_COOKIE, parseOacCase } from "@/utils/user"; // บังคับ login (mock e-Court) ทุกหน้า — ไม่มี cookie oacCase ที่ parse ได้ = redirect /login // (parse จริง ไม่ใช่แค่มี cookie — cookie ขยะ/ครึ่ง ๆ ถือว่ายังไม่เข้าสู่ระบบ) export function middleware(req: NextRequest) { const user = parseOacCase(req.cookies.get(OAC_CASE_COOKIE)?.value); if (!user) { const url = req.nextUrl.clone(); // N8 D5: เก็บ path+query ไว้วนกลับหลัง login (deep link จาก e-Court ไม่หาย) // — ไม่ใส่กรณี next เป็น "/" ไปเฉย ๆ ไม่ให้ /login มี query เกินจำเป็น // (path ตรงนี้ตัด basePath แล้ว / NextURL ใส่ basePath คืนตอน redirect เอง — invariant #12) const next = url.pathname + url.search; url.pathname = "/login"; url.search = ""; if (next !== "/") url.searchParams.set("next", next); return NextResponse.redirect(url); } return NextResponse.next(); } // ยกเว้น: หน้า login เอง, API/SSE/export, ไฟล์อัปโหลด, Next internal, // และ static ใน public/ (pdf.worker, samples, fonts, favicon) export const config = { matcher: [ "/((?!login|api|uploads|_next|samples|fonts|pdf\\.worker\\.min\\.mjs|favicon\\.ico).*)", ], };