import { NextRequest, NextResponse } from "next/server"; import { prisma } from "../../../lib/prisma"; import bcrypt from "bcryptjs"; export async function POST(request: NextRequest) { const body = await request.json(); const { token, password } = body as { token?: string; password?: string }; if (!token || !password) { return NextResponse.json( { error: "Token and password are required." }, { status: 400 } ); } if (password.length < 8) { return NextResponse.json( { error: "Password must be at least 8 characters long." }, { status: 400 } ); } try { const user = await prisma.user.findFirst({ where: { resetToken: token, resetTokenExpiry: { gte: new Date() }, }, }); if (!user) { return NextResponse.json( { error: "Invalid or expired token. Please request a new password reset.", }, { status: 400 } ); } const hash = await bcrypt.hash(password, 10); await prisma.user.update({ where: { id: user.id }, data: { password: hash, resetToken: null, resetTokenExpiry: null, }, }); return NextResponse.json( { message: "Password has been reset successfully." }, { status: 200 } ); } catch (error) { console.error("Reset password error:", error); return NextResponse.json( { error: "An internal server error occurred. Please try again later.", }, { status: 500 } ); } }