src/Controller/SecurityController.php line 72

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Event\User\UserLoginWithoutPasswordEvent;
  4. use App\Repository\UserRepository;
  5. use App\Service\NotificationService;
  6. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  7. use Symfony\Component\HttpFoundation\JsonResponse;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  13. use Doctrine\ORM\EntityManagerInterface;
  14. use App\Entity\Company;
  15. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  16. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  17. use Symfony\Component\Mime\Address;
  18. // use Symfony\Component\Security\Csrf\TokenStorage\TokenStorageInterface;
  19. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  20. use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
  21. use Symfony\Contracts\HttpClient\HttpClientInterface;
  22. use Symfony\Component\Routing\Matcher\UrlMatcherInterface;
  23. use App\Service\DynamicHostService;
  24. class SecurityController extends AbstractController
  25. {
  26.     /**
  27.      * @Route("/login", name="app_login")
  28.      */
  29.     public function login(AuthenticationUtils $authenticationUtilsRequest $requestSessionInterface $session,EntityManagerInterface $entityManager,UrlMatcherInterface $urlMatcherInterface): Response
  30.     {
  31.         
  32.         $url $request->getUri();
  33.         $pattern "/^(https?:\/\/)?([a-zA-Z0-9.-]+)/";
  34.         preg_match($pattern$url$matches);
  35.         $sousDomaine $matches[2];
  36.         $company $entityManager->getRepository(Company::class)->findCompanyBySubDomain($sousDomaine);
  37.         if (null !== $request->query->get('redirect_to')) {
  38.             $session->set('redirect_to'$request->query->get('redirect_to'));
  39.             return $this->redirectToRoute('app_login');
  40.         }
  41.         if ($this->getUser()) {
  42.             if (null !== $redirect $session->get('redirect_to')) {
  43.                 $session->remove('redirect_to');
  44.             }
  45.             return $this->redirectToRoute('mission_index');
  46.         }
  47.         // get the login error if there is one
  48.         $error $authenticationUtils->getLastAuthenticationError();
  49.         // last username entered by the user
  50.         $lastUsername $authenticationUtils->getLastUsername();
  51.          if (isset($_COOKIE['PHPSESSID'])) {
  52.             setcookie('PHPSESSID'''time() - 14444444444444444'/''.my-flow.fr'truetrue);
  53.         }
  54.         return $this->render('security/login.html.twig', [
  55.             'last_username' => $lastUsername
  56.             'error' => $error,
  57.             'company' => $company
  58.         ]);
  59.     }
  60.      /**
  61.      * @Route("/login/request-login-without-password", name="request_login_without_password")
  62.      */
  63.     public function createAuthWithoutPassword(Request $request,EventDispatcherInterface $dispatcherEntityManagerInterface $entityManagerUserRepository $userRepository): Response JsonResponse
  64.     {
  65.       
  66.         if($request->isMethod('POST')){
  67.             $email $request->request->get('email');
  68.           
  69.             // if($email == null) {
  70.             //    return  $this->redirectToRoute('request_login_without_password',['message_login_without_password'=>'unknown-email']);
  71.             // }
  72.             
  73.             $users $userRepository->findAllUserByEmaiAndEmailParent($email);
  74.             $user null;
  75.             foreach ($users as $u) {
  76.                 if ($u->isEnabled() and !$u->isDeleted()) {
  77.                     $user $u;
  78.                     break;
  79.                 }
  80.             }
  81.             if($user == null ) {
  82.                return  $this->redirectToRoute('request_login_without_password',['message_login_without_password'=>'unknown-email']);
  83.             }
  84.             $token hash('sha256'uniqid(preg_replace('/\s/','-',$user->getFullName())));
  85.       
  86.             $user->setOneTimeLoginToken($token);
  87.             $entityManager->flush();
  88.             $event = new UserLoginWithoutPasswordEvent($user$token);
  89.             $dispatcher->dispatch($eventUserLoginWithoutPasswordEvent::NAME);
  90.             return  $this->redirectToRoute('app_login',['message_login_without_password'=>'send-success']);
  91.         }
  92.     
  93.        
  94.         return $this->render('security/login_without_password.html.twig', []);
  95.     }
  96.      /**
  97.      * @Route("/login/{token}", name="login-without-passWord")
  98.      */
  99.     public function loginWithoutPassWordHttpClientInterface $httpClientParameterBagInterface $parameterBag,  string $token,TokenStorageInterface $tokenStorage,  UserRepository $userRepository,EntityManagerInterface $entityManager,Request $request,DynamicHostService $dynamicHostService): Response
  100.     {
  101.         if ($request->query->get('role')) {
  102.             $request->getSession()->set('role_current_user'$request->query->get('role'));
  103.         }
  104.         $user $userRepository->findOneBy(['oneTimeLoginToken' => $token]);
  105.       
  106.         if($user){
  107.            if($user->isDeleted() or !$user->isEnabled()){
  108.                 return $this->redirectToRoute('app_login',['message_login_without_password'=>'not-enabled']);
  109.            }
  110.             $authenticatedToken = new UsernamePasswordToken($usernull'main'$user->getRoles());
  111.             
  112.             $tokenStorage->setToken($authenticatedToken);
  113.             // $user->setOneTimeLoginToken(null);
  114.             // $entityManager->flush();
  115.             $urlToRedirectCorrectly $dynamicHostService->getBackUrlByCompany($user?->getCompany());
  116.             if (in_array("ROLE_ADMIN"$user->getRoles()) || in_array("ROLE_SUBCONTRACTOR",$user->getRoles())) {
  117.                 
  118.                 return $this->redirect($urlToRedirectCorrectly);
  119.             }
  120.            ///////////////
  121.            $redirectToWp in_array("ROLE_AUTHOR"$user->getRoles()) || in_array("ROLE_EDITOR"$user->getRoles()) ? true false;
  122.            // $response = $httpClient->request('GET', $parameterBag->get('front_website_url'), [
  123.            //      'query' => [
  124.            //          'tsso' => hash('sha256', $user->getEmail() . $user->getEmail()),
  125.            //          'discount'=> 0
  126.            //      ],
  127.            //      'max_redirects' => 0,
  128.            //  ]);
  129.     
  130.            //  $headers = $response->getHeaders(false);
  131.            //  foreach ($headers['set-cookie'] ?? [] as $cookie) {
  132.            //      $infos = explode(';', $cookie);
  133.            //      [$name, $value] = explode('=', $infos[0]);
  134.     
  135.            //      foreach ($infos as $info) {
  136.            //          if (preg_match('#path#', $info)) {
  137.            //              [$str, $path] = explode('=', $info);
  138.            //          }
  139.            //      }
  140.     
  141.            //      setrawcookie($name, $value, 0, $path ?? '', str_replace('https://', '', $parameterBag->get('front_website_url')));
  142.            //  }
  143.             ////////////
  144.             $ch curl_init();
  145.             
  146.             $url "{$parameterBag->get('front_website_url')}/?tsso=" hash('sha256'$user->getEmail() . $user->getEmail());
  147.             curl_setopt($chCURLOPT_URL$url);
  148.             curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  149.             $result curl_exec($ch);
  150.             curl_close($ch);
  151.             //set session if switch connection is active
  152.             if ($request->query->get('role')) {
  153.                 $request->getSession()->set('role_current_user'$request->query->get('role'));
  154.             }
  155.            
  156.             //end set session
  157.             return $redirectToWp ?  $this->redirect("{$parameterBag->get('front_website_url')}/wp-admin") : $this->redirect($urlToRedirectCorrectly);
  158.         }
  159.         
  160.         return $this->redirectToRoute('app_login',['message_login_without_password'=>'unknown-token']);
  161.         
  162.     }
  163.     /**
  164.      * @Route("/logout", name="app_logout")
  165.      */
  166.     public function logout(): void
  167.     {
  168.         // This method intentionally left blank.
  169.     }
  170. }