vendor/friendsofsymfony/user-bundle/Controller/ResettingController.php line 67
<?php/** This file is part of the FOSUserBundle package.** (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>** For the full copyright and license information, please view the LICENSE* file that was distributed with this source code.*/namespace FOS\UserBundle\Controller;use FOS\UserBundle\CompatibilityUtil;use FOS\UserBundle\Event\FilterUserResponseEvent;use FOS\UserBundle\Event\FormEvent;use FOS\UserBundle\Event\GetResponseNullableUserEvent;use FOS\UserBundle\Event\GetResponseUserEvent;use FOS\UserBundle\Form\Factory\FactoryInterface;use FOS\UserBundle\FOSUserEvents;use FOS\UserBundle\Mailer\MailerInterface;use FOS\UserBundle\Model\UserManagerInterface;use FOS\UserBundle\Util\TokenGeneratorInterface;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\HttpFoundation\RedirectResponse;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;/*** Controller managing the resetting of the password.** @author Thibault Duplessis <thibault.duplessis@gmail.com>* @author Christophe Coevoet <stof@notk.org>** @final*/class ResettingController extends AbstractController{private $eventDispatcher;private $formFactory;private $userManager;private $tokenGenerator;private $mailer;/*** @var int*/private $retryTtl;/*** @param int $retryTtl*/public function __construct(EventDispatcherInterface $eventDispatcher, FactoryInterface $formFactory, UserManagerInterface $userManager, TokenGeneratorInterface $tokenGenerator, MailerInterface $mailer, $retryTtl){$this->eventDispatcher = CompatibilityUtil::upgradeEventDispatcher($eventDispatcher);$this->formFactory = $formFactory;$this->userManager = $userManager;$this->tokenGenerator = $tokenGenerator;$this->mailer = $mailer;$this->retryTtl = $retryTtl;}/*** Request reset user password: show form.*/public function requestAction(): Response{return $this->render('@FOSUser/Resetting/request.html.twig');}/*** Request reset user password: submit form and send email.*/public function sendEmailAction(Request $request): Response{$username = $request->request->get('username');$user = $this->userManager->findUserByUsernameOrEmail($username);$event = new GetResponseNullableUserEvent($user, $request);$this->eventDispatcher->dispatch($event, FOSUserEvents::RESETTING_SEND_EMAIL_INITIALIZE);if (null !== $event->getResponse()) {return $event->getResponse();}if (null !== $user && !$user->isPasswordRequestNonExpired($this->retryTtl)) {$event = new GetResponseUserEvent($user, $request);$this->eventDispatcher->dispatch($event, FOSUserEvents::RESETTING_RESET_REQUEST);if (null !== $event->getResponse()) {return $event->getResponse();}if (null === $user->getConfirmationToken()) {$user->setConfirmationToken($this->tokenGenerator->generateToken());}$event = new GetResponseUserEvent($user, $request);$this->eventDispatcher->dispatch($event, FOSUserEvents::RESETTING_SEND_EMAIL_CONFIRM);if (null !== $event->getResponse()) {return $event->getResponse();}$this->mailer->sendResettingEmailMessage($user);$user->setPasswordRequestedAt(new \DateTime());$this->userManager->updateUser($user);$event = new GetResponseUserEvent($user, $request);$this->eventDispatcher->dispatch($event, FOSUserEvents::RESETTING_SEND_EMAIL_COMPLETED);if (null !== $event->getResponse()) {return $event->getResponse();}}return new RedirectResponse($this->generateUrl('fos_user_resetting_check_email', ['username' => $username]));}/*** Tell the user to check his email provider.*/public function checkEmailAction(Request $request): Response{$username = $request->query->get('username');if (empty($username)) {// the user does not come from the sendEmail actionreturn new RedirectResponse($this->generateUrl('fos_user_resetting_request'));}return $this->render('@FOSUser/Resetting/check_email.html.twig', ['tokenLifetime' => ceil($this->retryTtl / 3600),]);}/*** Reset user password.** @param string $token*/public function resetAction(Request $request, $token): Response{$user = $this->userManager->findUserByConfirmationToken($token);if (null === $user) {return new RedirectResponse($this->container->get('router')->generate('fos_user_security_login'));}$event = new GetResponseUserEvent($user, $request);$this->eventDispatcher->dispatch($event, FOSUserEvents::RESETTING_RESET_INITIALIZE);if (null !== $event->getResponse()) {return $event->getResponse();}$form = $this->formFactory->createForm();$form->setData($user);$form->handleRequest($request);if ($form->isSubmitted() && $form->isValid()) {$event = new FormEvent($form, $request);$this->eventDispatcher->dispatch($event, FOSUserEvents::RESETTING_RESET_SUCCESS);$this->userManager->updateUser($user);if (null === $response = $event->getResponse()) {$url = $this->generateUrl('fos_user_profile_show');$response = new RedirectResponse($url);}$this->eventDispatcher->dispatch(new FilterUserResponseEvent($user, $request, $response),FOSUserEvents::RESETTING_RESET_COMPLETED);return $response;}return $this->render('@FOSUser/Resetting/reset.html.twig', ['token' => $token,'form' => $form->createView(),]);}}