src/Controller/SecurityController.php line 34
<?phpnamespace App\Controller;use App\Entity\User;use Doctrine\Persistence\ManagerRegistry;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\Mailer\MailerInterface;use Symfony\Component\Mime\Email;use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;use App\Entity\Forgotten;use App\Utils\StringUtils;use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;class SecurityController extends AbstractController{const MSG_ERROR = 'Il y a eu une erreur, merci de bien vouloir réessayer ultérieurement.';const MSG_SUCCESS = 'Si un utilisateur existe avec ce courriel, un nouveau mot de passe vient de lui être envoyé.';/*** @var ManagerRegistry*/private $doctrine;public function __construct(ManagerRegistry $doctrine){$this->doctrine = $doctrine;}public function loginAction(AuthenticationUtils $authUtils){// exit();if ($this->getUser() !== null) {return $this->redirectToRoute('admin_homepage');}$error = $authUtils->getLastAuthenticationError();$lastUsername = $authUtils->getLastUsername();return $this->render('security/login.html.twig', ['last_username' => $lastUsername,'error' => $error]);}public function logoutAction(){// Ne devrait jamais se produire car Symfony capture la route en amont// et ne doit à priori pas déclencher cette action.throw new \Exception('Cela ne devrait jamais se produire');}public function forgottenAction(Request $request,MailerInterface $mailer,UserPasswordHasherInterface $passwordEncoder){if ($this->getUser() !== null) {return $this->redirectToRoute('admin_homepage');}$forgotten = new Forgotten();$form = $this->createForm('App\Form\Type\ForgottenType', $forgotten);$form->handleRequest($request);if ($form->isSubmitted() && $form->isValid()) {$email = $form->getData()->getEmail();$error = false;$user = $this->doctrine->getManager()->getRepository(User::class)->loadUserByEmail($email);if ($user !== null) {$newPassword = StringUtils::random(8);$message = (new Email())->from($this->getParameter('email_sender'))->to($user->getEmail())->subject('Votre nouveau mot de passe')->html($this->renderView('emails/forgotten.html.twig', ['new_password' => $newPassword,'url' => $request->getScheme() . '://' . $request->getHost()]),'text/html');// On enregistre le mot de passe uniquement si l'email a bien été envoyé.try {$mailer->send($message);$user->setPassword($passwordEncoder->hashPassword($user, $newPassword));$this->doctrine->getManager()->flush();}catch (\Exception $exception) {$error = true;$request->getSession()->getFlashBag()->add('error', self::MSG_ERROR . ' : ' . $exception->getMessage());}}// Si le formulaire est correctement utilisé, on évite de trop donner d'informations,// on se contente d'indiquer qu'un email a potentiellement été envoyé à son destinataire.if (!$error) {$request->getSession()->getFlashBag()->add('success', self::MSG_SUCCESS);}return $this->redirectToRoute('security_forgotten');}return $this->render('security/forgotten.html.twig', ['form' => $form->createView()]);}}