src/Controller/ResettingController.php line 53

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use FOS\UserBundle\Controller\ResettingController as BaseResettingController;
  4. use FOS\UserBundle\Event\FilterUserResponseEvent;
  5. use FOS\UserBundle\Event\FormEvent;
  6. use FOS\UserBundle\Event\GetResponseUserEvent;
  7. use FOS\UserBundle\Form\Factory\FactoryInterface;
  8. use FOS\UserBundle\FOSUserEvents;
  9. use FOS\UserBundle\Mailer\MailerInterface;
  10. use FOS\UserBundle\Model\UserManagerInterface;
  11. use FOS\UserBundle\Util\TokenGeneratorInterface;
  12. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  13. use Symfony\Component\HttpFoundation\RedirectResponse;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  17. class ResettingController extends BaseResettingController
  18. {
  19.     private $retryTtl;
  20.     private $formFactory;
  21.     private $userManager;
  22.     private $eventDispatcher;
  23.     public function __construct(EventDispatcherInterface $eventDispatcherFactoryInterface $formFactoryUserManagerInterface $userManagerTokenGeneratorInterface $tokenGeneratorMailerInterface $mailerint $retryTtl 120)
  24.     {
  25.         parent::__construct($eventDispatcher$formFactory$userManager$tokenGenerator$mailer$retryTtl);
  26.         $this->retryTtl $retryTtl;
  27.         $this->formFactory $formFactory;
  28.         $this->userManager $userManager;
  29.         $this->eventDispatcher $eventDispatcher;
  30.     }
  31.     /**
  32.      * Request reset user password: show form.
  33.      * @return \Symfony\Component\HttpFoundation\ResponseBaseResettingController
  34.      */
  35.     public function requestBack()
  36.     {
  37.         return $this->render('/admin/security/reset_password.html.twig');
  38.     }
  39.     /**
  40.      * Request reset user password: show form.
  41.      * @return Response
  42.      */
  43.     public function requestFront()
  44.     {
  45.         return $this->render('/front/security/reset_password.html.twig');
  46.     }
  47.     public function sendEmail(Request $request): Response
  48.     {
  49.         $username $request->request->get('username');
  50.         parent::sendEmailAction($request);
  51.         if ('admin_security_send_email' === $request->attributes->get('_route')) {
  52.             return new RedirectResponse($this->generateUrl('admin_security_check_email', ['username' => $username]));
  53.         } else {
  54.             return new RedirectResponse($this->generateUrl('fos_user_resetting_check_email', ['username' => $username]));
  55.         }
  56.     }
  57.     public function checkEmail(Request $request): Response
  58.     {
  59.         $username $request->get('username');
  60.         if (empty($username)) {
  61.             if ('admin_security_check_email' === $request->attributes->get('_route')) {
  62.                 return new RedirectResponse($this->generateUrl('admin_security_reset_password'));
  63.             } else {
  64.                 return new RedirectResponse($this->generateUrl('front_security_reset_password'));
  65.             }
  66.         }
  67.         if ('admin_security_check_email' === $request->attributes->get('_route')) {
  68.             return $this->render('/admin/security/check_email.html.twig', [
  69.                 'tokenLifetime' => ceil($this->retryTtl 3600),
  70.             ]);
  71.         } else {
  72.             return $this->render('/front/security/check_email.html.twig', [
  73.                 'tokenLifetime' => ceil($this->retryTtl 3600),
  74.             ]);
  75.         }
  76.     }
  77.     public function reset(Request $request$token): Response
  78.     {
  79.         $user $this->userManager->findUserByConfirmationToken($token);
  80.         if (null === $user) {
  81.             throw new NotFoundHttpException(sprintf('The user with "confirmation token" does not exist for value "%s"'$token));
  82.         }
  83.         $event = new GetResponseUserEvent($user$request);
  84.         $this->eventDispatcher->dispatch($eventFOSUserEvents::RESETTING_RESET_INITIALIZE);
  85.         $form $this->formFactory->createForm();
  86.         $form->setData($user);
  87.         $form->handleRequest($request);
  88.         if ($form->isSubmitted() && $form->isValid()) {
  89.             $event = new FormEvent($form$request);
  90.             $this->eventDispatcher->dispatch($eventFOSUserEvents::RESETTING_RESET_SUCCESS);
  91.             $this->userManager->updateUser($user);
  92.             if (null === $response $event->getResponse()) {
  93.                 if ('admin_security_reset' === $request->attributes->get('_route')) {
  94.                     $url $this->generateUrl('admin_security_login');
  95.                 } else {
  96.                     $url $this->generateUrl('fos_user_security_login');
  97.                 }
  98.                 $response = new RedirectResponse($url);
  99.             }
  100.             $this->eventDispatcher->dispatch(
  101.                 new FilterUserResponseEvent($user$request$response),
  102.                 FOSUserEvents::RESETTING_RESET_COMPLETED
  103.             );
  104.             return $response;
  105.         }
  106.         $new $request->get('new') && boolval(intval($request->get('new')));
  107.         if ('admin_security_reset' === $request->attributes->get('_route')) {
  108.             return $this->render('/admin/security/reset.html.twig', [
  109.                 'token' => $token,
  110.                 'form' => $form->createView(),
  111.             ]);
  112.         } else {
  113.             return $this->render('/front/security/reset.html.twig', [
  114.                 'token' => $token,
  115.                 'form' => $form->createView(),
  116.                 'new' => $new
  117.             ]);
  118.         }
  119.     }
  120. }