src/Controller/ResetLozinkeController.php line 84

  1. <?php
  2. namespace App\Controller;
  3. use App\Form\EmailZaResetLozinkeForm;
  4. use App\Form\PromjenaLozinkeForm;
  5. use App\Handler\MessageTrait;
  6. use App\Mailer\Email\PasswordResetMailer;
  7. use App\Repository\UserRepository;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Knp\Component\Pager\PaginatorInterface;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  15. class ResetLozinkeController extends AppController
  16. {
  17.     private PasswordResetMailer $passwordResetMailer;
  18.     public function __construct(
  19.         EntityManagerInterface $manager,
  20.         TokenStorageInterface $storage,
  21.         PaginatorInterface $paginator,
  22.         PasswordResetMailer $passwordResetMailer
  23.     )
  24.     {
  25.         parent::__construct($manager$storage$paginator);
  26.         $this->passwordResetMailer $passwordResetMailer;
  27.     }
  28.     /**
  29.      * @Route("/reset-lozinke" , name="reset_lozinka")
  30.      */
  31.     public function sendToken(Request $requestUserRepository $userRepository): Response
  32.     {
  33.         $entityManager $this->manager;
  34.         $form $this->createForm(EmailZaResetLozinkeForm::class);
  35.         $form->handleRequest($request);
  36.         $email $form["email"]->getData();
  37.         $users $userRepository->findBy(['email' =>$email]);
  38.         if ($form->isSubmitted() && $form->isValid()) {
  39.             if (!empty($users) ) {
  40.                 $token $this->generateToken();
  41.                 $user $userRepository->findOneBy(['email' => $email]);
  42.                 $this->sendCustomMessage(MessageTrait::$success'Poslan Vam je e-mail sa daljnjim uputama');
  43.                 $user->setToken($token);
  44.                 $entityManager->flush();
  45.                 $this->passwordResetMailer->send($user);
  46.                 return $this->redirectToRoute('reset_lozinka');
  47.             } else {
  48.                 $this->sendCustomMessage(MessageTrait::$error'Ovaj korisnički račun ne postoji!');
  49.                 return $this->render(
  50.                     'userSecurity/resetLozinke/resetLozinke.html.twig' ,
  51.                     [
  52.                         'form' => $form->createView()
  53.                     ]
  54.                 );
  55.             }
  56.         }
  57.         return $this->render(
  58.             'userSecurity/resetLozinke/resetLozinke.html.twig' ,
  59.             [
  60.                 'form' => $form->createView()
  61.             ]
  62.         );
  63.     }
  64.     /**
  65.      * @Route("/reset-lozinke/promjena-lozinke/{token}" , name="promijeni_lozinku")
  66.      */
  67.     public function promjenaLozinke(Request $requestUserRepository $userRepositoryUserPasswordHasherInterface $userPasswordHasher): Response
  68.     {
  69.         $entityManager $this->manager;
  70.         $routeParams $request->attributes->get('_route_params');
  71.         $user $userRepository->findOneBy(['token' => $routeParams['token']]);
  72.         if (null === $user) {
  73.             return $this->redirectToRoute('security_login');
  74.         }
  75.         $form $this->createForm(PromjenaLozinkeForm::class);
  76.         $form->handleRequest($request);
  77.         $pass $form["plainPassword"]->getData();
  78.         if ($form->isSubmitted() && $form->isValid()) {
  79.             $password $userPasswordHasher
  80.                 ->hashPassword($user$pass);
  81.             $user->setPassword($password);
  82.             $user->setToken(null);
  83.             $entityManager->flush();
  84.             $this->sendCustomMessage(MessageTrait::$success'Uspješno promijenjena lozinka');
  85.             return $this->redirectToRoute('security_login');
  86.         }
  87.         return $this->render(
  88.             'userSecurity/resetLozinke/promjenaLozinke.html.twig' ,
  89.             [
  90.                 'email' => $user->getEmail(),
  91.                 'form' => $form->createView()
  92.             ]
  93.         );
  94.     }
  95.     private function generateToken(): string
  96.     {
  97.         $string '0123456789qwertzuiopasdfghjklyxcvbnmQWERTZUIOPASDFGHJKLYXCVBNM';
  98.         $string str_shuffle($string);
  99.         $string substr($string,0,50);
  100.         return uniqid() . '_' $string;
  101.     }
  102. }