import { NextResponse } from "next/server"; import { query, queryOne } from "@/lib/db"; import { verifyPassword } from "@/lib/auth/password"; import { requireSession, UnauthorizedError } from "@/lib/auth/session"; import { isSameOrigin } from "@/lib/origin"; // Ändert die E-Mail-Adresse direkt nach Passwort-Bestätigung – ohne // Bestätigungsmail, da kein SMTP-Server betrieben wird. export async function PATCH(request: Request) { if (!isSameOrigin(request)) { return NextResponse.json({ error: "Nicht erlaubt." }, { status: 403 }); } try { const session = await requireSession(); const { email, password } = (await request.json().catch(() => ({}))) as { email?: string; password?: string; }; if (!email || !password) { return NextResponse.json({ error: "invalid_input" }, { status: 400 }); } const user = await queryOne<{ password_hash: string }>( "select password_hash from users where id = $1", [session.user.id] ); if (!user || !verifyPassword(password, user.password_hash)) { return NextResponse.json({ error: "wrong_password" }, { status: 401 }); } try { await query("update users set email = $1 where id = $2", [ email.trim().toLowerCase(), session.user.id, ]); } catch (err) { if (err instanceof Error && /unique/i.test(err.message)) { return NextResponse.json({ error: "email_used" }, { status: 409 }); } throw err; } return NextResponse.json({ ok: true }); } catch (err) { if (err instanceof UnauthorizedError) { return NextResponse.json({ error: "unauthorized" }, { status: 401 }); } throw err; } }