import { NextRequest, NextResponse } from "next/server"; import { z } from "zod"; import { createSessionToken, SESSION_COOKIE_NAME } from "@/lib/auth"; import { getAppCredential, setAppPassword } from "@/lib/credentials"; const setupSchema = z.object({ password: z.string().min(4, "Das Passwort muss mindestens 4 Zeichen lang sein."), }); // Legt das Login-Passwort einmalig fest. Nur solange noch keine AppCredential-Zeile // existiert (d. h. beim allerersten Login) erreichbar -- danach ausschliesslich // ueber /api/auth/login. export async function POST(request: NextRequest) { const existing = await getAppCredential(); if (existing) { return NextResponse.json({ error: "Es ist bereits ein Passwort gesetzt." }, { status: 409 }); } const body = await request.json(); const parsed = setupSchema.safeParse(body); if (!parsed.success) { return NextResponse.json({ error: parsed.error.flatten() }, { status: 400 }); } await setAppPassword(parsed.data.password); const token = await createSessionToken(); const response = NextResponse.json({ ok: true }); response.cookies.set(SESSION_COOKIE_NAME, token, { httpOnly: true, secure: process.env.NODE_ENV === "production", sameSite: "lax", path: "/", maxAge: 60 * 60 * 24 * 30, }); return response; }