src/Controller/Users/User/SecurityController.php line 241

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Users\User;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\Security\Core\SecurityContext;
  5. use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
  6. use App\Entity\Users\Adminuser\Parametreadmin;
  7. use App\Service\Servicetext\GeneralServicetext;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use App\Entity\Produit\Produit\Produit;
  10. use App\Entity\Users\User\Imgslide;
  11. use App\Entity\Produit\Produit\Souscategorie;
  12. use App\Entity\Projet\Projet\Offrespeciale;
  13. use App\Entity\Produit\Produit\Animationproduit;
  14. use App\Entity\Produit\Produit\Panier;
  15. use App\Entity\Produit\Produit\Coutlivraison;
  16. use App\Entity\Produit\Produit\Marqueproduit;
  17. use App\Entity\Produit\Service\Ville;
  18. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  19. use App\Service\Email\Singleemail;
  20. use App\Entity\Users\User\User;
  21. use App\Repository\Users\User\UserRepository;
  22. use App\Service\Users\User\UserService;
  23. use Symfony\Component\Security\Http\Event\LogoutEvent;
  24. use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
  25. use Symfony\Component\HttpFoundation\Response;
  26. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  27. class SecurityController extends AbstractController
  28. {
  29. private $params;
  30. private $_servicemail;
  31. private $_userService;
  32. private $_userRepository;
  33. public function __construct(ParameterBagInterface $paramsSingleemail $servicemailUserService $userServiceUserRepository $userRepository)
  34. {
  35.     $this->params $params;
  36.     $this->_servicemail $servicemail;
  37.     $this->_userService $userService;
  38.     $this->_userRepository $userRepository;
  39. }
  40. /*
  41. public function login(Request $request)
  42. {
  43.     $session = $request->getSession();
  44.     $em = $this->getDoctrine()->getManager();
  45.     // Si le visiteur est déjà identifié, on le redirige vers l'accueil
  46.     if($this->isGranted('IS_AUTHENTICATED_REMEMBERED')){
  47.         return $this->redirect($this->generateUrl('users_user_acces_plateforme'));
  48.     }
  49.     // On vérifie s'il y a des erreurs d'une précédente soumission du formulaire
  50.     
  51.     $paramlogosm = $em->getRepository(Parametreadmin::class)
  52.                        ->findOneBy(array('type'=>'logosm'));
  53.     $loginbg = $em->getRepository(Parametreadmin::class)
  54.                        ->findOneBy(array('type'=>'loginbg'));
  55.     return $this->render($service->getThemeDirectory().'/Users/User/Security/login.html.twig',
  56.     array('paramlogosm'=>$paramlogosm,'loginbg'=>$loginbg));
  57. }*/
  58. public function login(GeneralServicetext $serviceRequest $request)
  59. {
  60.     $em $this->getDoctrine()->getManager();
  61.     // Si le visiteur est déjà identifié, on le redirige vers l'accueil
  62.     if($this->getUser() != null){ //IS_AUTHENTICATED_REMEMBERED
  63.         return $this->redirect($this->generateUrl('users_user_acces_plateforme'));
  64.     }
  65.     //connexion sécurisé user.
  66.     $error_login '';
  67.     $last_username null;
  68.     if($request->getMethod() == 'POST' and $this->getUser() == null){
  69.         if (isset($_POST['_username']) and isset($_POST['_password'])){
  70.             $repository $em->getRepository(User::class);
  71.             $user $repository->findOneBy(array('username'=>$_POST['_username']));
  72.             
  73.             if($user != null)
  74.             {
  75.                 if($_POST['_password'] == $service->decrypt($user->getPassword(),$user->getSalt()))
  76.                 {
  77.                     $token = new UsernamePasswordToken($usernull'main'$user->getRoles());
  78.                     $this->get('security.token_storage')->setToken($token);
  79.                     $this->get('session')->set('_security_main'serialize($token));
  80.                     // Verifie si le cookie n existe pas
  81.                     if((!isset($_COOKIE["PIDSESSREM"]) or $_COOKIE["PIDSESSREM"] == 'delete') and isset($_POST['_remember_me']) and $_POST['_remember_me'] == true)
  82.                     {
  83.                         // Stock les infos du cookie
  84.                         $cookie_info = array(
  85.                             'name'  => 'PIDSESSREM',
  86.                             'value' => $service->encrypt($user->getUsername(),$this->params->get('saltcookies')),
  87.                             'time'  => time() + (3600 24 360)
  88.                         );
  89.                         // Cree le cookie
  90.                         setCookie($cookie_info['name'], $cookie_info['value'], $cookie_info['time'],'/');
  91.                         setCookie('PIDSESSDUR',$cookie_info['time'], $cookie_info['time'],'/');
  92.                     }
  93.                     $session $this->get('session');
  94.                     $target_link $session->get('_security.welcome.target_path');
  95.                     if($target_link != null and strlen($target_link) > 5)
  96.                     {
  97.                         return $this->redirect($target_link);
  98.                     }else{
  99.                         return $this->redirect($this->generateUrl('users_user_acces_plateforme'));
  100.                     }
  101.                 }else{
  102.                     $error_login '<span style="color: red;">Echec: Mot de passe ou Email invalide.</span>';
  103.                     $last_username $_POST['_username'];
  104.                 }
  105.             }else{
  106.                 $last_username $_POST['_username'];
  107.             }
  108.         }
  109.     }
  110.     $paramlogosm $em->getRepository(Parametreadmin::class)
  111.                        ->findOneBy(array('type'=>'logosm'));
  112.     $loginbg $em->getRepository(Parametreadmin::class)
  113.                        ->findOneBy(array('type'=>'loginbg'));
  114.     return $this->render($service->getThemeDirectory().'/Users/User/Security/login.html.twig',
  115.     array('last_username' => $last_username,'error'=> $error_login'paramlogosm'=>$paramlogosm,'loginbg'=>$loginbg));
  116. }
  117. public function accueilsite(GeneralServicetext $service)
  118. {
  119.     $em $this->getDoctrine()->getManager();
  120.     $session $this->get('session');
  121.     if($this->isGranted('IS_AUTHENTICATED_REMEMBERED')){ //dès qu'un utilisateur se connecte il est redirigé vers le path / qui exécute directement ce controlleur.
  122.         $user $this->getUser();
  123.         $dureelastvisite round((time() - $user->getDernierevisite())/60);
  124.         if($dureelastvisite >= 3)  //s'il ya plus de 3 minutes que utilisateur n'a pas actualisé sa sesion
  125.         {
  126.             $user->setDernierevisite(time());
  127.             $em->flush();
  128.         }
  129.         $idproduit $session->get('idproduit');
  130.         if($idproduit != null and $idproduit 0)
  131.         {
  132.             $produit $em->getRepository(Produit::class)
  133.                           ->find($idproduit);
  134.             if($produit != null){
  135.                 $produit->setUser($user);
  136.                 $em->flush();
  137.             }
  138.             return $this->redirect($this->generateUrl('produit_produit_ajouter_denouveaux_produits_courant_binplace',
  139.             array('position'=>2,'ide'=>$idproduit)));
  140.         }
  141.     }
  142.     
  143.     $liste_slide $em->getRepository(Imgslide::class)
  144.                           ->myFindAll();
  145.     $top_produit $em->getRepository(Produit::class)
  146.                           ->findBestProduit(10);
  147.     $produit_recommander $em->getRepository(Produit::class)
  148.                               ->findProduitRecommander(50);
  149.     $produit_recommander $service->selectEntities($produit_recommander10);
  150.     $top_scat $em->getRepository(Souscategorie::class)
  151.                           ->myfindAll();
  152.     $liste_offre $em->getRepository(Offrespeciale::class)
  153.                         ->allspecialesoffres(120);
  154.     $two_offert $service->selectEntities($liste_offre2);
  155.     $firstoffert $service->selectEntity($liste_offre);
  156.     $tabarray = array();
  157.     $liste_enregistrement = new \Doctrine\Common\Collections\ArrayCollection();
  158.     if($this->getUser() != null)
  159.     {
  160.         $enregistrement_user $em->getRepository(Animationproduit::class)
  161.                                   ->findBy(array('user'=>$this->getUser(),'enregistrer'=>1), array('date'=>'desc'),3);
  162.         foreach($enregistrement_user as $enreg)
  163.         {
  164.             $liste_enregistrement[] = $enreg;
  165.             array_push($tabarray$enreg->getId());
  166.         }
  167.     }
  168.     $all_enregistrement $em->getRepository(Animationproduit::class)
  169.                              ->findEnregistrement(10);
  170.     foreach($all_enregistrement as $enreg)
  171.     {
  172.         if(count($liste_enregistrement) < 10 /*and !in_array($enreg->getId(),$tabarray)*/)
  173.         {
  174.             if(!in_array($enreg->getId(),$tabarray))
  175.             {
  176.                 $liste_enregistrement[] = $enreg;
  177.             }
  178.         }else{
  179.             break;
  180.         }
  181.     }
  182.     $idcard 0;
  183.     if(isset($_COOKIE["PIDCARD"]) and $_COOKIE["PIDCARD"] != 'empty')
  184.     {
  185.         $idcard $_COOKIE["PIDCARD"];
  186.     }
  187.     $prod_panier = new \Doctrine\Common\Collections\ArrayCollection();
  188.     $oldpanier $em->getRepository(Panier::class)
  189.                      ->findOneBy(array('id'=>$idcard,'sousmis'=>0));
  190.     if($oldpanier == null and $this->getUser() != null)
  191.     {
  192.         $oldpanier $em->getRepository(Panier::class)
  193.                         ->findOneBy(array('user'=>$this->getUser(),'sousmis'=>0));
  194.     }
  195.     
  196.     if($oldpanier != null)
  197.     {
  198.         $prod_panier $oldpanier->getProduitpaniers();
  199.     }
  200.     $liste_offre $em->getRepository(Offrespeciale::class)
  201.                         ->allspecialesoffres(16);
  202.     $points_livraison $em->getRepository(Coutlivraison::class)
  203.                            ->getAllLivraisonPoints(1,6);
  204.     $aproposaccueil $em->getRepository(Parametreadmin::class)
  205.                          ->findOneBy(array('type'=>'aproposaccueil'));
  206.     $liste_marque $em->getRepository(Marqueproduit::class)
  207.                           ->myFindAll();
  208.     $liste_ville $em->getRepository(Ville::class)
  209.                       ->myFindAll(110);
  210.     $new_produit $em->getRepository(Produit::class)
  211.                       ->findNewProduit(10);
  212.     return $this->render($service->getThemeDirectory().'/Users/User/Security/accueilsite.html.twig',
  213.     array('liste_slide'=>$liste_slide,'top_produit'=>$top_produit,'top_scat'=>$top_scat,'firstoffert'=>$firstoffert,
  214.     'aproposaccueil'=>$aproposaccueil,'two_offert'=>$two_offert,'prod_panier'=>$prod_panier,'new_produit'=>$new_produit,
  215.     'produit_recommander'=>$produit_recommander,'oldpanier'=>$oldpanier,'liste_enregistrement'=>$liste_enregistrement,
  216.     'liste_offre'=>$liste_offre,'points_livraison'=>$points_livraison,'liste_marque'=>$liste_marque,'liste_ville'=>$liste_ville));
  217. }
  218. public function resetpassword($etapeGeneralServicetext $service)
  219. {
  220.     $em $this->getDoctrine()->getManager();
  221.     $session $this->get('session');
  222.     if($etape == 1)
  223.     {
  224.         if(isset($_POST['username']))
  225.         {
  226.             $repository $em->getRepository(User::class);
  227.             $user $repository->findOneBy(array('username'=>$_POST['username']));
  228.             if($user != null)
  229.             {
  230.                 $code $user->getDatebeg();
  231.                 if($service->email($user->getUsername()))
  232.                 {
  233.                     $siteweb $this->params->get('siteweb');
  234.                     $sitename $this->params->get('sitename');
  235.                     $emailadmin $this->params->get('emailadmin');
  236.                     $response $this->_servicemail->sendNotifEmail(
  237.                         $user->name(30), //Nom du destinataire
  238.                         $user->getUsername(), //Email Destinataire
  239.                         $user->name(30).', Vous avez demandé la réinitialisation du mot de passe de votre compte '.$sitename//Objet de l'email
  240.                         $user->name(30).', Vous avez demandé la réinitialisation du mot de passe de votre compte '.$sitename//Grand Titre de l'email
  241.                         'Le code est: <strong style="font-size: 25px;">'.$code.'</strong></br></br> Si vous n\'avez pas demandé cette action, Aucune action n\'est requise de votre part.',  //Contenu de l'email
  242.                         $siteweb.'/login'  //Lien à suivre
  243.                     );
  244.                     $type 1;
  245.                 }else{
  246.                     $type 2;
  247.                 }
  248.                 return $this->render($service->getThemeDirectory().'/Users/User/Security/resetpassword.html.twig',
  249.                 array('type' =>$type,'etape'=> $etape,'user'=>$user));
  250.             }else{
  251.                 echo 0;
  252.                 exit;
  253.             }
  254.         }else{
  255.             echo 0;
  256.             exit;
  257.         }
  258.     }else if($etape == 2)
  259.     {
  260.         if(isset($_POST['code']) and isset($_POST['id']))
  261.         {
  262.             $repository $em->getRepository(User::class);
  263.             $user $repository->find($_POST['id']);
  264.             if($user != null and $user->getDatebeg() == trim($_POST['code']))
  265.             {
  266.                 $session->set('reset_password'1);
  267.                 return $this->render($service->getThemeDirectory().'/Users/User/Security/resetpassword.html.twig',
  268.                 array('etape'=> $etape,'user'=>$user));
  269.             }else{
  270.                 echo 0;
  271.                 exit;
  272.             }
  273.         }else{
  274.             echo 0;
  275.             exit;
  276.         }
  277.     }else if($etape == 3)
  278.     {
  279.         if(isset($_POST['password']) and isset($_POST['id']))
  280.         {
  281.             $repository $em->getRepository(User::class);
  282.             $user $repository->find($_POST['id']);
  283.             $reset_password $session->get('reset_password');
  284.             if($user != null and $reset_password == 1)
  285.             {
  286.                 //sécurisation du mot de passe utilisateur
  287.                 $passuser $_POST['password'];
  288.                 /*
  289.                 $salt = substr(crypt($passuser,''), 0, 16);
  290.                 $user->setSalt($salt);
  291.                 $newpassword = $service->encrypt($passuser,$salt);
  292.                 */
  293.                 $user->setPassword($passuser);
  294.                 $em->flush();
  295.                 return $this->render($service->getThemeDirectory().'/Users/User/Security/resetpassword.html.twig',
  296.                 array('etape'=> $etape,'user'=>$user));
  297.             }else{
  298.                 echo 0;
  299.                 exit;
  300.             }
  301.         }else{
  302.             echo 0;
  303.             exit;
  304.         }
  305.     }
  306.     echo 0;
  307.     exit;
  308. }
  309. public function clearsession(Request $requestGeneralServicetext $serviceTokenStorageInterface $tokenStorageEventDispatcherInterface $eventDispatcher)
  310. {
  311.     $logoutEvent = new LogoutEvent($request$tokenStorage->getToken());
  312.     $eventDispatcher->dispatch($logoutEvent);
  313.     $tokenStorage->setToken(null);
  314.     $response = new Response();
  315.     $response->headers->clearCookie('REMEMBERME');
  316.     $response->headers->clearCookie('PIDSESSREM');
  317.     $response->headers->clearCookie('PIDSESSDUR');
  318.     $response->send();
  319.     /*if(isset($_COOKIE["PIDSESSREM"]) and isset($_COOKIE["PIDSESSDUR"]))
  320.     {
  321.         // Stock les infos du cookie
  322.         $cookie_info = array(
  323.             'name'  => "PIDSESSREM",
  324.             'value' => "delete",
  325.             'time'  => $_COOKIE["PIDSESSDUR"]
  326.         );
  327.         setCookie($cookie_info['name'], $cookie_info['value'], $cookie_info['time'],'/');
  328.     }
  329.     
  330.     $this->get('security.token_storage')->setToken(null);
  331.     $request->getSession()->invalidate();*/
  332.     return $this->redirect($this->generateUrl('users_user_acces_plateforme'));
  333. }
  334. public function opensession(Request $requestGeneralServicetext $generalServicetext)
  335. {
  336.     $parameters json_decode($request->getContent(), true);
  337.     if(count($parameters) == 2)
  338.     {
  339.         if($generalServicetext->array_keys_exists(array("user""authcode"), $parameters))
  340.         {
  341.             $iduser $parameters['user']['id'];
  342.             $olduser $this->_userRepository->findOneBy(array('puui'=>$iduser), array('datebeg'=>'desc'), 1);
  343.             if($olduser == null){
  344.                 $email $parameters['user']['email'];
  345.                 $phone $parameters['user']['phone'];
  346.                 if($email != null)
  347.                 {
  348.                     $username $email;
  349.                     $olduser $this->_userRepository->findOneBy(array('email'=>$email));
  350.                 }else{
  351.                     $username $phone
  352.                     $olduser $this->_userRepository->findOneBy(array('tel'=>$phone));
  353.                 }
  354.                 if($olduser == null)
  355.                 {
  356.                     $olduser $this->_userRepository->findOneBy(array('username'=>$username));
  357.                     if($olduser == null){
  358.                         //create User and log it
  359.                         $data $this->_userService->loginUser($requestnull$parameters['user']['token'], $parameters['user']['tokenkey'], $parameters['user']['firstName'], $parameters['user']['lastName'], $parameters['user']['email'], $parameters['user']['phone'], $parameters['user']['imgprofil'], $parameters['user']['id']);
  360.                     }else{
  361.                         //log user
  362.                         $data $this->_userService->loginUser($request$olduser$parameters['user']['token'], $parameters['user']['tokenkey']);
  363.                     }                    
  364.                 }else{
  365.                     //log user
  366.                     $data $this->_userService->loginUser($request$olduser$parameters['user']['token'], $parameters['user']['tokenkey']);
  367.                 }
  368.             }else{
  369.                 //log user
  370.                 $data $this->_userService->loginUser($request$olduser$parameters['user']['token'], $parameters['user']['tokenkey']);
  371.             }
  372.             return $data;
  373.         }   
  374.     }
  375.     
  376.     $data $generalServicetext->badRequest();
  377.     return $data;
  378. }
  379. public function initlocallang()
  380. {
  381.     $acceptLang = ['en''fr''de'];
  382.     if(isset($_GET['lang']) and in_array($_GET['lang'], $acceptLang))
  383.     {
  384.         $selectlang $_GET['lang'];
  385.     }else{
  386.         $lang substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 02);
  387.         $selectlang in_array($lang$acceptLang) ? $lang 'en';
  388.     }
  389.     return $this->redirect($this->generateUrl('users_user_acces_plateforme', array('_locale'=>$selectlang)));
  390. }
  391. }