// app/api/users/[nwkennung]/password/route.ts import { NextRequest, NextResponse } from 'next/server'; import { prisma } from '@/lib/prisma'; import { hash } from 'bcryptjs'; function isStrongPassword(password: string): boolean { const lengthOk = password.length >= 12; const lowerOk = /[a-z]/.test(password); const upperOk = /[A-Z]/.test(password); const digitOk = /\d/.test(password); const specialOk = /[^A-Za-z0-9]/.test(password); return lengthOk && lowerOk && upperOk && digitOk && specialOk; } export async function PATCH(req: NextRequest) { try { const body = (await req.json()) as { password?: string }; if (!body.password || typeof body.password !== 'string') { return NextResponse.json( { error: 'Passwort ist erforderlich.' }, { status: 400 }, ); } if (!isStrongPassword(body.password)) { return NextResponse.json( { error: 'Das Passwort muss mindestens 12 Zeichen lang sein und Großbuchstaben, Kleinbuchstaben, Ziffern und Sonderzeichen enthalten.', }, { status: 400 }, ); } // 🔹 nwkennung direkt aus der URL ziehen: /api/users//password const pathname = req.nextUrl.pathname; // z.B. "/api/users/nw083118/password" const segments = pathname.split('/').filter(Boolean); // ["api","users","nw083118","password"] const rawParam = segments[2]; // Index 2 = console.log( '[PATCH /api/users/[nwkennung]/password] pathname =', pathname, 'segments =', segments, 'rawParam =', rawParam, ); if (!rawParam) { return NextResponse.json( { error: 'Pfad-Parameter "nwkennung" fehlt.' }, { status: 400 }, ); } const normalizedNwkennung = rawParam.trim().toLowerCase(); const passwordHash = await hash(body.password, 10); const user = await prisma.user.update({ where: { nwkennung: normalizedNwkennung }, data: { passwordHash, }, select: { nwkennung: true, }, }); return NextResponse.json( { success: true, user }, { status: 200 }, ); } catch (err: any) { console.error('[PATCH /api/users/[nwkennung]/password]', err); if (err?.code === 'P2025') { return NextResponse.json( { error: 'Benutzer wurde nicht gefunden.' }, { status: 404 }, ); } return NextResponse.json( { error: 'Interner Serverfehler beim Aktualisieren des Passworts.', }, { status: 500 }, ); } }