src/Security/LoginFormAuthenticator.php line 78

Open in your IDE?
  1. <?php
  2. namespace App\Security;
  3. /* 
  4.     ---------------------------------------------------
  5.     v0.0001
  6.     28.9.2020 (Maša)
  7.     - prva verzija .. dodan tehnolog
  8.     ---------------------------------------------------
  9.     v0.0002
  10.     22.2.2021 (Borut)
  11.     Dodan modul v tabeli zaposleni
  12.     ---------------------------------------------------
  13. */
  14. use Symfony\Component\HttpFoundation\RedirectResponse;
  15. use Symfony\Component\HttpFoundation\Request;
  16. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  17. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  18. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  19. use Symfony\Component\Security\Core\Exception\CustomUserMessageAuthenticationException;
  20. use Symfony\Component\Security\Core\Exception\InvalidCsrfTokenException;
  21. use Symfony\Component\Security\Core\Security;
  22. use Symfony\Component\Security\Core\User\UserInterface;
  23. use Symfony\Component\Security\Core\User\UserProviderInterface;
  24. use Symfony\Component\Security\Csrf\CsrfToken;
  25. use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
  26. use Symfony\Component\Security\Guard\Authenticator\AbstractFormLoginAuthenticator;
  27. use Symfony\Component\Security\Guard\PasswordAuthenticatedInterface;
  28. use Symfony\Component\Security\Http\Util\TargetPathTrait;
  29. use Doctrine\DBAL\Connection;
  30. class LoginFormAuthenticator extends AbstractFormLoginAuthenticator implements PasswordAuthenticatedInterface
  31. {
  32.     use TargetPathTrait;
  33.     private $urlGenerator;
  34.     private $csrfTokenManager;
  35.     private $passwordEncoder;
  36.     private $dbconnection;
  37.     public function __construct(UrlGeneratorInterface $urlGeneratorCsrfTokenManagerInterface $csrfTokenManagerUserPasswordEncoderInterface $passwordEncoderConnection $connection)
  38.     {
  39.         $this->urlGenerator $urlGenerator;
  40.         $this->csrfTokenManager $csrfTokenManager;
  41.         $this->passwordEncoder $passwordEncoder;
  42.         $this->dbconnection $connection;
  43.     }
  44.     public function supports(Request $request)
  45.     {
  46.         return 'app_login' === $request->attributes->get('_route')
  47.             && $request->isMethod('POST');
  48.     }
  49.     public function getCredentials(Request $request)
  50.     {
  51.         $credentials = [
  52.             'username' => $request->request->get('username'),
  53.             'password' => $request->request->get('password'),
  54.             'csrf_token' => $request->request->get('_csrf_token'),
  55.         ];
  56.         $request->getSession()->set(
  57.             Security::LAST_USERNAME,
  58.             $credentials['username']
  59.         );
  60.         return $credentials;
  61.     }
  62.     public function getUser($credentialsUserProviderInterface $userProvider)
  63.     {
  64.         $token = new CsrfToken('authenticate'$credentials['csrf_token']);
  65.         if (!$this->csrfTokenManager->isTokenValid($token)) {
  66.             throw new InvalidCsrfTokenException();
  67.         }
  68.         // Load / create our user however you need.
  69.         // You can do this by calling the user provider, or with custom logic here.
  70.         //$roles[] = array();        
  71.         $lUserName $credentials['username'];
  72.         $lQuery "SELECT * FROM users u, companies c WHERE u.user_username ='$lUserName' AND u.user_status = 1 AND u.company_id = c.company_id";
  73.         
  74.         $lSqlUser $this->dbconnection->fetchAllAssociative($lQuery);
  75.         foreach ($lSqlUser as $userdata)
  76.         {   
  77.              $lQuery "SELECT * FROM actions WHERE ROLE_SUPERUSER = 1";
  78.                 $lSqlAkcije $this->dbconnection->fetchAllAssociative($lQuery);
  79.                 foreach ($lSqlAkcije as $akcije)
  80.                 {
  81.                     $roles[] = $akcije['akcije_rola'];
  82.                 }
  83.             
  84.             $user = new User();
  85.             $user->setUsername($userdata['user_username']);
  86.             $user->setId($userdata['user_id']);
  87.             $user->setName($userdata['user_name'] . ' ' $userdata['user_surname']);
  88.             $user->setPassword($userdata['user_password']);
  89.             $user->setEmail($userdata['user_email']);
  90.             $user->setModul($userdata['user_modul']);
  91.             $user->setCompany($userdata['company_id']);
  92.             $user->setFolder($userdata['company_folder']);
  93.             $user->setCompanyName($userdata['company_name']);
  94.             
  95.             
  96.             $roles[] ='ROLE_ADMIN';
  97.             $user->setRoles($roles);
  98.             
  99.             //file_put_contents("session.log", "/var/www/nota/uploads/moxiemanager/company/". $user->getFolder() . "/files/");
  100.             $_SESSION['filesystem.rootpath']="/var/www/nota/public/vendors/tinymce/js/tinymce/plugins/moxiemanager/data/files/"$user->getFolder();
  101.             //$_SESSION['filesystem.local.wwwroot']="/var/www/html/";
  102.         }
  103.         
  104.         if(empty($user)) 
  105.         {
  106.             throw new CustomUserMessageAuthenticationException('Uporabnik ne obstaja.');
  107.         }
  108.         
  109.         //$user = $userProvider->loadUserByUsername($credentials['username']);
  110.         
  111.         
  112.         //$user->setName('Borut Kacin');
  113.         //$user->setEmail('borut.kacin@gmail.com');
  114.         //$user->setId('10');
  115.         
  116.         /*if (!$user) {
  117.             // fail authentication with a custom error
  118.             throw new CustomUserMessageAuthenticationException('Uporabnik ne obstaja.');
  119.         }*/
  120.         return $user;
  121.     }
  122.     public function checkCredentials($credentialsUserInterface $user)
  123.     {
  124.         //dd($user);
  125.         //file_put_contents("avtorizacija5.log", print_r($user, true));
  126.         //file_put_contents("avtorizacija6.log", print_r($credentials, true));
  127.         
  128.         //$bla = $this->passwordEncoder->isPasswordValid($user, $credentials['password']);
  129.         //file_put_contents("avtorizacija7.log", print_r($bla, true));
  130.         //return $this->passwordEncoder->isPasswordValid($user, $credentials['password']);
  131.         $valid false;
  132.         
  133.         
  134.         file_put_contents("user.log"print_r($user->getUserName(), true));
  135.         
  136.         
  137.             
  138.         $valid $this->passwordEncoder->isPasswordValid($user$credentials['password']);
  139.         
  140.         return $valid;
  141.     }
  142.     /**
  143.      * Used to upgrade (rehash) the user's password automatically over time.
  144.      */
  145.     public function getPassword($credentials): ?string
  146.     {
  147.         return $credentials['password'];
  148.     }
  149.     public function onAuthenticationSuccess(Request $requestTokenInterface $token$providerKey)
  150.     {
  151.         
  152.         if ($targetPath $this->getTargetPath($request->getSession(), $providerKey)) {
  153.             return new RedirectResponse($targetPath);
  154.         }
  155.         return new RedirectResponse($this->urlGenerator->generate('content'));
  156.         // For example : return new RedirectResponse($this->urlGenerator->generate('some_route'));
  157.         throw new \Exception('TODO: provide a valid redirect inside '.__FILE__);
  158.     }
  159.     protected function getLoginUrl()
  160.     {
  161.         return $this->urlGenerator->generate('app_login');
  162.     }
  163. }