src/Controller/SecurityController.php line 97

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Repository\UserRepository;
  4. use Doctrine\ORM\EntityManager;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\Routing\Annotation\Route;
  10. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  11. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  12. use Symfony\Component\HttpFoundation\RedirectResponse;
  13. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  14. use Symfony\Component\Security\Csrf\CsrfToken;
  15. use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
  16. use Gregwar\Captcha\CaptchaBuilder;
  17. use Gregwar\Captcha\PhraseBuilder;
  18. class SecurityController extends AbstractController
  19. {
  20.     /**
  21.      * SecurityController constructor.
  22.      */
  23.     private $urlGenerator;
  24.     private $csrfTokenManager;
  25.     private $user_repository;
  26.     private $emailController;
  27.     private $passwordEncoder;
  28.     public function __construct(UrlGeneratorInterface $urlGeneratorCsrfTokenManagerInterface $csrfTokenManager,UserPasswordHasherInterface $passwordEncoderUserRepository $user_repository,EmailController $emailController)
  29.     {
  30.         $this->urlGenerator $urlGenerator;
  31.         $this->csrfTokenManager $csrfTokenManager;
  32.         $this->user_repository $user_repository;
  33.         $this->emailController $emailController;
  34.         $this->passwordEncoder $passwordEncoder;
  35.     }
  36.     /**
  37.      * @Route("/login", name="app_login")
  38.      */
  39.     public function login(AuthenticationUtils $authenticationUtilsRequest $requestEntityManagerInterface $em): Response
  40.     {
  41.          if ($this->getUser()) {
  42.              die(var_dump($request));
  43.              //  INSERT INTO loginhistory
  44.              $loginHistory = new \App\Entity\Loginhistory();
  45.              $loginHistory->setLogintime(new \DateTime());
  46.              $loginHistory->setUsername($this->getUser()->getUsername());
  47.              $loginHistory->setUserid($this->getUser()->getId());
  48.              die(var_dump($request));
  49.               $em->persist($loginHistory);
  50.               $em->flush();
  51.              if(in_array('ROLE_ADMIN'$this->getUser()->getRoles()))
  52.              {
  53.                  return new RedirectResponse($this->urlGenerator->generate('administration_index'));
  54.              }
  55.              else{
  56.                  return $this->redirectToRoute('frontend_index');
  57.              }
  58.          }
  59.         // get the login error if there is one
  60.         $error $authenticationUtils->getLastAuthenticationError();
  61.         // last username entered by the user
  62.         $lastUsername $authenticationUtils->getLastUsername();
  63.         return $this->render('security/login.html.twig', ['last_username' => $lastUsername'error' => $error]);
  64.     }
  65.     /**
  66.      * @Route("/logout", name="app_logout")
  67.      */
  68.     public function logout()
  69.     {
  70.         throw new \LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.');
  71.     }
  72.     /**
  73.      * @Route("/password-recovery-request", name="password-recovery-request")
  74.      */
  75.     public function passwordRecoveryRequest(Request $request): Response
  76.     {
  77.         $errors = [];
  78.         $email $request->get('email');
  79.         if($request->getMethod() =='POST'){
  80.             $token = new CsrfToken('passwordrecovery'$request->get('_csrf_token'));
  81.             if ($this->csrfTokenManager->isTokenValid($token)) {
  82.                 #verifichiamo che l'utente esista
  83.                 $u $this->user_repository->findOneByEmail($request->get('email'));
  84.                 if($u)
  85.                 {
  86.                     $phraseBuilder = new PhraseBuilder(9,'0123456789');
  87.                     $captcha = new CaptchaBuilder(null$phraseBuilder);
  88.                     $captcha->build();
  89.                     $values = [
  90.                         'user'=>$u,
  91.                         'captcha'=>$captcha->getPhrase()
  92.                     ];
  93.                     $this->emailController->sendEmail($email,'Modifica Password','modifica_password'$values);
  94.                     $checksum md5($email).";".md5(sha1($values['captcha']));
  95.                     return new RedirectResponse($this->urlGenerator->generate('check-password-recovery',['c'=>$checksum]));
  96.                 }
  97.                 else{
  98.                     $errors[] = 'Utente non valido.';
  99.                 }
  100.             }
  101.         }
  102.         return $this->render('security/password-recovery-request.html.twig', ['email'=>$email'errors'=>$errors]);
  103.     }
  104.     /**
  105.      * @Route("/check-password-recovery", name="check-password-recovery")
  106.      */
  107.     public function checkPasswordRecovery(Request $requestEntityManagerInterface $em): Response
  108.     {
  109.         $checksum $request->get('c');
  110.         $password1 trim($request->get('password1'));
  111.         $password2 trim($request->get('password2'));
  112.         $verifycode $request->get('verifycode');
  113.         $has_changed false;
  114.         $errors = [];
  115.         if($request->getMethod() =='POST'){
  116.             $t explode(";",$checksum);
  117.             $email $t[0];
  118.             $capcha $t[1];
  119.             if($capcha!= md5(sha1($verifycode)))
  120.             {
  121.                 $errors['verifycode'] = true;
  122.             }
  123.             if($password1!=$password2){
  124.                 $errors['password2'] = true;
  125.             }
  126.             if(!count($errors))
  127.             {
  128.                 #check che esista l'utente
  129.                 $qb $this->user_repository->createQueryBuilder('u');
  130.                 $qb->where("MD5(u.email)=:email");
  131.                 $qb->setParameter("email",$email);
  132.                 $user $qb->getQuery()->getOneOrNullResult();
  133.                 if(is_null($user)){
  134.                     throw new \Exception('Utenza non valida');
  135.                 }
  136.                 else{
  137.                     #registriamo la nuova password
  138.                     $user->setPassword($this->passwordEncoder->hashPassword($user,$password1));
  139.                     $em->persist($user);
  140.                     $em->flush();
  141.                     $has_changed true;
  142.                 }
  143.             }
  144.         }
  145.         return $this->render('security/password-recovery.html.twig', ['has_changed'=>$has_changed'errors'=>$errors'verifycode'=>$verifycode,'password1'=>$password1,'password2'=>$password2'checksum'=>$checksum]);
  146.     }
  147. }