JavaScript 56.7%
TypeScript 42.6%
1import { NextRequest, NextResponse } from "next/server";2import { getIronSession } from "iron-session";3import { SessionData, sessionOptions } from "@/lib/session";4import { prisma } from "@/lib/prisma";5import bcrypt from "bcryptjs";67export async function POST(request: NextRequest) {8 const response = NextResponse.next();9 const session = await getIronSession<SessionData>(request, response, sessionOptions);10 if (!session.isLoggedIn || !session.userId) {11 return NextResponse.json({ error: "Unauthorized" }, { status: 401 });12 }1314 const { currentPassword, newPassword } = await request.json();15 if (!currentPassword || !newPassword) {16 return NextResponse.json({ error: "Champs requis" }, { status: 400 });17 }18 if (newPassword.length < 6) {19 return NextResponse.json({ error: "Le nouveau mot de passe doit faire au moins 6 caractères" }, { status: 400 });20 }2122 const user = await prisma.user.findUnique({23 where: { id: session.userId },24 select: { id: true, passwordHash: true },25 });2627 if (!user) {28 return NextResponse.json({ error: "Utilisateur introuvable" }, { status: 404 });29 }3031 const valid = await bcrypt.compare(currentPassword, user.passwordHash);32 if (!valid) {33 return NextResponse.json({ error: "Mot de passe actuel incorrect" }, { status: 400 });34 }3536 const newHash = await bcrypt.hash(newPassword, 12);37 await prisma.user.update({38 where: { id: session.userId },39 data: { passwordHash: newHash },40 });4142 return NextResponse.json({ success: true });43}44