import { NextRequest, NextResponse } from 'next/server' import { prisma } from '@/lib/db' import { randomBytes } from 'crypto' import { sendEmail, getSmtpConfig } from '@/lib/email' export async function POST(req: NextRequest) { try { const { email } = await req.json() if (!email) { return NextResponse.json({ error: 'E-Mail erforderlich' }, { status: 400 }) } const user = await (prisma as any).user.findUnique({ where: { email } }) // Always return success to prevent email enumeration if (!user) { return NextResponse.json({ success: true, message: 'Falls ein Konto mit dieser E-Mail existiert, wurde ein Link gesendet.' }) } // Generate reset token (32 bytes hex = 64 chars) const resetToken = randomBytes(32).toString('hex') const resetTokenExpiry = new Date(Date.now() + 60 * 60 * 1000) // 1 hour await (prisma as any).user.update({ where: { id: user.id }, data: { resetToken, resetTokenExpiry }, }) // Try to send email const smtpConfig = await getSmtpConfig() const host = req.headers.get('host') || 'localhost:3000' const protocol = host.includes('localhost') ? 'http' : 'https' const resetUrl = `${protocol}://${host}/reset-password?token=${resetToken}` if (smtpConfig) { try { await sendEmail( user.email, 'Passwort zurücksetzen – Lageplan', `

Passwort zurücksetzen

Hallo ${user.name},

Sie haben eine Passwort-Zurücksetzung angefordert. Klicken Sie auf den folgenden Link:

Passwort zurücksetzen

Dieser Link ist 1 Stunde gültig.

Falls Sie diese Anfrage nicht gestellt haben, ignorieren Sie diese E-Mail.


Lageplan – Feuerwehr Krokier-App

` ) return NextResponse.json({ success: true, message: 'Falls ein Konto mit dieser E-Mail existiert, wurde ein Link gesendet.' }) } catch (emailErr) { console.error('Failed to send reset email:', emailErr) // Fall through to show token directly } } // No SMTP configured or email failed → log token server-side only, never expose to client console.log(`[Password Reset] No SMTP configured. Reset URL: ${resetUrl}`) return NextResponse.json({ success: true, message: 'Falls ein Konto mit dieser E-Mail existiert, wurde ein Link gesendet. (SMTP nicht konfiguriert — siehe Server-Logs)', }) } catch (error) { console.error('Forgot password error:', error) return NextResponse.json({ error: 'Serverfehler' }, { status: 500 }) } }