81 lines
2.1 KiB
TypeScript
81 lines
2.1 KiB
TypeScript
import { NextResponse } from "next/server";
|
|
import { auth } from "@/lib/auth";
|
|
import { prisma } from "@/lib/prisma";
|
|
import bcrypt from "bcryptjs";
|
|
|
|
export async function PUT(request: Request) {
|
|
try {
|
|
const session = await auth();
|
|
|
|
if (!session?.user) {
|
|
return NextResponse.json({ error: "Non authentifié" }, { status: 401 });
|
|
}
|
|
|
|
const body = await request.json();
|
|
const { currentPassword, newPassword, confirmPassword } = body;
|
|
|
|
// Validation
|
|
if (!currentPassword || !newPassword || !confirmPassword) {
|
|
return NextResponse.json(
|
|
{ error: "Tous les champs sont requis" },
|
|
{ status: 400 }
|
|
);
|
|
}
|
|
|
|
if (newPassword.length < 6) {
|
|
return NextResponse.json(
|
|
{ error: "Le nouveau mot de passe doit contenir au moins 6 caractères" },
|
|
{ status: 400 }
|
|
);
|
|
}
|
|
|
|
if (newPassword !== confirmPassword) {
|
|
return NextResponse.json(
|
|
{ error: "Les mots de passe ne correspondent pas" },
|
|
{ status: 400 }
|
|
);
|
|
}
|
|
|
|
// Récupérer l'utilisateur avec le mot de passe
|
|
const user = await prisma.user.findUnique({
|
|
where: { id: session.user.id },
|
|
select: { password: true },
|
|
});
|
|
|
|
if (!user) {
|
|
return NextResponse.json(
|
|
{ error: "Utilisateur non trouvé" },
|
|
{ status: 404 }
|
|
);
|
|
}
|
|
|
|
// Vérifier l'ancien mot de passe
|
|
const isPasswordValid = await bcrypt.compare(currentPassword, user.password);
|
|
|
|
if (!isPasswordValid) {
|
|
return NextResponse.json(
|
|
{ error: "Mot de passe actuel incorrect" },
|
|
{ status: 400 }
|
|
);
|
|
}
|
|
|
|
// Hasher le nouveau mot de passe
|
|
const hashedPassword = await bcrypt.hash(newPassword, 10);
|
|
|
|
// Mettre à jour le mot de passe
|
|
await prisma.user.update({
|
|
where: { id: session.user.id },
|
|
data: { password: hashedPassword },
|
|
});
|
|
|
|
return NextResponse.json({ message: "Mot de passe modifié avec succès" });
|
|
} catch (error) {
|
|
console.error("Error updating password:", error);
|
|
return NextResponse.json(
|
|
{ error: "Erreur lors de la modification du mot de passe" },
|
|
{ status: 500 }
|
|
);
|
|
}
|
|
}
|
|
|