Files
quickdrop/server/api/auth/login.post.ts
2026-08-07 22:13:25 -05:00

36 lines
996 B
TypeScript

import { createError, defineEventHandler, setResponseStatus } from "h3";
import {
authConfigured,
issueSession,
requireSameOrigin,
verifyPasscode,
} from "../../utils/auth";
import { readJson } from "../../utils/http";
export default defineEventHandler(async (event) => {
requireSameOrigin(event);
const body = await readJson<{ passcode?: unknown }>(event, 1024);
if (
!body ||
typeof body !== "object" ||
Object.keys(body).some((key) => key !== "passcode")
)
throw createError({
statusCode: 400,
statusMessage: "Malformed login request.",
});
if (!authConfigured())
throw createError({
statusCode: 503,
statusMessage: "Authentication is not configured.",
});
if (!verifyPasscode(body?.passcode)) {
await new Promise((resolve) => setTimeout(resolve, 350));
throw createError({
statusCode: 401,
statusMessage: "Incorrect passcode.",
});
}
issueSession(event);
setResponseStatus(event, 204);
});