src/Security/AppAuthenticator.php line 35

Open in your IDE?
  1. <?php
  2. namespace App\Security;
  3. use Symfony\Component\HttpFoundation\RedirectResponse;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  7. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  8. use Symfony\Component\Security\Core\Security;
  9. use Symfony\Component\Security\Http\Authenticator\AbstractLoginFormAuthenticator;
  10. use Symfony\Component\Security\Http\Authenticator\Passport\Badge\CsrfTokenBadge;
  11. use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge;
  12. use Symfony\Component\Security\Http\Authenticator\Passport\Credentials\PasswordCredentials;
  13. use Symfony\Component\Security\Http\Authenticator\Passport\Passport;
  14. use Symfony\Component\Security\Http\Util\TargetPathTrait;
  15. use App\Services\user\LoginManager;
  16. use App\Types\param\TypeParametre;
  17. use App\Types\user\TypeCodeProfil;
  18. use App\Types\user\TypeEtat;
  19. use App\Entity\user\Connexion;
  20. use App\Entity\user\Utilisateur;
  21. use App\ControllerModel\user\paramUtilTrait;
  22. use App\Repository\user\UtilisateurRepository;
  23. use App\Repository\param\ParamRepository;
  24. use App\Repository\user\AbonneRepository;
  25. use App\Repository\stock\ProduitRepository;
  26. Use App\ControllerModel\stock\TypeManager;
  27. Use App\Types\user\TypeTable;
  28. use App\Services\param\ParametreManager;
  29. use Doctrine\ORM\EntityManagerInterface;
  30. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  31. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  32. class AppAuthenticator extends AbstractLoginFormAuthenticator
  33. {
  34.     use TargetPathTrait;
  35.     public const LOGIN_ROUTE 'app_login';
  36.     private UrlGeneratorInterface $urlGenerator;
  37.     public function __construct(UrlGeneratorInterface $urlGeneratorUtilisateurRepository $reposiUtil,  LoginManager $loginManager ,  ParamRepository $paramRepository ParametreManager $parametreManager AbonneRepository $abonneRepository,
  38.     EntityManagerInterface $emProduitRepository $produitRepositoryTypeManager $typeManagerUserPasswordHasherInterface $passwordHasher,Security $security
  39.     ParamRepository $paramRepositor )
  40.     {
  41.         $this->urlGenerator $urlGenerator;
  42.         $this->reposiUtil $reposiUtil ;
  43.         $this->loginManager $loginManager  ;
  44.         $this->paramRepository $paramRepository  ;
  45.         $this->parametreManager $parametreManager  ;
  46.         $this->abonneRepository $abonneRepository;
  47.         $this->em =$em;
  48.         $this->produitRepository $produitRepository;
  49.         $this->typeManager $typeManager;
  50.         $this->passwordHasher $passwordHasher
  51.         $this->security $security;
  52.        
  53.        
  54.     }
  55.     public function authenticate(Request $request): Passport
  56.     {
  57.       
  58.         $username $request->request->get('username''');
  59.         $password $request->request->get('password''');
  60.        
  61.         return new Passport(
  62.             new UserBadge($username),
  63.             new PasswordCredentials($request->request->get('password''')),
  64.             [
  65.                 new CsrfTokenBadge('authenticate'$request->request->get('_csrf_token')),
  66.             ]
  67.         );
  68.     }
  69.     public function onAuthenticationSuccess(Request $requestTokenInterface $tokenstring $firewallName): ?Response
  70.     {
  71.         if ($targetPath $this->getTargetPath($request->getSession(), $firewallName)) {
  72.             return new RedirectResponse($targetPath);
  73.         }
  74.         $objectUser = new Utilisateur();
  75.       
  76.         $username $request->request->get('username''');
  77.         $password $request->request->get('password''');
  78.          //Traitement
  79.          $maxAttempt $this->loginManager ->getMaxAttempt($this->paramRepository );
  80.          $longueurTel $this->loginManager ->getLengthTel($this->paramRepository );
  81.          $adresseWeb $request->getHost();
  82.          
  83.          $objetAbonne =  $this->abonneRepository ->findOneBy(['adresseWeb'=>$adresseWeb]);
  84.          //$objetAbonne = $this->em->getRepository($this->userBundle . 'Abonne')->find(10);
  85.          
  86.          if($objetAbonne == null )
  87.              $abonneId0;
  88.          else
  89.              $abonneId$objetAbonne->getId();
  90.         
  91.  
  92.        //$listeProduit = $produitRepository->getAllProduitAccueil($abonneId);
  93.        // $listeAgent = $this->em->getRepository($this->stockBundle . 'Fournisseur')->findBy(["abonne"=>$objetAbonne, "typeFournisseur"=>1, "etatFournisseur"=>1]);
  94.        // $listeAgent = $fournisseurRepository->getAllFournisseur(1, $abonneId); //findBy(["abonne"=>$objetAbonne, "typeFournisseur"=>1, "etatFournisseur"=>1]);
  95.        // var_dump($request->request->get('password', ''));exit;
  96.        $maxAttempt $this->loginManager ->getMaxAttempt($this->paramRepository );
  97.         $request->getSession()->set(Security::LAST_USERNAME$username);
  98.         if (($username != NULL) && ($password != NULL)  ) {
  99.             // formulaire rempli
  100.             $user $this->security->getUser();
  101.             
  102.             if ($user == NULL) { // utilisateur introuvable avec le email et l password saisie
  103.                //$this->logMessage .=' [ USER INTROUVABLE AVEC PASS ET TEL ] ';
  104.                 // on cherche l'utilisateur avec l emaol seulement
  105.                 $user $this->reposiUtil->getOneUserOnLoginForAttempt($username);
  106.                 if ($user != NULL) { // L'utilisateur existe ds la db,il y a erreur de saisie de  password
  107.                    // $this->logMessage .=' [ USER TROUVE AVEC  TEL UNIQUEMENT ] ';
  108.                     if ($user->getAttempt() >= $maxAttempt ) { // user deja bloque
  109.                         //$this->logMessage .= ' [ USER ( ' . $username . ' ) TENTATIF DE CONNEXION COMPTE ANNEXE ] ';
  110.                         //$this->get('session')->getFlashBag()->add('login.form.ivalide', 'Votre compte est bloqué');
  111.                         //$this->loginManager ->writeLogMessage($this->logMessage);
  112.                         //return $this->redirect($this->generateUrl('app_admin_user_login'));
  113.                         return new RedirectResponse($this->urlGenerator->generate('app_login'));
  114.                     }                   
  115.                     // si ce n'est pas  l'administrateur
  116.                     $profil $user->getProfil();
  117.                     
  118.                         
  119.                     if ($profil->getCode() != TypeCodeProfil::MAINTENANCE) {
  120.                         $user->setAttempt($user->getAttempt() + 1);
  121.                     }
  122.                     
  123.                     if ($user->getAttempt() >= $maxAttempt) { // nombre de tentatives > 3
  124.                         $user->setEtat(TypeEtat::BLOQUE);
  125.                         //$this->logMessage .= ' [ USER ( ' . $username . ' ) BLOQUE ] ';
  126.                         //$this->get('session')->getFlashBag()->add('login.user.lock', 'Votre compte est bloqué');
  127.                         // $this->loginManager ->writeLogMessage($this->logMessage);
  128.                         //return $this->redirect($this->generateUrl('app_admin_user_login'));
  129.                         return new RedirectResponse($this->urlGenerator->generate('app_login'));
  130.                     }
  131.                     
  132.                     $this->em->flush();
  133.                     //$this->get('session')->getFlashBag()->add('login.form.ivalide', 'Email et/ou mot de passe invalides');
  134.                 } else {
  135.                     //$this->get('session')->getFlashBag()->add('login.form.ivalide', 'Email et/ou mot de passe invalides');
  136.                 }
  137.                 //$this->logMessage .=' [ USER INTROUVABLE AVEC EMAIl UNIQUEMENT ] ';
  138.                 //$this->loginManager ->writeLogMessage($this->logMessage);
  139.             } else { // utilisateur trouve avec tel et password saisie
  140.                 if (($user->getAttempt() >= $maxAttempt) || ($user->getEtat() == TypeEtat::BLOQUE)) {
  141.                    // $this->logMessage .= ' [ USER ( ' . $username . ' ) BLOQUE TENTE DE SE CONNECTER ] ';
  142.                    // $this->get('session')->getFlashBag()->add('login.user.lock', 'Votre compte est bloqué');
  143.                     //$this->loginManager ->writeLogMessage($this->logMessage);
  144.                     //return $this->redirect($this->generateUrl('app_admin_user_login'));
  145.                     return new RedirectResponse($this->urlGenerator->generate('app_login'));
  146.                 }
  147.                 
  148.                 if (($user->getProfil()->getEtat() == TypeEtat::INACTIF) || ($user->getEtat() == TypeEtat::INACTIF)) {
  149.                     //$this->get('session')->getFlashBag()->add('login.user.lock', 'Votre compte est désactivé');
  150.                     //return $this->redirect($this->generateUrl('app_admin_user_login'));
  151.                     return new RedirectResponse($this->urlGenerator->generate('app_login'));
  152.                 }
  153.                 if($user->getTypeProdUser() !=){
  154.                     if($user->getTypeProdUser() != $request->request->get('prod') ){
  155.                         //var_dump($user->getTypeProdUser(),$request->request->get('prod'));exit;
  156.                             //$this->logMessage .= ' [ USER ( ' . $username . ' ) BLOQUE TENTE DE SE CONNECTE ] ';
  157.                         // $this->get('session')->getFlashBag()->add('login.user.prod.erreur', 'Vous ne pouvez pas accéder à cet espace. Revoir le produit choisi');
  158.                         // $this->loginManager ->writeLogMessage($this->logMessage);
  159.                         // return $this->redirect($this->generateUrl('app_admin_user_login'));
  160.                         return new RedirectResponse($this->urlGenerator->generate('app_login'));
  161.                     }
  162.                 }
  163.                 
  164.                 if($objetAbonne !=null){
  165.                     if ($user->getAbonne()->getId() != $abonneId) { // utilisateur d'abonne different
  166.                         //$this->logMessage .= ' [ USER ( ' . $username . ' ) BLOQUE TENTE DE SE CONNECTE ] ';
  167.                         // $this->get('session')->getFlashBag()->add('login.form.ivalide', 'Email et/ou mot de passe invalides');
  168.                         // $this->loginManager ->writeLogMessage($this->logMessage);
  169.                         // return $this->redirect($this->generateUrl('app_admin_user_login'));
  170.                         return new RedirectResponse($this->urlGenerator->generate('app_login'));
  171.                     }
  172.                 }
  173.                     
  174.                 
  175.                 $adresseIp $_SERVER['REMOTE_ADDR'];
  176.                 $user->setAdresseIp($adresseIp);
  177.                 $con = new Connexion($adresseIp);
  178.                 $con->setUtilisateur($user);
  179.                 $con->setAdresseIp($adresseIp);
  180.                 $user->addConnexion($con);
  181.                 $this->em->persist($con);
  182.                 $this->em->flush();
  183.                 
  184.                 $sessionData $this->createSessionDataUser($user$con->getId(),$request->request->get('prod'),  $this->typeManager$this->produitRepository);
  185.                 $this->loginManager ->setSessionData(LoginManager::SESSION_DATA_NAME$sessionData);
  186.                 $user->setAttempt(0);
  187.                 $user->setEtatConnecte(TRUE);
  188.                 
  189.                 
  190.                 if($user->getPassword() == '$2y$13$ZBF2sG0b8HDTU1acB0TMU.feRTtZsbYyruBmZxuuEyr542kVosedG') {
  191.                        // $this->get('session')->getFlashBag()->add('login.user.securite', 'Vous utilisez votre mot de passe par défaut, Pour votre sécurité changer le ! ');
  192.                        // return $this->redirect($this->generateUrl('app_admin_user_modifier_my_password'));
  193.                        return new RedirectResponse($this->urlGenerator->generate('app_admin_user_modifier_my_password'));
  194.                 }
  195.                 $this->em->flush();
  196.                 //$this->logMessage .= ' [ CONNEXION RÉUSSIE ] ';
  197.                // if (($restoreUrl != NULL) && (!empty($restoreUrl)) && (strlen($restoreUrl) > 0)) {
  198.                     //return $this->redirect($restoreUrl);
  199.                 //}
  200.                // var_dump(1);exit;
  201.                // if($user->getCaisse()!= null)
  202.                     //return $this->redirect($this->generateUrl('admin_vente_evoluee'));
  203.                // else
  204.                    // return $this->redirect($this->generateUrl('app_admin_user_home'));
  205.             }
  206.         }
  207.         // For example:
  208.         return new RedirectResponse($this->urlGenerator->generate('app_admin_user_home'));
  209.        // throw new \Exception('TODO: provide a valid redirect inside '.__FILE__);
  210.     }
  211.     protected function getLoginUrl(Request $request): string
  212.     {
  213.         return $this->urlGenerator->generate(self::LOGIN_ROUTE);
  214.     }
  215.      /*
  216.      * Création des variables de sessions
  217.      * 
  218.      * @param Utilisateur $user
  219.      * @param type $idConnexion
  220.      * @return type
  221.      */
  222.     private function createSessionDataUser(Utilisateur $user$idConnexion,$prodTypeManager $typeManager,ProduitRepository $produitRepository) {
  223.       
  224.          
  225.         if($prod == "")
  226.             $prod  0;
  227.         $rep = array();
  228.         $rep['isUser'] = TRUE;
  229.         $rep['isAbonne'] = FALSE;
  230.         $rep['nomTableConnecte'] = TypeTable::UTILISATEUR;
  231.         $rep['id'] = $user->getId();
  232.         $rep['prenoms'] = $user->getPrenoms();
  233.         $rep['nom'] = $user->getNom();
  234.         $rep['ip'] = $user->getAdresseIp();
  235.         $prix $produitRepository->find($prod);
  236.         $listeDepassement = array();//$this->em->getRepository($this->stockBundle . 'Depassement')->findBy(array("profil"=>$user->getProfil(),'etatDepassement'=> TypeEtat::APRODUIRE));
  237.         $i 0;
  238.         $rep['nbreDepassement'] = count($listeDepassement);
  239.         foreach ($listeDepassement as $unDepassement) {
  240.              $rep['depassement'][$i]['idfour'] =  $unDepassement->getFournisseur()->getId();
  241.              $rep['depassement'][$i]['nomfour'] =  $unDepassement->getFournisseur()->getNomFournisseur();
  242.              $rep['depassement'][$i]['id'] =  $unDepassement->getId();
  243.              $rep['depassement'][$i]['montant'] =  $unDepassement->getDepassementFournisseur();
  244.              $i++;
  245.         }
  246.         //var_dump(1);exit;
  247.         $tabConfiguration $user->getAbonne()->getConfiguration();
  248.         //var_dump($tabConfiguration);
  249.         
  250.         $tabConfiguration = (array)json_decode($tabConfiguration);
  251.         //var_dump($tabConfiguration);//exit;
  252.         if($tabConfiguration != NULL){
  253.             //$tabConfiguration = json_decode($configuration);
  254.             if(array_key_exists("stock_departemental"$tabConfiguration))
  255.                 $rep['stockDepartemental'] =  $tabConfiguration['stock_departemental'];
  256.             else
  257.                 $rep['stockDepartemental'] =  0;
  258.             if(array_key_exists("impression_thermique"$tabConfiguration))    
  259.                 $rep['impressionThermique'] = $tabConfiguration['impression_thermique'];
  260.             else
  261.                 $rep['impressionThermique'] =  0;
  262.         }else{
  263.             $rep['stockDepartemental'] =  0;
  264.             $rep['impressionThermique'] =  0;
  265.             
  266.         }
  267.         //var_dump($rep);exit;
  268.         if($prix !=null){
  269.             $prixProduit $prix->getMontantHtVente();
  270.             $nomProduit $prix->getNomProduit();
  271.         }else{
  272.             $prixProduit 0;
  273.             $nomProduit ="Tout";
  274.         }
  275.         $rep['prixCacao'] = $prixProduit ;
  276.         $rep['abonneId'] = $user->getAbonne()->getId();
  277.         $rep['nomTypeAbonne'] = $user->getAbonne()->getTypeAbonne()->getNom();
  278.         $rep['TypeAbonneId'] = $user->getAbonne()->getTypeAbonne()->getId();
  279.         
  280.         $rep['typePresentation'] = $user->getAbonne()->getTypePresentation(); 
  281.         if($user->getAbonne()->getSiPrincipale() == && $user->getAbonne()->getPartenaire() !=null
  282.             $rep['tsiPrincipale'] = 2
  283.         else
  284.             $rep['tsiPrincipale'] = $user->getAbonne()->getSiPrincipale();
  285.         $rep['siExploitation'] = $user->getAbonne()->getSiExploitation();
  286.         if($user->getAbonne()->getPays() == null)
  287.             $rep['paysId'] = 1;
  288.         else
  289.             $rep['paysId'] = $user->getAbonne()->getPays()->getId();
  290.         $rep['siPrincipale'] = $user->getAbonne()->getSiPrincipale(); 
  291.         if($user->getAbonne()->getTemplate() != null)
  292.             $rep['templateId'] = $user->getAbonne()->getTemplate()->getId();
  293.         else
  294.             $rep['templateId'] = 0;
  295.         $rep['idTypeAbonne'] = $user->getAbonne()->getTypeAbonne()->getId();
  296.         $rep['descriptionTypeAbonne'] = $user->getAbonne()->getTypeAbonne()->getDescription();
  297.         $rep['tel1'] = $user->getTel1();
  298.         $rep['produit_id'] = $prod;
  299.         $rep['nomProduit'] = $nomProduit ;
  300.         $rep['idConnexion'] = $idConnexion;
  301.         $rep['sexe'] = $typeManager->convertTypeSexe($user->getSexe());
  302.         $rep['username'] = $user->getUsername();
  303.         $rep['idProfil'] = $user->getProfil()->getId();
  304.         $rep['nbMessageNonLu'] = 0;
  305.         //$this->em->getRepository($this->messagerieBundle . 'Envoi')->getNbMessageNonLu(FALSE, $user->getId());
  306.         $rep['libelleProfil'] = $user->getProfil()->getNom();
  307.         $rep['codeProfil'] = $user->getProfil()->getCode();
  308.         $rep['tabIdActions'] = $user->getProfil()->getTabIdActions();
  309.         $rep['homeUrl'] = "";//$this->generateUrl('app_admin_user_index');
  310.         $limiteSuperficie $this->parametreManager->getValeurParametre(TypeParametre::LIMITE_SUPERFICIE_SAISON,1,$this->paramRepository);
  311.         if($limiteSuperficie != null)
  312.             $rep['limiteSuperficie'] = $limiteSuperficie;
  313.         else
  314.             $rep['limiteSuperficie'] = 5;
  315.         
  316.         $limiteProducteur $this->parametreManager->getValeurParametre(TypeParametre::LIMITE_PRODUCTEUR,1,$this->paramRepository);
  317.         if($limiteProducteur != null)
  318.             $rep['limiteProducteur'] = $limiteProducteur;
  319.         else
  320.             $rep['limiteSuperficie'] = 2000;
  321.        
  322.         //var_dump($rep);exit;
  323.         return $rep;
  324.     }
  325. }