40 lines
962 B
TypeScript
40 lines
962 B
TypeScript
import { FreshContext } from "$fresh/server.ts";
|
|
import { deleteCookie, getCookies, setCookie } from "$std/http/cookie.ts";
|
|
import { auth, Token } from "../auth/auth.ts";
|
|
|
|
type State = {
|
|
user_id: string | null;
|
|
};
|
|
|
|
export async function handler(
|
|
req: Request,
|
|
ctx: FreshContext<State>,
|
|
) {
|
|
const cookies = getCookies(req.headers);
|
|
const token = get_session_token(cookies);
|
|
|
|
ctx.state.user_id = token?.user_id ?? null;
|
|
|
|
const resp = await ctx.next();
|
|
set_session_token(resp.headers, token);
|
|
return resp;
|
|
}
|
|
|
|
function get_session_token(cookies: Record<string, string>) {
|
|
const stored = cookies["auth_token"];
|
|
if (stored === undefined) return null;
|
|
const token = auth.tokens.get(stored);
|
|
if (token === null) return null;
|
|
return token;
|
|
}
|
|
|
|
function set_session_token(headers: Headers, token: Token | null) {
|
|
if (token === null) {
|
|
deleteCookie(headers, "auth_token");
|
|
return;
|
|
}
|
|
setCookie(headers, {
|
|
name: "auth_token",
|
|
value: token.raw,
|
|
});
|
|
}
|