SPB Git

Repository Public

route.ts 1.6 KB 45 lines typescript

1// Auteur : Simon-Pierre Boucher — contact@spboucher.ai2// /api/admin/password — changement de SON propre mot de passe (tout admin).3// Exige le mot de passe actuel ; invalide toutes les autres sessions puis4// réémet un cookie frais pour celle-ci.5import { NextRequest, NextResponse } from "next/server";6import { cookies } from "next/headers";7import {8  findAdminById,9  setAdminPassword,10  verifyAdminPassword,11} from "@/lib/comms/db";12import {13  getAdminSession,14  mintAdminToken,15  adminCookieOptions,16  ADMIN_COOKIE,17} from "@/lib/comms/admin-auth";1819export async function POST(req: NextRequest) {20  const session = await getAdminSession();21  if (!session)22    return NextResponse.json({ error: "Non autorisé." }, { status: 401 });23  const body = (await req.json().catch(() => null)) as {24    current?: string;25    next?: string;26  } | null;27  const current = body?.current ?? "";28  const next = body?.next ?? "";29  const row = findAdminById(session.id);30  if (!row || !verifyAdminPassword(current, row.password_hash))31    return NextResponse.json({ error: "Mot de passe actuel invalide." }, { status: 403 });32  if (next.length < 8)33    return NextResponse.json(34      { error: "Nouveau mot de passe trop court (8 caractères minimum)." },35      { status: 422 },36    );37  setAdminPassword(session.id, next);38  // Réémettre un jeton valide pour la session courante.39  const fresh = findAdminById(session.id)!;40  const token = await mintAdminToken(fresh);41  const jar = await cookies();42  jar.set(ADMIN_COOKIE, token, adminCookieOptions);43  return NextResponse.json({ ok: true });44}45
Files main
Menu

Theme