mirror of
https://github.com/BradNut/boredgame
synced 2025-09-08 17:40:22 +00:00
63 lines
1.8 KiB
TypeScript
63 lines
1.8 KiB
TypeScript
import { config } from '$lib/server/api/common/config';
|
|
import env from '$lib/server/api/common/env';
|
|
import type { Context } from 'hono';
|
|
import { setCookie } from 'hono/cookie';
|
|
import type { CookieOptions } from 'hono/utils/cookie';
|
|
import { TimeSpan } from 'oslo';
|
|
|
|
export const cookieMaxAge = 60 * 60 * 24 * 30;
|
|
export const cookieExpiresMilliseconds = new TimeSpan(2, 'w').milliseconds();
|
|
export const cookieExpiresAt = new Date(Date.now() + cookieExpiresMilliseconds);
|
|
export const halfCookieExpiresMilliseconds = cookieExpiresMilliseconds / 2;
|
|
export const halfCookieExpiresAt = new Date(Date.now() + halfCookieExpiresMilliseconds);
|
|
export const cookieName = 'session';
|
|
|
|
export type SessionCookie = {
|
|
name: string;
|
|
value: string;
|
|
attributes: CookieOptions;
|
|
};
|
|
|
|
export function createSessionTokenCookie(token: string, expiresAt: Date): SessionCookie {
|
|
return {
|
|
name: cookieName,
|
|
value: token,
|
|
attributes: {
|
|
path: '/',
|
|
maxAge: cookieMaxAge,
|
|
domain: env.DOMAIN,
|
|
sameSite: 'lax',
|
|
secure: config.isProduction,
|
|
httpOnly: true,
|
|
expires: expiresAt,
|
|
},
|
|
};
|
|
}
|
|
|
|
export function createBlankSessionTokenCookie(): SessionCookie {
|
|
return {
|
|
name: cookieName,
|
|
value: '',
|
|
attributes: {
|
|
path: '/',
|
|
maxAge: 0,
|
|
domain: env.DOMAIN,
|
|
sameSite: 'lax',
|
|
secure: config.isProduction,
|
|
httpOnly: true,
|
|
expires: new Date(0),
|
|
},
|
|
};
|
|
}
|
|
|
|
export function setSessionCookie(c: Context, sessionCookie: SessionCookie) {
|
|
setCookie(c, sessionCookie.name, sessionCookie.value, {
|
|
path: sessionCookie.attributes.path,
|
|
maxAge: sessionCookie.attributes?.maxAge,
|
|
domain: sessionCookie.attributes.domain,
|
|
sameSite: sessionCookie.attributes.sameSite as undefined,
|
|
secure: sessionCookie.attributes.secure,
|
|
httpOnly: sessionCookie.attributes.httpOnly,
|
|
expires: sessionCookie.attributes.expires,
|
|
});
|
|
}
|