src/Http/Controller/Auth/PasswordRecoveryController.php line 18

Open in your IDE?
  1. <?php
  2. namespace App\Http\Controller\Auth;
  3. use App\Database\Domain\Entity\User\UserRecoverPasswordToken;
  4. use App\Database\Domain\Repository\UserRepository;
  5. use App\Infrastructure\Security\AuthManager;
  6. use App\Infrastructure\Service\ActionResponseHandler;
  7. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. /**
  13.  * @Route("/password-recovery", name="password_recovery_")
  14.  */
  15. class PasswordRecoveryController extends AbstractController
  16. {
  17.     /**
  18.      * @Route("", name="index")
  19.      */
  20.     public function __invoke(): Response
  21.     {
  22.         return $this->render('user/auth/password_recovery.html.twig');
  23.     }
  24.     /**
  25.      * @Route("/form", name="form", methods={"POST"})
  26.      */
  27.     public function handlePasswordChangeRequestForm(
  28.         Request $request,
  29.         AuthManager $authManager,
  30.         UserRepository $userRepository,
  31.         ActionResponseHandler $actionResponseHandler
  32.     ): Response {
  33.         $user $userRepository->findOneBy(['username' => $request->request->get('login')]);
  34.         if (!$user) {
  35.             return $actionResponseHandler->errorRedirect('password_recovery_index''User was not found');
  36.         }
  37.         $authManager->requestPasswordRecovery($user);
  38.         return $actionResponseHandler->successRedirect('password_recovery_index''Recovery link is sent to your email!');
  39.     }
  40.     /**
  41.      * @Route("/{token}", name="recover", methods={"GET"})
  42.      *
  43.      * @ParamConverter("token", options={"mapping": {"token": "token"}})
  44.      */
  45.     public function invokeChangePassword(UserRecoverPasswordToken $tokenActionResponseHandler $actionResponseHandler): Response
  46.     {
  47.         if ($token->isUsed()) {
  48.             return $actionResponseHandler->errorRedirect('password_recovery_index''Password is already changed. Try to login.');
  49.         }
  50.         return $this->render('user/auth/password_recovery_change.html.twig', ['token' => $token->getToken()]);
  51.     }
  52.     /**
  53.      * @Route("/form/{token}", name="change", methods={"POST"})
  54.      *
  55.      * @ParamConverter("token", options={"mapping": {"token": "token"}})
  56.      */
  57.     public function handleNewPasswordForm(
  58.         UserRecoverPasswordToken $token,
  59.         Request $request,
  60.         AuthManager $authManager,
  61.         ActionResponseHandler $actionResponseHandler
  62.     ): Response {
  63.         $password $request->request->get('password');
  64.         $passwordConfirmation $request->request->get('password_confirmation');
  65.         if ($password !== $passwordConfirmation) {
  66.             return $actionResponseHandler->errorRedirect('password_recovery_recover''Passwords are not same', ['token' => $token->getToken()]);
  67.         }
  68.         $token->setIsUsed(true);
  69.         $authManager->changePassword($token->getUser(), $password);
  70.         return $this->redirectToRoute('user_login');
  71.     }
  72. }