SPB Git forge

spb/spb-cloud

Public
10commits 1branches 0releases
3.2 MBsize
maindefault branch
yesterdaylast push
JavaScript 56.7% TypeScript 42.6%
1.5 KB · 44 lines typescript
Raw Blame History
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