src/Controller/ResetLozinkeController.php line 84
<?php
namespace App\Controller;
use App\Form\EmailZaResetLozinkeForm;
use App\Form\PromjenaLozinkeForm;
use App\Handler\MessageTrait;
use App\Mailer\Email\PasswordResetMailer;
use App\Repository\UserRepository;
use Doctrine\ORM\EntityManagerInterface;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
class ResetLozinkeController extends AppController
{
private PasswordResetMailer $passwordResetMailer;
public function __construct(
EntityManagerInterface $manager,
TokenStorageInterface $storage,
PaginatorInterface $paginator,
PasswordResetMailer $passwordResetMailer
)
{
parent::__construct($manager, $storage, $paginator);
$this->passwordResetMailer = $passwordResetMailer;
}
/**
* @Route("/reset-lozinke" , name="reset_lozinka")
*/
public function sendToken(Request $request, UserRepository $userRepository): Response
{
$entityManager = $this->manager;
$form = $this->createForm(EmailZaResetLozinkeForm::class);
$form->handleRequest($request);
$email = $form["email"]->getData();
$users = $userRepository->findBy(['email' =>$email]);
if ($form->isSubmitted() && $form->isValid()) {
if (!empty($users) ) {
$token = $this->generateToken();
$user = $userRepository->findOneBy(['email' => $email]);
$this->sendCustomMessage(MessageTrait::$success, 'Poslan Vam je e-mail sa daljnjim uputama');
$user->setToken($token);
$entityManager->flush();
$this->passwordResetMailer->send($user);
return $this->redirectToRoute('reset_lozinka');
} else {
$this->sendCustomMessage(MessageTrait::$error, 'Ovaj korisnički račun ne postoji!');
return $this->render(
'userSecurity/resetLozinke/resetLozinke.html.twig' ,
[
'form' => $form->createView()
]
);
}
}
return $this->render(
'userSecurity/resetLozinke/resetLozinke.html.twig' ,
[
'form' => $form->createView()
]
);
}
/**
* @Route("/reset-lozinke/promjena-lozinke/{token}" , name="promijeni_lozinku")
*/
public function promjenaLozinke(Request $request, UserRepository $userRepository, UserPasswordHasherInterface $userPasswordHasher): Response
{
$entityManager = $this->manager;
$routeParams = $request->attributes->get('_route_params');
$user = $userRepository->findOneBy(['token' => $routeParams['token']]);
if (null === $user) {
return $this->redirectToRoute('security_login');
}
$form = $this->createForm(PromjenaLozinkeForm::class);
$form->handleRequest($request);
$pass = $form["plainPassword"]->getData();
if ($form->isSubmitted() && $form->isValid()) {
$password = $userPasswordHasher
->hashPassword($user, $pass);
$user->setPassword($password);
$user->setToken(null);
$entityManager->flush();
$this->sendCustomMessage(MessageTrait::$success, 'Uspješno promijenjena lozinka');
return $this->redirectToRoute('security_login');
}
return $this->render(
'userSecurity/resetLozinke/promjenaLozinke.html.twig' ,
[
'email' => $user->getEmail(),
'form' => $form->createView()
]
);
}
private function generateToken(): string
{
$string = '0123456789qwertzuiopasdfghjklyxcvbnmQWERTZUIOPASDFGHJKLYXCVBNM';
$string = str_shuffle($string);
$string = substr($string,0,50);
return uniqid() . '_' . $string;
}
}