src/Controller/SecurityController.php line 18

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\User;
  4. use App\Form\Type\PasswordResetType;
  5. use App\Time\TimeService;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
  9. use Symfony\Component\Security\Core\Encoder\EncoderFactory;
  10. use Symfony\Component\Security\Core\Encoder\MessageDigestPasswordEncoder;
  11. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  12. use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
  13. class SecurityController extends Controller
  14. {
  15.     public function index(): Response
  16.     {
  17.         return $this->render('Default/index.html.twig');
  18.     }
  19.     public function login(AuthenticationUtils $authenticationUtils): Response
  20.     {
  21.         if ($this->getUser()) {
  22.             return $this->redirectToRoute('index');
  23.         }
  24.         // get the login error if there is one
  25.         $error $authenticationUtils->getLastAuthenticationError();
  26.         // last username entered by the user
  27.         $lastUsername $authenticationUtils->getLastUsername();
  28.         if ($error) {
  29.             $this->setFlash('error'$error->getMessage());
  30.         }
  31.         return $this->render(
  32.             'Default/login.html.twig',
  33.             ['error'          => $error'last_username'  => $lastUsername'showNavigation' => false'showFooter'     => false],
  34.         );
  35.     }
  36.     public function passwordSet(Request $requestTimeService $timeService$token null): Response
  37.     {
  38.         $user $this->getRepo(User::class)->findOneBy(['passwordResetToken' => $token]);
  39.         if (!$user) {
  40.             $this->setFlash('error''The password reset token has expired please contact Dawson Forklift Services to request a new link.');
  41.             throw $this->createNotFoundException('Invlaid token "' $token '".');
  42.         }
  43.         $now          $timeService->getNewDateTime();
  44.         $invalidToken $now $user->getPasswordResetTokenExpiry();
  45.         if ($invalidToken) {
  46.             $user->setPasswordResetToken(null);
  47.             $user->setPasswordResetTokenExpiry(null);
  48.             $this->setFlash('error''The password reset token has expired please contact Dawson Forklift Services to request a new link.');
  49.             return $this->redirect($this->generateUrl('login'));
  50.         }
  51.         $form $this->createForm(PasswordResetType::class);
  52.         $form->handleRequest($request);
  53.         if ($form->isSubmitted() && $form->isValid()) {
  54.             $defaultEncoder = new MessageDigestPasswordEncoder('sha512'true5000);
  55.             $encoders = [
  56.                 User::class => $defaultEncoder,
  57.             ];
  58.             $encoderFactory = new EncoderFactory($encoders);
  59.             $encoder           $encoderFactory->getEncoder($user);
  60.             $bcrypted_password $encoder->encodePassword($form->get('plainPassword')->getData(), $user->getSalt());
  61.             $user->setPassword($bcrypted_password);
  62.             $user->setPasswordResetToken(null);
  63.             $user->setPasswordResetTokenExpiry(null);
  64.             $em $this->getDoctrine()->getManager();
  65.             $em->persist($user);
  66.             $em->flush();
  67.             $token = new UsernamePasswordToken($usernull'secured_area'$user->getRoles());
  68.             $this->get('security.token_storage')->setToken($token);
  69.             $event = new InteractiveLoginEvent($request$token);
  70.             $this->get('event_dispatcher')->dispatch('security.interactive_login'$event);
  71.             $this->setFlash('success''The password for "' $user->getUsername() . '" was successfully set');
  72.             return $this->redirect($this->generateUrl('index'));
  73.         }
  74.         return $this->render('User/_passwordSetForm.html.twig', ['token'     => $token'form'      => $form->createView(), 'formRoute' => $this->generateUrl('set_password', ['token' => $token])]);
  75.     }
  76.     public function passwordReset(Request $requestTimeService $timeService$token null): Response
  77.     {
  78.         $user $this->getRepo(User::class)->findOneBy(['passwordResetToken' => $token]);
  79.         if (!$user) {
  80.             $this->setFlash('error''The password reset token has expired please contact Dawson Forklift Services to request a new link.');
  81.             throw $this->createNotFoundException('Invlaid token "' $token '".');
  82.         }
  83.         $now          $timeService->getNewDateTime();
  84.         $invalidToken $now $user->getPasswordResetTokenExpiry();
  85.         if ($invalidToken) {
  86.             $user->setPasswordResetToken(null);
  87.             $user->setPasswordResetTokenExpiry(null);
  88.             $this->setFlash('error''The password reset token has expired please contact Dawson Forklift Services to request a new link.');
  89.             return $this->redirect($this->generateUrl('login'));
  90.         }
  91.         $form $this->createForm(PasswordResetType::class);
  92.         $form->handleRequest($request);
  93.         if ($form->isSubmitted() && $form->isValid()) {
  94.             $defaultEncoder = new MessageDigestPasswordEncoder('sha512'true5000);
  95.             $encoders = [
  96.                 User::class => $defaultEncoder,
  97.             ];
  98.             $encoderFactory = new EncoderFactory($encoders);
  99.             $encoder           $encoderFactory->getEncoder($user);
  100.             $bcrypted_password $encoder->encodePassword($form->get('plainPassword')->getData(), $user->getSalt());
  101.             $user->setPassword($bcrypted_password);
  102.             $user->setPasswordResetToken(null);
  103.             $user->setPasswordResetTokenExpiry(null);
  104.             $em $this->getDoctrine()->getManager();
  105.             $em->persist($user);
  106.             $em->flush();
  107.             $token = new UsernamePasswordToken($usernull'secured_area'$user->getRoles());
  108.             $this->get('security.token_storage')->setToken($token);
  109.             $event = new InteractiveLoginEvent($request$token);
  110.             $this->get('event_dispatcher')->dispatch('security.interactive_login'$event);
  111.             $this->setFlash('success''The password for "' $user->getUsername() . '" was successfully reset');
  112.             return $this->redirect($this->generateUrl('index'));
  113.         }
  114.         return $this->render('User/_passwordResetForm.html.twig', ['token'     => $token'form'      => $form->createView(), 'formRoute' => $this->generateUrl('reset_password', ['token' => $token])]);
  115.     }
  116. }