| 1 | import { NextResponse } from "next/server"; |
| 2 | import { getAgentEnv, deleteSession } from "@/lib/community-agent"; |
| 3 | |
| 4 | export const dynamic = "force-dynamic"; |
| 5 | |
| 6 | const ALLOWED_LOCALES = new Set(["en", "zh"]); |
| 7 | |
| 8 | function pickLocale(value: string | null | undefined): string { |
| 9 | if (!value) return "en"; |
| 10 | return ALLOWED_LOCALES.has(value) ? value : "en"; |
| 11 | } |
| 12 | |
| 13 | export async function POST(req: Request) { |
| 14 | const env = await getAgentEnv(); |
| 15 | const url = new URL(req.url); |
| 16 | const locale = pickLocale(url.searchParams.get("locale")); |
| 17 | |
| 18 | const cookieHeader = req.headers.get("cookie") ?? ""; |
| 19 | let sid: string | undefined; |
| 20 | for (const c of cookieHeader.split(";")) { |
| 21 | const [name, ...rest] = c.trim().split("="); |
| 22 | if (name === "mt_sid") { |
| 23 | sid = rest.join("="); |
| 24 | break; |
| 25 | } |
| 26 | } |
| 27 | |
| 28 | await deleteSession(env.CURATED_KV, sid); |
| 29 | |
| 30 | const res = NextResponse.redirect(new URL(`/${locale}/admin`, req.url), { |
| 31 | status: 303, |
| 32 | headers: { "Cache-Control": "no-store" }, |
| 33 | }); |
| 34 | res.cookies.set("mt_sid", "", { |
| 35 | path: "/", |
| 36 | httpOnly: true, |
| 37 | secure: true, |
| 38 | sameSite: "strict", |
| 39 | maxAge: 0, |
| 40 | }); |
| 41 | return res; |
| 42 | } |
| 43 |