53 lines
1.3 KiB
TypeScript
53 lines
1.3 KiB
TypeScript
import { NextResponse } from "next/server"
|
|
import { cookies, headers } from "next/headers"
|
|
import {
|
|
ADMIN_SESSION_COOKIE,
|
|
destroyAdminSession,
|
|
} from "@/lib/server/admin-auth"
|
|
|
|
export async function POST(request: Request) {
|
|
const cookieStore = await cookies()
|
|
const rawToken = cookieStore.get(ADMIN_SESSION_COOKIE)?.value || null
|
|
await destroyAdminSession(rawToken)
|
|
|
|
const response = NextResponse.redirect(
|
|
new URL("/sign-in", await getPublicOrigin(request))
|
|
)
|
|
response.cookies.set(ADMIN_SESSION_COOKIE, "", {
|
|
httpOnly: true,
|
|
sameSite: "lax",
|
|
secure: true,
|
|
path: "/",
|
|
expires: new Date(0),
|
|
})
|
|
|
|
return response
|
|
}
|
|
|
|
async function getPublicOrigin(request: Request) {
|
|
const headerStore = await headers()
|
|
const origin = headerStore.get("origin")
|
|
if (origin) {
|
|
return origin
|
|
}
|
|
|
|
const referer = headerStore.get("referer")
|
|
if (referer) {
|
|
return new URL(referer).origin
|
|
}
|
|
|
|
const siteUrl = process.env.NEXT_PUBLIC_SITE_URL
|
|
if (siteUrl) {
|
|
return siteUrl
|
|
}
|
|
|
|
const forwardedProto = headerStore.get("x-forwarded-proto")
|
|
const forwardedHost = headerStore.get("x-forwarded-host")
|
|
const host = forwardedHost || headerStore.get("host")
|
|
|
|
if (host) {
|
|
return `${forwardedProto || "https"}://${host}`
|
|
}
|
|
|
|
return new URL(request.url).origin
|
|
}
|