src/Controller/Common/ResettingController.php line 23

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Common;
  3. use App\Domain\Common\Form\User\PasswordRequestType;
  4. use App\Domain\Common\Form\User\RecoveryNewPasswordType;
  5. use App\Infrastructure\Entity\Liquidacions\User;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Swift_Mailer;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  13. use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
  14. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  15. class ResettingController extends AbstractController
  16. {
  17.     /**
  18.      * @Route("/reset_password", name="reset_password", methods={"GET", "POST"})
  19.      */
  20.     public function resetPassword(
  21.         Request $request,
  22.         EntityManagerInterface $entityManager,
  23.         Swift_Mailer $mailer
  24.     ) {
  25.         $form $this->createForm(PasswordRequestType::class);
  26.         $form->handleRequest($request);
  27.         if ($form->isSubmitted() && $form->isValid()) {
  28.             $email $form->get('email')->getData();
  29.             $token bin2hex(random_bytes(32));
  30.             $user $entityManager->getRepository(User::class)->findOneBy(['email' => $email]);
  31.             if ($user instanceof User) {
  32.                 $user->setPasswordRequestToken($token);
  33.                 $entityManager->flush();
  34.                 $message = (new \Swift_Message('Recovery Password'))
  35.                     ->setFrom(!empty($this->getParameter('mailer.from')) ? $this->getParameter('mailer.from') : 'didacmartin@gmail.com')
  36.                     ->setTo($email)
  37.                     ->setBody(
  38.                         $this->renderView(
  39.                             'email/recovery_password.html.twig',
  40.                             ['token' => $token,
  41.                              'email_contact_technical_info' => !empty($this->getParameter('mailer.technical_support')) ? $this->getParameter('mailer.technical_support') : '', ]
  42.                         ),'text/html'
  43.                     )
  44.                 ;
  45.                 $mailer->send($message);
  46.                 // send your email with SwiftMailer or anything else here
  47.                 $this->addFlash('success'"S'ha enviat un correu a la vostre adreça de correu");
  48.                 return $this->redirectToRoute('reset_password');
  49.             } else {
  50.                 $this->addFlash('warning''Usuari no existent');
  51.                 return $this->redirectToRoute('reset_password');
  52.             }
  53.         }
  54.         return $this->render('security/reset-password.html.twig', ['form' => $form->createView()]);
  55.     }
  56.     /**
  57.      * @Route("/reset_password/confirm/{token}", name="reset_password_confirm", methods={"GET", "POST"})
  58.      */
  59.     public function resetPasswordCheck(
  60.         Request $request,
  61.         string $token,
  62.         EntityManagerInterface $entityManager,
  63.         UserPasswordEncoderInterface $encoder,
  64.         TokenStorageInterface $tokenStorage,
  65.         SessionInterface $session
  66.     ) {
  67.         $user $entityManager->getRepository(User::class)->findOneBy(['passwordRequestToken' => $token]);
  68.         if (!$token || !$user instanceof User) {
  69.             $this->addFlash('danger''Usuari no trobat');
  70.             return $this->redirectToRoute('reset_password');
  71.         }
  72.         $form $this->createForm(RecoveryNewPasswordType::class);
  73.         $form->handleRequest($request);
  74.         if ($form->isSubmitted() && $form->isValid()) {
  75.             $form_data $form->getData();
  76.             $plainPassword $form_data['new_password'];
  77.             $password $encoder->encodePassword($user$plainPassword);
  78.             $user->setPassword($password);
  79.             $user->setPasswordRequestToken(null);
  80.             $entityManager->flush();
  81.             $token = new UsernamePasswordToken($user$password'main');
  82.             $tokenStorage->setToken($token);
  83.             $session->set('_security_main'serialize($token));
  84.             $this->addFlash('success''El nou mot de pas ha estat actualitzat');
  85.             return $this->redirectToRoute('app_login');
  86.         }
  87.         return $this->render('security/reset-password-confirm.html.twig', ['form' => $form->createView()]);
  88.     }
  89. }