src/Controller/AuthentificationController.php line 165

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\utilisateur\UtilisateurProfil;
  4. use App\Entity\utilisateur\Utilisateurs;
  5. use App\Form\administration\ResetMdpFormType;
  6. use App\Form\AuthentificationFormType;
  7. use App\Form\ForgetFormType;
  8. use App\Form\ResetFormType;
  9. use App\Helpers\Helpers;
  10. use App\Repository\administration\UtilisateurSocieteRepository;
  11. use App\Repository\administration\UtilisateursRepository;
  12. use App\Repository\Utilisateur\UtilisateurSocieteAssociationRepository;
  13. use Doctrine\ORM\Mapping as ORM;
  14. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  15. use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
  16. use Symfony\Component\Routing\Annotation\Route;
  17. use Symfony\Component\HttpFoundation\Request;
  18. use Symfony\Component\HttpFoundation\Response;
  19. use Doctrine\ORM\EntityManagerInterface;
  20. use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
  21. use Symfony\Component\Security\Core\Exception\AccessDeniedException;
  22. use Symfony\Contracts\Translation\TranslatorInterface;
  23. use Symfony\Component\Mailer\MailerInterface;
  24. use Symfony\Component\Mime\Email;
  25. class AuthentificationController extends AbstractController
  26. {
  27.     /**
  28.      * @ORM\Column(type="string")
  29.      */
  30.     private $objectManager;
  31.     public function __construct(EntityManagerInterface $objectManager) {
  32.         $this->objectManager $objectManager;
  33.     }
  34.     public function setConnectionSessions($res$utilisateur$utilisateurSocieteAssociation$repository)
  35.     {
  36.         $token = new UsernamePasswordToken($resnull'main'$utilisateur->getRoles());
  37.         $this->get('security.token_storage')->setToken($token);
  38.         $this->get('session')->set('_security_main'serialize($token));
  39.         $utilisateurProfil = new UtilisateurProfil($res->getFkUtilisateurProfil()->getIdUtilisateurProfil(),$res->getFkUtilisateurProfil()->getLibelle());
  40.         $this->get('session')->set('profil'$res->getFkUtilisateurProfil());
  41.         $this->get('session')->set('societe'$res->getFkUtilisateurSociete());
  42.         $arrayListeSocieteAssocie = [$res->getFkUtilisateurSociete()->getIdUtilisateurSociete()];
  43.         $listeSocieteAssocie $utilisateurSocieteAssociation->findByFkUtilisateurSocieteIdParent($res->getFkUtilisateurSociete()->getIdUtilisateurSociete());
  44.         foreach($listeSocieteAssocie as $associe){
  45.             $arrayListeSocieteAssocie[] = $associe->getFkUtilisateurSocieteId()->getIdUtilisateurSociete();
  46.         }
  47.         $this->get('session')->set('ListeDeSesSociete'$arrayListeSocieteAssocie);
  48.         $menu $repository->getUtilisateurMenu($res->getIdUtilisateur(),$utilisateurProfil->getIdUtilisateurProfil());
  49.         $this->get('session')->set('menu',$menu);
  50.         $this->get('session')->set('user',$res->getIdUtilisateur());
  51.         $this->get('session')->set('accesMemo'$res->getAccesMemo());
  52.         // test
  53. //                $this->get('session')->set('notification',$res);
  54.     }
  55.     /**
  56.      * @Route("/{_locale<%app.supported_locales%>}/login", name="login")
  57.      * @param Request $request
  58.      * @param UtilisateursRepository $repository
  59.      * @param TranslatorInterface $translator
  60.      * @param UtilisateurSocieteAssociationRepository $utilisateurSocieteAssociation
  61.      * @return Response
  62.      * @throws \Doctrine\DBAL\Driver\Exception
  63.      * @throws \Doctrine\DBAL\Exception
  64.      */
  65.     public function authentification(Request $requestUtilisateursRepository $repository,TranslatorInterface $translatorUtilisateurSocieteAssociationRepository $utilisateurSocieteAssociation): Response
  66.     {
  67.         $session $request->getSession();
  68.         $em $this->getDoctrine()->getManager();
  69.         if ($session->has('societe')){
  70.             return $this->render('home/index.html.twig', [
  71.                 'controller_name' => 'HomeController',
  72.             ]);
  73.         }
  74.         $utilisateur = new Utilisateurs();
  75.         $form $this->createForm(AuthentificationFormType::class, $utilisateur);
  76.         $form->handleRequest($request);
  77.         if ($form->isSubmitted() && $form->isValid()) {
  78.             $resLogin $repository->logIn($utilisateur);
  79.             $res $resLogin[0];
  80.             $firstConnection $resLogin[1];
  81.             $firstConnection false;
  82.             if($firstConnection == true) {
  83.                 $this->get('session')->set('userTmp'$res);
  84.                 return $this->redirectToRoute('reset_mdp');
  85.             }
  86.             else if($res) {
  87.                 //Création tous les sessions de connexion
  88.                 $this->setConnectionSessions($res$utilisateur$utilisateurSocieteAssociation$repository);
  89.                 return $this->redirectToRoute('index');
  90.             }
  91.             elseif ($form->isSubmitted()) {
  92.                 //Account deactivation block following 3 password errors
  93.                 $userByLogin $repository->findOneBy(['identifiant' => $utilisateur->getIdentifiant()]);
  94.                 if(!empty($userByLogin)) {
  95.                     $nbrEssay $userByLogin->getNbEssaiAvantBloquage();
  96.                     if($nbrEssay 0) {
  97.                         $userByLogin->setNbEssaiAvantBloquage($nbrEssay 1);
  98.                         if(($nbrEssay 1) == 0) {
  99.                             $userByLogin->setCompteDesactive(true);
  100.                         }
  101.                         $em->persist($userByLogin);
  102.                         $em->flush();
  103.                     }
  104.                     if($userByLogin->getNbEssaiAvantBloquage() == 0) {
  105.                         $this->addFlash('danger'$translator->trans('administration.desactivecompte'));
  106.                     }
  107.                     else {
  108.                         $this->addFlash('danger'$translator->trans('message.error_auth'));
  109.                     }
  110.                 }
  111.                 else {
  112.                     $this->addFlash('danger'$translator->trans('message.error_auth'));
  113.                 }
  114.             }
  115.         }
  116.         return $this->render('authentification/index.html.twig', ['form' => $form->createView()]);
  117.     }
  118.     /**
  119.      * @Route("/{_locale<%app.supported_locales%>}/logout", name="app_logout", methods={"GET"})
  120.      */
  121.     public function logout()
  122.     {
  123.     }
  124.     /**
  125.      * @Route("/{_locale<%app.supported_locales%>}/forget", name="forget")
  126.      * @param Request $request
  127.      * @param UtilisateursRepository $repository
  128.      * @param TranslatorInterface $translator
  129.      * @param MailerInterface $mailer
  130.      * @return Response
  131.      */
  132.     public function forget(Request $requestUtilisateursRepository $repository,TranslatorInterface $translatorMailerInterface $mailer) : Response
  133.     {
  134.         $utilisateur = new Utilisateurs();
  135.         $form $this->createForm(ForgetFormType::class, $utilisateur);
  136.         $form->handleRequest($request);
  137.         if ($form->isSubmitted() && $form->isValid()) {
  138.             $res $repository->findOneBy(['mail' => $utilisateur->getMail()]);
  139.             if($res){
  140.                 $t $res->getIdUtilisateur().'|'.date('Y-m-d H:i');
  141.                 $t strtr(base64_encode(addslashes(serialize($t))), '+/=''-_,');
  142.                 $lien $_SERVER["SERVER_NAME"]."/".$request->getLocale()."/reset?t=".$t;
  143.                 $message = new Email();
  144.                 $message->from($_ENV['MAILER_SENDER']);
  145.                 $message->to($utilisateur->getMail());
  146.                 $message->subject($translator->trans('mail.objet.forget',[],'mail+intl-icu'));
  147.                 $corps $translator->trans('mail.forget',['%lien%' =>  $lien],'mail+intl-icu');
  148.                 $corps utf8_decode(str_replace('%lien%',$lien,$corps));
  149.                 $message->html($corps,'text/html','UTF-8');
  150.                 try{
  151.                     $mailer->send($message);
  152.                     $this->addFlash('success'$translator->trans('message.forgetsuccess'));
  153.                     // return $this->redirectToRoute('login');
  154.                 } catch (TransportExceptionInterface $e) {
  155.                     $this->addFlash('danger'$translator->trans('message.forgeterror'));
  156.                 }
  157.             } else {
  158.                 $this->addFlash('danger'$translator->trans('message.forgeterror'));
  159.             }
  160.         }
  161.         return $this->render('authentification/forget.html.twig', ['form' => $form->createView()]);
  162.     }
  163.     /**
  164.      * @Route("/{_locale<%app.supported_locales%>}/reset", name="reset")
  165.      * @param Request $request
  166.      * @param TranslatorInterface $translator
  167.      * @return Response
  168.      */
  169.     public function reset(Request $requestHelpers $helpersTranslatorInterface $translator) : Response
  170.     {
  171.         if(empty($_GET['t'])){
  172.             return $this->redirectToRoute('login');
  173.         } else {
  174.             $t explode('|',unserialize(stripslashes(base64_decode(strtr($_GET['t'], '-_,','+/=')))));
  175.             $id $t[0];
  176.             $date $t[1];
  177.             if((strtotime(date('Y-m-d H:i')) - strtotime($date))/ 60 60){
  178.                 throw new AccessDeniedException('');
  179.             } else {
  180.                 $utilisateur = new Utilisateurs();
  181.                 $utilisateur->setIdUtilisateur($id);
  182.                 $form $this->createForm(ResetFormType::class, $utilisateur);
  183.                 $form->handleRequest($request);
  184.                 if($form->isSubmitted() && $form->isValid()) {
  185.                     $resetMdpForm $request->get('reset_form');
  186.                     //Si le mot de passe est valide
  187.                     $validationMdp $helpers->checkMdp(null$resetMdpForm['newmotdepasse'], $resetMdpForm['confirmmotdepasse'], 14false);
  188.                     if($validationMdp) {
  189.                         $entityManager $this->getDoctrine()->getManager();
  190.                         $utilisateur $entityManager->getRepository(Utilisateurs::class)->find($form->get('idUtilisateur')->getData());
  191.                         $utilisateur->setMotDePasse(sha1($form->get('confirmmotdepasse')->getData()));
  192.                         $entityManager->flush();
  193.                         return $this->redirectToRoute('login');
  194.                     }
  195.                     else {
  196.                         $this->addFlash('danger'$translator->trans('message.error_auth'));
  197.                     }
  198.                 }
  199.                 return $this->render('authentification/reset.html.twig', ['form' => $form->createView()]);
  200.             }
  201.         }
  202.     }
  203.     /**
  204.      * Méthode pour reset mdp 1er connexion
  205.      *
  206.      * @Route("/{_locale<%app.supported_locales%>}/reset_mdp", name="reset_mdp")
  207.      */
  208.     public function resetMdp(Request $requestHelpers $helpersTranslatorInterface $translatorUtilisateursRepository $utilisateurRepoUtilisateurSocieteAssociationRepository $utilisateurSocieteAssociationRepoUtilisateurSocieteRepository $utilisateurSocieteRepo)
  209.     {
  210.         $dateConnexion = new \DateTime();
  211.         $em $this->getDoctrine()->getManager();
  212.         $form $this->createForm(ResetMdpFormType::class);
  213.         $form->handleRequest($request);
  214.         //Si pas de connexion, mais accès direct via l'URL, on fait une redirection vers la page de login
  215.         if(empty($this->get('session')->get('userTmp'))) {
  216.             return $this->redirectToRoute('login');
  217.         }
  218.         if ($form->isSubmitted()) {
  219.             $resetMdpForm $request->get('reset_mdp_form');
  220.             //Si le mot de passe est valide
  221.             $validationMdp $helpers->checkMdp($resetMdpForm['identifiant'], $resetMdpForm['motdepasse'], $resetMdpForm['motdepasse2'], 14);
  222.             if($validationMdp) {
  223.                 $userTmp $this->get('session')->get('userTmp');
  224.                 $user $utilisateurRepo->findOneBy(['idUtilisateur' => $userTmp->getIdUtilisateur()]);
  225.                 $user->setIdentifiant($resetMdpForm['identifiant']);
  226.                 $user->setMail($resetMdpForm['identifiant']);
  227.                 $user->setMotDePasse(sha1($resetMdpForm['motdepasse']));
  228.                 $user->setDerniereConnexion($dateConnexion);
  229.                 $user->setAncienMotDePasse(NULL);
  230.                 $em->persist($user);
  231.                 $em->flush();
  232.                 //Création tous les sessions de connexion
  233.                 $utilisateur = new Utilisateurs();
  234.                 $this->setConnectionSessions($user$utilisateur$utilisateurSocieteAssociationRepo$utilisateurRepo);
  235.                 return $this->redirectToRoute('index');
  236.             }
  237.             else {
  238.                 $this->addFlash('danger'$translator->trans('message.error_auth'));
  239.             }
  240.         }
  241.         return $this->render('authentification/reset_mdp.html.twig', ['form' => $form->createView()]);
  242.     }
  243. }