src/Security/Authenticator.php line 38
<?phpnamespace App\Security;use App\Controller\ServiziController;use App\Entity\Carrello;use App\Entity\User;use App\Model\Carrello\FunzioniCarrello;use Doctrine\ORM\EntityManagerInterface;use Symfony\Component\HttpFoundation\RedirectResponse;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;use Symfony\Component\Routing\Generator\UrlGeneratorInterface;use Symfony\Component\Routing\RouterInterface;use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;use Symfony\Component\Security\Core\Exception\CustomUserMessageAuthenticationException;use Symfony\Component\Security\Core\Exception\InvalidCsrfTokenException;use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;use Symfony\Component\Security\Core\User\UserInterface;use Symfony\Component\Security\Core\User\UserProviderInterface;use Symfony\Component\Security\Csrf\CsrfToken;use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;use Symfony\Component\Security\Http\Authenticator\AbstractLoginFormAuthenticator;use Symfony\Component\Security\Http\Authenticator\Passport\Badge\CsrfTokenBadge;use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge;use Symfony\Component\Security\Http\Authenticator\Passport\Credentials\PasswordCredentials;use Symfony\Component\Security\Http\Authenticator\Passport\Passport;use Symfony\Component\Security\Http\Util\TargetPathTrait;/*** Class Authenticator* @package App\Security*/class Authenticator extends AbstractLoginFormAuthenticator{use TargetPathTrait;private $entityManager;private $urlGenerator;private $csrfTokenManager;private $passwordHasher;private $logger;private $router;private $tokenStorage;private $servizi;public function __construct(EntityManagerInterface $entityManager, UrlGeneratorInterface $urlGenerator, CsrfTokenManagerInterface $csrfTokenManager, UserPasswordHasherInterface $passwordHasher, RouterInterface $router, TokenStorageInterface $tokenStorage, ServiziController $servizi){$this->entityManager = $entityManager;$this->urlGenerator = $urlGenerator;$this->csrfTokenManager = $csrfTokenManager;$this->passwordHasher = $passwordHasher;$this->router = $router;$this->tokenStorage = $tokenStorage;$this->servizi = $servizi;}public function supports(Request $request): bool{return 'home_login' === $request->attributes->get('_route')&& $request->isMethod('POST');}/*** Used to upgrade (rehash) the user's password automatically over time.*/public function getPassword($credentials): ?string{return $credentials['password'];}public function onAuthenticationSuccess(Request $request, TokenInterface $token, string $firewallName): ?Response{/*$url = $this->router->generate('accedi_autenticazione_2_fattori');return new RedirectResponse($url);*/$this->servizi->logger->emergency('onAuthenticationSuccess');/** @var User $userLoggato */$userLoggato = $token->getUser();if($userLoggato) {//Verifico se c'era un carrello memorizzato e lo associo all'utente che ha effettuato il loginif($userLoggato->getTwofactorSharedSecret() && $userLoggato->getTwofactorSharedSecret() != '' && $userLoggato->getTwofactorSharedSecret() != null){$request->getSession()->set("2factRequested", 1);$request->getSession()->save();}else{$em = $this->servizi->doctrine->getManager();$userLoggato->setLastLogin(new \Datetime());$em->persist($userLoggato);$em->flush();}$secret = '';if ($this->tokenStorage->getToken()->hasAttribute('secret'))$secret = $this->tokenStorage->getToken()->getAttribute('secret');if ($secret != '') {$carrello = $this->servizi->doctrine->getRepository(Carrello::class)->findOneBy(array('secret' => $secret));$funzioniCarrello = new FunzioniCarrello($this->servizi->doctrine, $this->servizi->impostazioni, $this->servizi);$funzioniCarrello->SpostaERicalcolaCarrello($carrello, $userLoggato, null, $userLoggato->getAgente() ? $userLoggato : null);}}return new RedirectResponse($this->router->generate('homepage'));/*if ($targetPath = $this->getTargetPath($request->getSession(), $providerKey)) {return new RedirectResponse($targetPath);}return new RedirectResponse($this->router->generate('homepage'));*/}protected function getLoginUrl(Request $request): string{return $this->urlGenerator->generate('home_login');}public function authenticate(Request $request): Passport{$password = $request->request->get('password');$username = $request->request->get('username');$csrfToken = $request->request->get('csrf_token');// ... validate no parameter is emptyreturn new Passport(new UserBadge($username),new PasswordCredentials($password),[new CsrfTokenBadge('authenticate', $csrfToken)]);}}