import { Hono, type Context } from "hono"; import { getCookie, setCookie, deleteCookie } from "hono/cookie"; import { DOMAIN, SESSION_TOKEN_DURATION } from "./constants"; import * as db from "@/db/db.ts"; import type { Session } from "./types"; /** * Creates a session and stores it in a cookie. * @param c Pass this from the route. * @param user_id User's ID to create a session and cookie for. * @returns {Session} The session */ export async function new_session_cookie(c: Context, user_id: number): Promise { const session = await db.create_session(user_id); setCookie(c, "session", session.token, { httpOnly: true, secure: true, sameSite: "Lax", maxAge: SESSION_TOKEN_DURATION, path: "/", domain: "." + DOMAIN, }); return session; }; /** * Deletes a session and its cookie. * @param c Context. */ export async function remove_session_cookie(c: Context) { const cookie = getCookie(c, "session"); deleteCookie(c, "session", { path: "/", domain: "." + DOMAIN, }); if (cookie) db.delete_session(cookie); }