vendor/excelwebzone/symfony-admin-bundle/src/Controller/ResettingController.php line 60

Open in your IDE?
  1. <?php
  2. namespace EWZ\SymfonyAdminBundle\Controller;
  3. use EWZ\SymfonyAdminBundle\Event\FilterUserResponseEvent;
  4. use EWZ\SymfonyAdminBundle\Event\UserEvent;
  5. use EWZ\SymfonyAdminBundle\Events;
  6. use EWZ\SymfonyAdminBundle\Form\ResettingFormType;
  7. use EWZ\SymfonyAdminBundle\Modal\User;
  8. use EWZ\SymfonyAdminBundle\Repository\UserRepository;
  9. use EWZ\SymfonyAdminBundle\Util\StringUtil;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  11. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. /**
  16.  * @Route("/resetting")
  17.  */
  18. class ResettingController extends AbstractController
  19. {
  20.     /** @var EventDispatcherInterface */
  21.     private $eventDispatcher;
  22.     /** @var UserRepository */
  23.     private $repository;
  24.     /** @var int */
  25.     private $retryTtl;
  26.     /** @var int */
  27.     private $tokenTtl;
  28.     /**
  29.      * @param EventDispatcherInterface $eventDispatcher
  30.      * @param UserRepository           $repository
  31.      * @param int                      $retryTtl
  32.      * @param int                      $retryTtl
  33.      */
  34.     public function __construct(
  35.         EventDispatcherInterface $eventDispatcher,
  36.         UserRepository $repository,
  37.         int $retryTtl 7200,
  38.         int $tokenTtl 86400
  39.     ) {
  40.         $this->eventDispatcher $eventDispatcher;
  41.         $this->repository $repository;
  42.         $this->retryTtl $retryTtl;
  43.         $this->tokenTtl $tokenTtl;
  44.     }
  45.     /**
  46.      * Request reset user password: show form.
  47.      *
  48.      * @Route("/", name="resetting_request")
  49.      *
  50.      * @return Response
  51.      */
  52.     public function index(): Response
  53.     {
  54.         return $this->render('@SymfonyAdmin/resetting/request.html.twig');
  55.     }
  56.     /**
  57.      * Request reset user password: submit form and send email.
  58.      *
  59.      * @Route("/send-email", name="resetting_send_email", methods="POST")
  60.      *
  61.      * @param Request $request
  62.      *
  63.      * @return Response
  64.      */
  65.     public function sendEmail(Request $request): Response
  66.     {
  67.         $email $request->request->get('email');
  68.         /** @var User $user */
  69.         $user $this->repository->findUserByEmail($email);
  70.         $error null;
  71.         if (null !== $user /* && !$user->isPasswordRequestNonExpired($this->retryTtl) */) {
  72.             if (!$user->isEnabled()) {
  73.                 return $this->redirectToRoute('resetting_request');
  74.             }
  75.             if (null === $user->getConfirmationToken()) {
  76.                 $user->setConfirmationToken(StringUtil::generateToken());
  77.             }
  78.             $event = new UserEvent($user);
  79.             $this->eventDispatcher->dispatch($eventEvents::RESETTING_PASSWORD_SENT);
  80.             $user->setPasswordRequestedAt(new \DateTime());
  81.             $this->repository->update($user);
  82.             return $this->redirectToRoute('resetting_check_email', ['email' => $email]);
  83.         }
  84.         $this->addFlash('error''resetting.wrong_email');
  85.         return $this->redirectToRoute('resetting_request');
  86.     }
  87.     /**
  88.      * Tell the user to check his email provider.
  89.      *
  90.      * @Route("/check-email", name="resetting_check_email")
  91.      *
  92.      * @param Request $request
  93.      *
  94.      * @return Response
  95.      */
  96.     public function checkEmail(Request $request): Response
  97.     {
  98.         $email $request->query->get('email');
  99.         if (empty($email)) {
  100.             // the user does not come from the sendEmail action
  101.             return $this->redirectToRoute('resetting_request');
  102.         }
  103.         $this->addFlash('success''resetting.password_reset_sent');
  104.         return $this->redirectToRoute('security_login');
  105.     }
  106.     /**
  107.      * Reset user password.
  108.      *
  109.      * @Route("/reset/{token}", name="resetting_reset", methods={"GET","POST"})
  110.      *
  111.      * @param Request $request
  112.      * @param string  $token
  113.      *
  114.      * @return Response
  115.      */
  116.     public function reset(Request $requeststring $token): Response
  117.     {
  118.         $user $this->repository->findUserByConfirmationToken($token);
  119.         if (null === $user) {
  120.             return $this->redirectToRoute('security_login');
  121.         }
  122.         if (!$user->isPasswordRequestNonExpired($this->tokenTtl)) {
  123.             return $this->redirectToRoute('resetting_request');
  124.         }
  125.         $form $this->createForm(ResettingFormType::class);
  126.         $form->setData($user);
  127.         $form->handleRequest($request);
  128.         if ($form->isSubmitted() && $form->isValid()) {
  129.             /** @var User $user */
  130.             $user $form->getData();
  131.             $user->setConfirmationToken(null);
  132.             $user->setPasswordRequestedAt(null);
  133.             $user->setEnabled(true);
  134.             $this->repository->update($user);
  135.             $this->addFlash('success''resetting.password_reset_successfully');
  136.             $response $this->redirectToRoute('admin_homepage');
  137.             $event = new FilterUserResponseEvent($user$request$response);
  138.             $this->eventDispatcher->dispatch($eventEvents::RESETTING_PASSWORD_CONFIRMED);
  139.             return $response;
  140.         }
  141.         return $this->render('@SymfonyAdmin/resetting/reset.html.twig', [
  142.             'token' => $token,
  143.             'form' => $form->createView(),
  144.         ]);
  145.     }
  146. }