src/Security/LoginFormAuthenticator.php line 25

Open in your IDE?
  1. <?php
  2. namespace App\Security;
  3. use Symfony\Component\HttpFoundation\RedirectResponse;
  4. use Symfony\Component\Security\Core\Exception\AuthenticationException;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\HttpFoundation\JsonResponse;
  8. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  9. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  10. use Symfony\Component\Security\Core\Security;
  11. use Symfony\Component\Security\Http\Authenticator\AbstractLoginFormAuthenticator;
  12. use Symfony\Component\Security\Http\Authenticator\Passport\Badge\CsrfTokenBadge;
  13. use Symfony\Component\Security\Http\Authenticator\Passport\Badge\RememberMeBadge;
  14. use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge;
  15. use Symfony\Component\Security\Http\Authenticator\Passport\Credentials\PasswordCredentials;
  16. use Symfony\Component\Security\Http\Authenticator\Passport\Passport;
  17. use Symfony\Component\Security\Http\Util\TargetPathTrait;
  18. use Doctrine\Persistence\ManagerRegistry;
  19. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  20. use App\Entity\Slave\User;
  21. use App\Service\CompanyService;
  22. class LoginFormAuthenticator extends AbstractLoginFormAuthenticator
  23. {
  24.     use TargetPathTrait;
  25.     public const LOGIN_CHECK_ROUTE 'login_check';
  26.     public const LOGIN_ROUTE 'login';
  27.     public const LOGIN_REDIRECT_ROUTE 'login_redirect';
  28.     public const ADMIN_ROUTE 'admin_index';
  29.     public const USER_ROUTE 'user_index';
  30.     private UrlGeneratorInterface $urlGenerator;
  31.     private ManagerRegistry $mr;
  32.     private ParameterBagInterface $params;
  33.     public function __construct(UrlGeneratorInterface $urlGeneratorManagerRegistry $managerRegistryParameterBagInterface $params)
  34.     {
  35.         $this->urlGenerator $urlGenerator;
  36.         $this->mr $managerRegistry;
  37.         $this->params $params;
  38.     }
  39.     public function supports(Request $request): bool
  40.     {
  41.         return self::LOGIN_CHECK_ROUTE === $request->attributes->get('_route') && $request->isMethod('POST');
  42.     }
  43.     public function authenticate(Request $request): Passport
  44.     {
  45.         $email $request->request->get('email''');
  46.         $code $request->request->get('code''');
  47.         if($code == null && isset($_COOKIE["eposm_company_code"]))
  48.             $code $_COOKIE["eposm_company_code"];
  49.         $request->getSession()->set('companyCode'$code);
  50.         $request->getSession()->set(Security::LAST_USERNAME$email);
  51.         if($email != "admin"){
  52.             if($code != null){
  53.                 $emMaster $this->mr->getManager('master');
  54.                 $company $emMaster->getRepository('App\Entity\Master\Company')->findOneByCode($code);
  55.                 setcookie("eposm_company_code"$codetime() + 1209600"/");
  56.                 $request->getSession()->set('companyId'$company->getId());
  57.                 $em CompanyService::getSlaveManagerByCompany($this->mr$this->params$company);
  58.                 $userBadge = new UserBadge($email);
  59.             }
  60.             else{
  61.                 $userBadge = new UserBadge($email, function() { return false; });
  62.                 forceLogout();
  63.                 return $this->urlGenerator->generate(self::LOGIN_REDIRECT_ROUTE);
  64.             }
  65.         }
  66.         else {
  67.             $userBadge = new UserBadge($email);
  68.         }
  69.         return new Passport(
  70.             $userBadge,
  71.             new PasswordCredentials($request->request->get('password''')),
  72.             [
  73.                 new CsrfTokenBadge('authenticate'$request->request->get('_csrf_token')),
  74.                 new RememberMeBadge(),
  75.             ]
  76.         );
  77.     }
  78.     public function onAuthenticationSuccess(Request $requestTokenInterface $tokenstring $firewallName): ?Response
  79.     {
  80.         if($token->getUser() instanceof User){
  81.             if($token->getUser()->getRole() == "ROLE_USER")
  82.                 return new RedirectResponse($this->urlGenerator->generate(self::USER_ROUTE));
  83.             else
  84.                 return new RedirectResponse($this->urlGenerator->generate(self::LOGIN_ROUTE, array('companyCode' => $request->getSession()->get('companyCode'))));
  85.         }
  86.         else{
  87.             if(in_array("ROLE_ADMIN"$token->getUser()->getRoles()))
  88.                 return new RedirectResponse($this->urlGenerator->generate(self::ADMIN_ROUTE));
  89.         }
  90.         return $this->urlGenerator->generate(self::LOGIN_ROUTE, array('companyCode' => $request->getSession()->get('companyCode')));
  91.     }
  92.     protected function getLoginUrl(Request $request): string
  93.     {
  94.         return $this->urlGenerator->generate(self::LOGIN_ROUTE, array('companyCode' => $request->getSession()->get('companyCode')));
  95.     }
  96.     protected function forceLogout(): void
  97.     {
  98.         $logoutEvent = new LogoutEvent($this->requestStack->getCurrentRequest(), $this->tokenStorage->getToken());
  99.         $this->eventDispatcher->dispatch($logoutEvent);
  100.         $this->tokenStorage->setToken(null);
  101.         $response = new Response();
  102.         $response->headers->clearCookie('REMEMBERME');
  103.         $response->send();
  104.     }
  105. }