src/Controller/SecurityController.php line 36

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Agence;
  4. use App\Entity\HistoHistorique;
  5. use App\Entity\User;
  6. use App\Service\AppService;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Exception;
  9. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  10. use Symfony\Component\HttpFoundation\RedirectResponse;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  16. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  17. class SecurityController extends AbstractController
  18. {
  19. private $session ;
  20. private $entityManager ;
  21. private $appService ;
  22. public function __construct(AppService $appService, SessionInterface $session, EntityManagerInterface $entityManager)
  23. {
  24. $this->session = $session ;
  25. $this->entityManager = $entityManager ;
  26. $this->appService = $appService ;
  27. }
  28. /**
  29. * @Route("/login/{error}/{type}", name="app_login", defaults = {"error" : null,"type" : null})
  30. */
  31. public function login($error, $type): Response
  32. {
  33. return $this->render('security/login.html.twig', ['error' => $error,'type' => $type ]);
  34. }
  35. /**
  36. * @Route("/logout", name="app_logout")
  37. */
  38. public function logout(): void
  39. {
  40. // $agence = $this->entityManager->getRepository(Agence::class)->find($this->session->get("user")["agence"]) ;
  41. // $user = $this->entityManager->getRepository(User::class)->findBy([
  42. // "username" => strtoupper($this->session->get("user")["username"]),
  43. // "agence" => $agence
  44. // ]) ;
  45. // $this->entityManager->getRepository(HistoHistorique::class)
  46. // ->insererHistorique([
  47. // "refModule" => "SHB",
  48. // "nomModule" => "SHISSAB",
  49. // "refAction" => "CON",
  50. // "user" => $user,
  51. // "agence" => $agence,
  52. // "nameAgence" => strtolower($agence->getNom())."-".$agence->getId().".json",
  53. // "description" => "Déconnexion au compte",
  54. // ]) ;
  55. throw new \LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.');
  56. }
  57. /**
  58. * @Route("/auth/login", name="auth_login")
  59. */
  60. public function authentificationLogin(Request $request, UserPasswordEncoderInterface $passwordEncoder)
  61. {
  62. $error = null ;
  63. $type = "success" ;
  64. $heureLocal = $request->request->get("heureLocal") ;
  65. $this->session->set("shissabHeure",$heureLocal) ;
  66. $csrfToken = $request->request->get('_csrf_token');
  67. if (!$this->isCsrfTokenValid('authenticate', $csrfToken)) {
  68. $error = 'CSRF token invalide';
  69. $type = "danger" ;
  70. return $this->redirectToRoute('app_login',[
  71. "error" => $error,
  72. "type" => $type
  73. ]);
  74. }
  75. try
  76. {
  77. $username = $request->request->get("username") ;
  78. $user = $this->entityManager->getRepository(User::class)->findBy([
  79. "username" => strtoupper($username)
  80. ]) ;
  81. if(empty($user))
  82. {
  83. $error = "Le nom d'utilisateur n'existe pas";
  84. $type = "warning" ;
  85. return $this->redirectToRoute('app_login',[
  86. "error" => $error,
  87. "type" => $type
  88. ]);
  89. }
  90. $password = $request->request->get("password") ;
  91. $userObject = null ;
  92. if(count($user) > 1)
  93. {
  94. foreach ($user as $userElement) {
  95. $isPasswordValid = $passwordEncoder->isPasswordValid($userElement,$password);
  96. if ($isPasswordValid) {
  97. $userObject = $userElement ;
  98. break ;
  99. }
  100. }
  101. if(is_null($userObject))
  102. {
  103. $error = "Le mot de passe entré est incorrect";
  104. $type = "danger" ;
  105. return $this->redirectToRoute('app_login',[
  106. "error" => $error,
  107. "type" => $type
  108. ]);
  109. }
  110. }
  111. else
  112. {
  113. $userObject = $user[0] ;
  114. if($userObject->isDisabled())
  115. {
  116. return $this->redirectToRoute('app_login',[
  117. "error" => "Utilisateur désactivé",
  118. "type" => "warning"
  119. ]);
  120. }
  121. $isPasswordValid = $passwordEncoder->isPasswordValid($userObject,$password);
  122. if (!$isPasswordValid) {
  123. $error = "Le mot de passe entré est incorrect";
  124. $type = "danger" ;
  125. return $this->redirectToRoute('app_login',[
  126. "error" => $error,
  127. "type" => $type
  128. ]);
  129. }
  130. }
  131. }
  132. catch(Exception $e)
  133. {
  134. $error = "Désolé, problème de connexion au serveur. Veuiller réessayer s'il vous plait ...";
  135. $type = "danger" ;
  136. return $this->redirectToRoute('app_login',[
  137. "error" => $error,
  138. "type" => $type
  139. ]);
  140. }
  141. $roles = $userObject->getRoles()[0] ;
  142. if($roles == "ADMIN")
  143. {
  144. $role = $roles ;
  145. $route = "app_admin" ;
  146. }
  147. else if($roles == "MANAGER")
  148. {
  149. $role = $roles ;
  150. $route = "app_home" ;
  151. }
  152. else
  153. {
  154. $role = $roles ;
  155. $route = "app_home" ;
  156. }
  157. $deviseLettre = "" ;
  158. $deviseSymbole = "" ;
  159. if(!is_null($userObject->getAgence()->getDevise()))
  160. {
  161. $devise = $userObject->getAgence()->getDevise() ;
  162. $deviseLettre = $devise->getLettre() ;
  163. $deviseSymbole = $devise->getSymbole() ;
  164. }
  165. $this->entityManager->getRepository(HistoHistorique::class)
  166. ->insererHistorique([
  167. "refModule" => "SHB",
  168. "nomModule" => "SHISSAB",
  169. "refAction" => "CON",
  170. "user" => $userObject,
  171. "agence" => $userObject->getAgence(),
  172. "nameAgence" => strtolower($userObject->getAgence()->getNom())."-".$userObject->getAgence()->getId().".json",
  173. "description" => "Connexion au compte",
  174. ]) ;
  175. $data = [
  176. "username" => strtoupper($username),
  177. "email" => $userObject->getEmail(),
  178. "deviseLettre" => $deviseLettre,
  179. "deviseSymbole" => $deviseSymbole,
  180. "agence" => $userObject->getAgence()->getId(),
  181. "role" =>$role,
  182. "csrf_token" => $csrfToken
  183. ];
  184. $this->session->set("user", $data) ;
  185. return $this->redirectToRoute($route);
  186. }
  187. /**
  188. * @Route("/login/problem/{error}/{type}", name="problem_occured", defaults = {"error" : null,"type" : null})
  189. */
  190. public function problemOccuredLogin($error, $type)
  191. {
  192. return $this->render('security/problem.html.twig', ['error' => $error,'type' => $type ]);
  193. }
  194. }