src/Security/Authenticator.php line 38

  1. <?php
  2. namespace App\Security;
  3. use App\Controller\ServiziController;
  4. use App\Entity\Carrello;
  5. use App\Entity\User;
  6. use App\Model\Carrello\FunzioniCarrello;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Component\HttpFoundation\RedirectResponse;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  12. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  13. use Symfony\Component\Routing\RouterInterface;
  14. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  15. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  16. use Symfony\Component\Security\Core\Exception\CustomUserMessageAuthenticationException;
  17. use Symfony\Component\Security\Core\Exception\InvalidCsrfTokenException;
  18. use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
  19. use Symfony\Component\Security\Core\User\UserInterface;
  20. use Symfony\Component\Security\Core\User\UserProviderInterface;
  21. use Symfony\Component\Security\Csrf\CsrfToken;
  22. use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
  23. use Symfony\Component\Security\Http\Authenticator\AbstractLoginFormAuthenticator;
  24. use Symfony\Component\Security\Http\Authenticator\Passport\Badge\CsrfTokenBadge;
  25. use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge;
  26. use Symfony\Component\Security\Http\Authenticator\Passport\Credentials\PasswordCredentials;
  27. use Symfony\Component\Security\Http\Authenticator\Passport\Passport;
  28. use Symfony\Component\Security\Http\Util\TargetPathTrait;
  29. /**
  30.  * Class Authenticator
  31.  * @package App\Security
  32.  */
  33. class Authenticator extends AbstractLoginFormAuthenticator
  34. {
  35.     use TargetPathTrait;
  36.     private $entityManager;
  37.     private $urlGenerator;
  38.     private $csrfTokenManager;
  39.     private $passwordHasher;
  40.     private $logger;
  41.     private $router;
  42.     private $tokenStorage;
  43.     private $servizi;
  44.     public function __construct(EntityManagerInterface $entityManagerUrlGeneratorInterface $urlGeneratorCsrfTokenManagerInterface $csrfTokenManagerUserPasswordHasherInterface $passwordHasherRouterInterface $routerTokenStorageInterface $tokenStorageServiziController $servizi)
  45.     {
  46.         $this->entityManager $entityManager;
  47.         $this->urlGenerator $urlGenerator;
  48.         $this->csrfTokenManager $csrfTokenManager;
  49.         $this->passwordHasher $passwordHasher;
  50.         $this->router $router;
  51.         $this->tokenStorage $tokenStorage;
  52.         $this->servizi $servizi;
  53.     }
  54.     public function supports(Request $request): bool
  55.     {
  56.         return 'home_login' === $request->attributes->get('_route')
  57.             && $request->isMethod('POST');
  58.     }
  59.     /**
  60.      * Used to upgrade (rehash) the user's password automatically over time.
  61.      */
  62.     public function getPassword($credentials): ?string
  63.     {
  64.         return $credentials['password'];
  65.     }
  66.     public function onAuthenticationSuccess(Request $requestTokenInterface $tokenstring $firewallName): ?Response
  67.     {
  68.         /*
  69.             $url = $this->router->generate('accedi_autenticazione_2_fattori');
  70.             return new RedirectResponse($url);
  71.         */
  72.         $this->servizi->logger->emergency('onAuthenticationSuccess');
  73.         /** @var User $userLoggato */
  74.         $userLoggato $token->getUser();
  75.         if($userLoggato) {
  76.             //Verifico se c'era un carrello memorizzato e lo associo all'utente che ha effettuato il login
  77.             if($userLoggato->getTwofactorSharedSecret() && $userLoggato->getTwofactorSharedSecret() != '' && $userLoggato->getTwofactorSharedSecret() != null){
  78.                 $request->getSession()->set("2factRequested"1);
  79.                 $request->getSession()->save();
  80.             }else{
  81.                 $em $this->servizi->doctrine->getManager();
  82.                 $userLoggato->setLastLogin(new \Datetime());
  83.                 $em->persist($userLoggato);
  84.                 $em->flush();
  85.             }
  86.             $secret '';
  87.             if ($this->tokenStorage->getToken()->hasAttribute('secret'))
  88.                 $secret $this->tokenStorage->getToken()->getAttribute('secret');
  89.             if ($secret != '') {
  90.                 $carrello $this->servizi->doctrine->getRepository(Carrello::class)->findOneBy(array('secret' => $secret));
  91.                 $funzioniCarrello = new FunzioniCarrello($this->servizi->doctrine$this->servizi->impostazioni$this->servizi);
  92.                 $funzioniCarrello->SpostaERicalcolaCarrello($carrello$userLoggatonull$userLoggato->getAgente() ? $userLoggato null);
  93.             }
  94.         }
  95.         return new RedirectResponse($this->router->generate('homepage'));
  96.         /*if ($targetPath = $this->getTargetPath($request->getSession(), $providerKey)) {
  97.             return new RedirectResponse($targetPath);
  98.         }
  99.         return new RedirectResponse($this->router->generate('homepage'));*/
  100.     }
  101.     protected function getLoginUrl(Request $request): string
  102.     {
  103.         return $this->urlGenerator->generate('home_login');
  104.     }
  105.     public function authenticate(Request $request): Passport
  106.     {
  107.         $password $request->request->get('password');
  108.         $username $request->request->get('username');
  109.         $csrfToken $request->request->get('csrf_token');
  110.         // ... validate no parameter is empty
  111.         return new Passport(
  112.             new UserBadge($username),
  113.             new PasswordCredentials($password),
  114.             [new CsrfTokenBadge('authenticate'$csrfToken)]
  115.         );
  116.     }
  117. }