28 lines
916 B
TypeScript
28 lines
916 B
TypeScript
const COOKIE_NAME = "pb_session";
|
|
export const COOKIE_MAX_AGE = 60 * 60 * 24 * 365;
|
|
|
|
export { COOKIE_NAME };
|
|
|
|
export function getHostFromRequest(request: { headers: { get: (k: string) => string | null } }): string {
|
|
const host = request.headers.get("host") || request.headers.get("x-forwarded-host") || "";
|
|
return host.split(",")[0].trim().replace(/:\d+$/, "");
|
|
}
|
|
|
|
export function getCookieOptions(clear = false, requestHost?: string) {
|
|
const isProd = process.env.NODE_ENV === "production";
|
|
const domain = process.env.AUTH_COOKIE_DOMAIN?.trim();
|
|
const opts: Record<string, unknown> = {
|
|
path: "/",
|
|
maxAge: clear ? 0 : COOKIE_MAX_AGE,
|
|
secure: isProd,
|
|
sameSite: "lax" as const,
|
|
httpOnly: true,
|
|
};
|
|
if (domain && isProd) {
|
|
opts.domain = domain;
|
|
} else if (!isProd && requestHost && /^(\d{1,3}\.){3}\d{1,3}$/.test(requestHost)) {
|
|
opts.domain = requestHost;
|
|
}
|
|
return opts;
|
|
}
|