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 action
- return 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(),
- ]);
- }
- }