63 lines
1.3 KiB
TypeScript
63 lines
1.3 KiB
TypeScript
import {
|
|
ADMIN_TOKEN_COOKIE_MAX_AGE_SECONDS,
|
|
ADMIN_TOKEN_STORAGE_KEY,
|
|
} from "@/lib/admin-token-constants";
|
|
|
|
const COOKIE_BASE_OPTIONS = {
|
|
httpOnly: true,
|
|
sameSite: "lax",
|
|
path: "/",
|
|
maxAge: ADMIN_TOKEN_COOKIE_MAX_AGE_SECONDS,
|
|
} as const;
|
|
|
|
export function readAdminTokenFromCookieString(
|
|
cookieHeader: string | null | undefined,
|
|
): string | null {
|
|
if (!cookieHeader) {
|
|
return null;
|
|
}
|
|
|
|
const prefix = `${ADMIN_TOKEN_STORAGE_KEY}=`;
|
|
for (const part of cookieHeader.split(";")) {
|
|
const trimmed = part.trim();
|
|
if (!trimmed.startsWith(prefix)) {
|
|
continue;
|
|
}
|
|
const raw = trimmed.slice(prefix.length);
|
|
if (!raw) {
|
|
return null;
|
|
}
|
|
try {
|
|
const decoded = decodeURIComponent(raw).trim();
|
|
return decoded !== "" ? decoded : null;
|
|
} catch {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
export function readAdminTokenFromDocumentCookie(): string | null {
|
|
return null;
|
|
}
|
|
|
|
export function writeAdminTokenCookie(token: string | null): void {
|
|
void token;
|
|
}
|
|
|
|
export function adminTokenCookieOptions(secure: boolean) {
|
|
return {
|
|
...COOKIE_BASE_OPTIONS,
|
|
secure,
|
|
};
|
|
}
|
|
|
|
export function expiredAdminTokenCookieOptions(secure: boolean) {
|
|
return {
|
|
...COOKIE_BASE_OPTIONS,
|
|
secure,
|
|
maxAge: 0,
|
|
};
|
|
}
|