Personal no-bs blogging platform.
Something went wrong. Try again.
1.3 kB · 38 lines
TypeScript
at master
1234567891011121314151617181920212223242526272829303132333435363738import { get_user, validate_session, } from '@/db/db';import { deleteCookie, getCookie } from 'hono/cookie';import { createMiddleware } from 'hono/factory';
import { InvalidSessionError, UserNotFoundError } from '@/lib/errors';import { SESSION_TOKEN_DURATION_MS } from '@/lib/constants';
export const session_auth = createMiddleware(async (c, next) => { const session_cookie = getCookie(c, 'session');
if (!session_cookie) { return c.redirect("/login?error=UnauthorizedError"); }
let session; try { session = await validate_session(session_cookie); } catch (e) { deleteCookie(c, 'session'); return c.redirect(`/login?error=${(e as Error).name}`); }
if (!session || new Date(session.issued_at).getTime() + SESSION_TOKEN_DURATION_MS < Date.now()) { deleteCookie(c, 'session'); return c.redirect(`/login?error=${new InvalidSessionError().name}`); };
const user = await get_user(session.user_id!);
if (!user) { deleteCookie(c, 'session'); return c.redirect(`/login?error=${new UserNotFoundError().name}`); }
delete (user as any).password; // remove password field c.set('user', user); // accessable from c.get('user'); await next();});