// POST /_auth/login {password} — verify the shared password (constant-time), then seal an // authenticated session cookie. Public (allowlisted in the gate) so an unauthenticated user // can actually log in. import { defineEventHandler, readBody, createError, useSession } from "h3"; import { sessionConfig, timingSafeEqual, uiPassword, type SessionData, } from "../../util/auth"; export default defineEventHandler(async (event) => { const expected = uiPassword(); if (!expected) { throw createError({ statusCode: 503, statusMessage: "auth not configured", }); } const body = await readBody<{ password?: string }>(event); const password = String(body?.password ?? ""); if (!timingSafeEqual(password, expected)) { throw createError({ statusCode: 401, statusMessage: "invalid password" }); } const session = await useSession(event, sessionConfig()); await session.update({ authenticated: true }); return { ok: true }; });