vendor/friendsofsymfony/user-bundle/Controller/ResettingController.php line 39

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the FOSUserBundle package.
  4.  *
  5.  * (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace FOS\UserBundle\Controller;
  11. use FOS\UserBundle\Event\FilterUserResponseEvent;
  12. use FOS\UserBundle\Event\FormEvent;
  13. use FOS\UserBundle\Event\GetResponseNullableUserEvent;
  14. use FOS\UserBundle\Event\GetResponseUserEvent;
  15. use FOS\UserBundle\FOSUserEvents;
  16. use FOS\UserBundle\Model\UserInterface;
  17. use FOS\UserBundle\Util\TokenGeneratorInterface;
  18. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  19. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  20. use Symfony\Component\HttpFoundation\RedirectResponse;
  21. use Symfony\Component\HttpFoundation\Request;
  22. use Symfony\Component\HttpFoundation\Response;
  23. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  24. /**
  25.  * Controller managing the resetting of the password.
  26.  *
  27.  * @author Thibault Duplessis <thibault.duplessis@gmail.com>
  28.  * @author Christophe Coevoet <stof@notk.org>
  29.  */
  30. class ResettingController extends Controller
  31. {
  32.     /**
  33.      * Request reset user password: show form.
  34.      */
  35.     public function requestAction()
  36.     {
  37.         return $this->render('@FOSUser/Resetting/request.html.twig');
  38.     }
  39.     /**
  40.      * Request reset user password: submit form and send email.
  41.      *
  42.      * @param Request $request
  43.      *
  44.      * @return Response
  45.      */
  46.     public function sendEmailAction(Request $request)
  47.     {
  48.         $username $request->request->get('username');
  49.         /** @var $user UserInterface */
  50.         $user $this->get('fos_user.user_manager')->findUserByUsernameOrEmail($username);
  51.         /** @var $dispatcher EventDispatcherInterface */
  52.         $dispatcher $this->get('event_dispatcher');
  53.         /* Dispatch init event */
  54.         $event = new GetResponseNullableUserEvent($user$request);
  55.         $dispatcher->dispatch(FOSUserEvents::RESETTING_SEND_EMAIL_INITIALIZE$event);
  56.         if (null !== $event->getResponse()) {
  57.             return $event->getResponse();
  58.         }
  59.         $ttl $this->container->getParameter('fos_user.resetting.retry_ttl');
  60.         if (null !== $user && !$user->isPasswordRequestNonExpired($ttl)) {
  61.             $event = new GetResponseUserEvent($user$request);
  62.             $dispatcher->dispatch(FOSUserEvents::RESETTING_RESET_REQUEST$event);
  63.             if (null !== $event->getResponse()) {
  64.                 return $event->getResponse();
  65.             }
  66.             if (null === $user->getConfirmationToken()) {
  67.                 /** @var $tokenGenerator TokenGeneratorInterface */
  68.                 $tokenGenerator $this->get('fos_user.util.token_generator');
  69.                 $user->setConfirmationToken($tokenGenerator->generateToken());
  70.             }
  71.             /* Dispatch confirm event */
  72.             $event = new GetResponseUserEvent($user$request);
  73.             $dispatcher->dispatch(FOSUserEvents::RESETTING_SEND_EMAIL_CONFIRM$event);
  74.             if (null !== $event->getResponse()) {
  75.                 return $event->getResponse();
  76.             }
  77.             $this->get('fos_user.mailer')->sendResettingEmailMessage($user);
  78.             $user->setPasswordRequestedAt(new \DateTime());
  79.             $this->get('fos_user.user_manager')->updateUser($user);
  80.             /* Dispatch completed event */
  81.             $event = new GetResponseUserEvent($user$request);
  82.             $dispatcher->dispatch(FOSUserEvents::RESETTING_SEND_EMAIL_COMPLETED$event);
  83.             if (null !== $event->getResponse()) {
  84.                 return $event->getResponse();
  85.             }
  86.         }
  87.         return new RedirectResponse($this->generateUrl('fos_user_resetting_check_email', array('username' => $username)));
  88.     }
  89.     /**
  90.      * Tell the user to check his email provider.
  91.      *
  92.      * @param Request $request
  93.      *
  94.      * @return Response
  95.      */
  96.     public function checkEmailAction(Request $request)
  97.     {
  98.         $username $request->query->get('username');
  99.         if (empty($username)) {
  100.             // the user does not come from the sendEmail action
  101.             return new RedirectResponse($this->generateUrl('fos_user_resetting_request'));
  102.         }
  103.         return $this->render('@FOSUser/Resetting/check_email.html.twig', array(
  104.             'tokenLifetime' => ceil($this->container->getParameter('fos_user.resetting.retry_ttl') / 3600),
  105.         ));
  106.     }
  107.     /**
  108.      * Reset user password.
  109.      *
  110.      * @param Request $request
  111.      * @param string  $token
  112.      *
  113.      * @return Response
  114.      */
  115.     public function resetAction(Request $request$token)
  116.     {
  117.         /** @var $formFactory \FOS\UserBundle\Form\Factory\FactoryInterface */
  118.         $formFactory $this->get('fos_user.resetting.form.factory');
  119.         /** @var $userManager \FOS\UserBundle\Model\UserManagerInterface */
  120.         $userManager $this->get('fos_user.user_manager');
  121.         /** @var $dispatcher \Symfony\Component\EventDispatcher\EventDispatcherInterface */
  122.         $dispatcher $this->get('event_dispatcher');
  123.         $user $userManager->findUserByConfirmationToken($token);
  124.         if (null === $user) {
  125.             throw new NotFoundHttpException(sprintf('The user with "confirmation token" does not exist for value "%s"'$token));
  126.         }
  127.         $event = new GetResponseUserEvent($user$request);
  128.         $dispatcher->dispatch(FOSUserEvents::RESETTING_RESET_INITIALIZE$event);
  129.         if (null !== $event->getResponse()) {
  130.             return $event->getResponse();
  131.         }
  132.         $form $formFactory->createForm();
  133.         $form->setData($user);
  134.         $form->handleRequest($request);
  135.         if ($form->isSubmitted() && $form->isValid()) {
  136.             $event = new FormEvent($form$request);
  137.             $dispatcher->dispatch(FOSUserEvents::RESETTING_RESET_SUCCESS$event);
  138.             $userManager->updateUser($user);
  139.             if (null === $response $event->getResponse()) {
  140.                 $url $this->generateUrl('fos_user_profile_show');
  141.                 $response = new RedirectResponse($url);
  142.             }
  143.             $dispatcher->dispatch(
  144.                 FOSUserEvents::RESETTING_RESET_COMPLETED,
  145.                 new FilterUserResponseEvent($user$request$response)
  146.             );
  147.             return $response;
  148.         }
  149.         return $this->render('@FOSUser/Resetting/reset.html.twig', array(
  150.             'token' => $token,
  151.             'form' => $form->createView(),
  152.         ));
  153.     }
  154. }