<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Doctrine\ORM\EntityManagerInterface;
class ChangePasswordController extends AbstractController
{
#[Route('/change-password', name: 'change_password')]
public function index(
Request $request,
UserPasswordHasherInterface $passwordHasher,
EntityManagerInterface $em
): Response
{
if ($this->getUser() instanceof User) {
$user = $this->getUser();
$passwordChangedAt = $user->getPasswordChangedAt();
if (!$passwordChangedAt || (new \DateTime() >= (clone $passwordChangedAt)->modify('+90 days'))) {
$this->addFlash('warning', 'Votre mot de passe a expiré.');
}
}
$user = $this->getUser();
if (!$user) {
return $this->redirectToRoute('login');
}
if ($request->isMethod('POST')) {
$oldPassword = $request->request->get('old_password');
$newPassword = $request->request->get('new_password');
if (!$passwordHasher->isPasswordValid($user, $oldPassword)) {
$this->addFlash('error', 'Ancien mot de passe incorrect');
} else {
$user->setPassword(
$passwordHasher->hashPassword($user, $newPassword)
);
$user->setPasswordChangedAt(new \DateTime());
// 🔥 nettoyage FOS
//$user->setSalt(null);
if (method_exists($user, 'setLegacyPassword')) {
$user->setLegacyPassword(null);
}
$em->flush();
$this->addFlash('success', 'Mot de passe modifié avec succès');
return $this->redirectToRoute('login');
}
}
return $this->render('security/change_password.html.twig');
}
}