import { Context, Next } from 'hono'; import { getCookie } from 'hono/cookie'; export interface AuthSession { id: string; name: string; email: string | null; isAdmin: boolean; } export async function requireAuth(c: Context, next: Next) { const sessionCookie = getCookie(c, 'session'); if (!sessionCookie) { return c.json({ error: 'Authentication required' }, 401); } try { const session: AuthSession = sessionCookie ? JSON.parse(sessionCookie) : null; if (!session) { return c.json({ error: 'Authentication required' }, 401); } c.set('session', session); await next(); } catch (error) { console.error('[Middleware] Failed to parse session cookie:', error); return c.json({ error: 'Invalid session' }, 401); } } export async function requireAdmin(c: Context, next: Next) { const sessionCookie = getCookie(c, 'session'); if (!sessionCookie) { return c.json({ error: 'Authentication required' }, 401); } try { const session: AuthSession = sessionCookie ? JSON.parse(sessionCookie) : null; if (!session || !session.isAdmin) { return c.json({ error: 'Admin access required' }, 403); } c.set('session', session); await next(); } catch (error) { console.error('[Middleware] Failed to parse session cookie in requireAdmin:', error); return c.json({ error: 'Invalid session' }, 401); } }