src/Controller/AuthController.php line 44

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Imperium\Config\iConfig;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\Routing\Annotation\Route;
  8. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  9. use Imperium\StaticUtils\Utils as Utils;
  10. use Ramsey\Uuid\Uuid;
  11. use Symfony\Component\HttpFoundation\JsonResponse;
  12. use Imperium\InterfaceData\imp_emails\Emails;
  13. use Imperium\InterfaceData\imperium\Ip_Comptes as httpIp_Comptes;
  14. use Imperium\AppsApi\Utils\Utils as ApiUtils;
  15. use Imperium\AppsApi\Auth\Lecture as ApiAuth;
  16. use App\Entity\User;
  17. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  18. use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
  19. use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
  20. use Symfony\Component\EventDispatcher\EventDispatcher;
  21. use Imperium\InterfaceToken\userToken;
  22. use Imperium\InterfaceToken\cookieToken;
  23. class AuthController extends AbstractController
  24. {
  25.     private $session;
  26.     protected $tokenStorage;
  27.     public function __construct(SessionInterface $session,TokenStorageInterface $tokenStorage)
  28.     {
  29.         iConfig::initConfig();
  30.         $this->tokenStorage $tokenStorage;
  31.         $this->session $session;
  32.     }
  33.     public function get_signin(Request $request)
  34.     {
  35.         
  36.         
  37.         $params = [];
  38.         // if(isset($_SESSION['users'])) unset($_SESSION['users']);
  39.         // unset the callback session if it is set
  40.         if(isset($_SESSION['callback'])) unset($_SESSION['callback']);
  41.         if(isset($_SESSION['callback_signin'])) unset($_SESSION['callback_signin']);
  42.         // if callback is set in the query it is registred for further use when the user is authenticated
  43.         if($request->query->has('callback')){
  44.             $callback $request->get('callback');
  45.             // Output the domain
  46.             $_SESSION['callback'] = $callback;
  47.             $_SESSION['callback_signin'] = $callback;
  48.         }
  49.         // if User sessions is allerady set TAB listACCounts is activated 
  50.         if(isset($_SESSION['users']) && count($_SESSION['users'])){
  51.             $params['TAB'] = "list_accounts"
  52.         }
  53.         // if the user is redirected to reset his password 
  54.         if($request->query->has('reset_password') && $request->query->has('token') && $request->query->get('token') != "" && $request->query->get('reset_password') == "true"){
  55.             $response ApiAuth::verifyToken(['token'=>$request->query->get('token')]);
  56.             if($response->status == 200){
  57.                 if(isset($_SESSION['reset_password'])) unset($_SESSION['reset_password']);
  58.                 $_SESSION['reset_password'] = [
  59.                     "IdCompte" => $response->payload->compteid,
  60.                     "Email" => $response->payload->email,
  61.                     "ExpireIn" => time() + 300 
  62.                 ];
  63.                 // $res = ApiAuth::revokeToken(['token'=>$request->query->get('token'),"revoked_by"=>$response->payload->compteid]);
  64.                 $params['TAB'] = "resetpass_password";
  65.             }else{
  66.                 return $this->render('error/409.html.twig');
  67.             }
  68.         }
  69.         return $this->render('auth/login.html.twig',$params);
  70.     }
  71.     public function signin_email(Request $request)
  72.     {
  73.         
  74.         $validators = [];
  75.         if( !$request->request->has('email') || empty($request->get('email'))){
  76.             $validators['email'] = "Email is requireds";
  77.         }
  78.         if(count($validators)>0){
  79.             throw (new JsonResponse(['code'=>'error','status'=>422,"title" => "Confirmation Erreur","message"=>"The data provided was invalid","data"=>$validators],422))->send();
  80.         }
  81.         $email $request->get('email');
  82.         $body["args"] = [
  83.             "email" => $email
  84.         ];
  85.         $compte ApiAuth::getCompteByEmail($body);
  86.         
  87.         // Verify email From Register Section 
  88.         if($request->request->has('register') && $compte->compte != null){
  89.             return new JsonResponse(["status" => 422 "code" => "error" "message" => "Compte existe deja"],422);
  90.         }else if( $request->request->has('register') && $compte->compte == null){
  91.             return new JsonResponse(["status" => 200 "code" => "success"]);
  92.         }
  93.         // Verify email For Login Section 
  94.         if($compte->compte != null && !$request->request->has('register')){
  95.             $authMethodes = [];
  96.             if($compte->compte->Ip_Comptes->AuthPwd != null){
  97.                 $authMethodes['password'] = true;
  98.             }
  99.             if($compte->compte->Ip_Comptes->AuthFactors != null){
  100.                 $authMethodes['twofa'] = $compte->compte->Ip_Comptes->AuthFactors->Code;
  101.             }
  102.             return new JsonResponse(["status" => 200 "code" => "success" "data" => [
  103.                 "X_NOM" => $compte->compte->Conso_Perso->X_NOM,
  104.                 "X_PRENOM" => $compte->compte->Conso_Perso->X_PRENOM,
  105.                 "authMethodes" => $authMethodes,
  106.             ]]);
  107.         }
  108.         
  109.         
  110.         return new JsonResponse(["status" => 404 "code" => "error" "message" => "Compte n'existe pas"],404);
  111.     }
  112.     public function signin_account(Request $request)
  113.     {
  114.         $validators = [];
  115.         if( (!$request->request->has('password') || empty($request->get('password')) ) && ( !$request->request->has('otp') || empty($request->get('otp'))) ){
  116.             $validators['password'] = "otp or password is requireds";
  117.         }
  118.         if( !$request->request->has('email') || empty($request->get('email'))){
  119.             $validators['fields'] = "some fields is requireds";
  120.         }
  121.         if(count($validators)>0){
  122.             // return new JsonResponse(['code'=>'error','status'=>422,"message"=>"The data provided was invalid","data"=>$validators],422);
  123.             throw (new JsonResponse(['code'=>'error','status'=>422,"title" => "Confirmation Erreur","message"=>"The data provided was invalid","data"=>$validators],422))->send();
  124.         }
  125.           
  126.         $email $request->get('email');
  127.         $body["args"] = [
  128.               "email" => $email
  129.         ];
  130.         $compte ApiAuth::getCompteByEmail($body);
  131.           // Verify email For Login Section 
  132.         if($compte->compte != null){
  133.             if($compte->compte->Ip_Comptes->Validite == 0){
  134.               
  135.                $params=[];
  136.                $IdCompte=Utils::CryptNum($compte->compte->Ip_Comptes->IdCompte);
  137.                $params["IdCompte"]=$IdCompte;
  138.                 $params['message'] = "Veuillez vérifier la boîte e-mail pour activer votre compte";
  139.                 throw (new JsonResponse(['code'=>'error','status'=>422,"message"=>"Compte Invalide","data"=>$params],200))->send();
  140.             }
  141.         }
  142.          
  143.         $params = [];
  144.         $params['username'] =   $request->get('email');
  145.         $params['password'] =   $request->get('password');
  146.         $params['otp']      =   $request->get('otp');
  147.         $params['expiresAfter'] = 864000;
  148.         $response ApiAuth::usersSignin($params);
  149.         if( isset($response->token) ){
  150.             $compte ApiAuth::usersVerify(['token'=>$response->token,"revoke"=>false]);
  151.             if( $compte->status == 401 ){
  152.                 return new JsonResponse(['status'=>401,"code"=>"unauthorized","title"=>"unauthorized","message"=>"unauthorized"],401);    
  153.             }
  154.             $data_session = [];
  155.             $data_session['user'] = $compte->user;
  156.             $data_session['uuid'] = Uuid::uuid4()->toString();
  157.             $data_session['session'] = (object) [
  158.                 'token'=>$response->token,
  159.                 'agent'=>$_SERVER['HTTP_USER_AGENT']
  160.             ];
  161.             if( !isset($_SESSION['users']) ){
  162.                 $_SESSION['users'] = [];
  163.                 array_push($_SESSION['users'],$data_session);
  164.             }else{
  165.                 $user array_column($_SESSION['users'],"user");   
  166.                 $ids array_column($user,"id");
  167.                 $search_in_array array_search($compte->user->id$ids);
  168.                 if( $search_in_array === false ){
  169.                     array_push($_SESSION['users'],$data_session);
  170.                 }else{
  171.                     // Token renewal
  172.                     $_SESSION['users'][$search_in_array]['session']->token $response->token;
  173.                 }
  174.             }
  175.             if( $this->session->get('user') == null ){
  176.                 self::loadSession($compte->user->id,$params['username'],$params['password'],$this,$request);
  177.             }
  178.             $session = [
  179.                 'X_NOM'=>$this->session->get('user')->X_NOM,
  180.                 'X_PRENOM'=>$this->session->get('user')->X_PRENOM,
  181.                 'IdCompte'=>Utils::DecryptJWT([
  182.                     'secret_key' => iConfig::getCryptSecretKey(),
  183.                     'secret_iv'  => iConfig::getCryptSecretIv(),
  184.                     'text'       => $this->session->get('user')->IdCompte
  185.                 ]),
  186.                 'pic_profile'=>$this->session->get('user')->pic_profile
  187.             ];
  188.             $data Utils::recursiveCryptingJWT("cryptJWT",['id'],$_SESSION['users']);
  189.             $data = [];
  190.             
  191.             $response ApiAuth::usersSignin(['token'=>$response->token,"expiresAfter"=>864000]);
  192.             $token $response->token;
  193.             if(isset($_SESSION['callback_signin'])){
  194.                 $callback_signin $_SESSION['callback_signin'];
  195.                 if( strpos($callback_signin"?") !== false ){
  196.                     $data["redirect"] = $callback_signin "&token=" $token;
  197.                 }else{
  198.                     $data["redirect"] = $callback_signin "?token=" $token;
  199.                 }
  200.                 
  201.                 unset($_SESSION['callback']);
  202.                 unset($_SESSION['callback_signin']);
  203.             }
  204.             $data["token"] = $token;
  205.             return new JsonResponse(["status" => 200 "code" => "success" "message" => "Connected Suscessfully" ,"data" => $data,"session"=>$session]);
  206.         }
  207.         if($params['password']!= ""$messageError "Password is incorrect";
  208.         if($params['otp']!= ""$messageError "otp is incorrect";
  209.         if($response->status == 401){
  210.             // $messageError = "Email is Blocked";
  211.             if($response->code == "credentials_invalid"){
  212.                 $messageError "Email or Password is incorrect";
  213.             }
  214.             if($response->code == "email_blocked"){
  215.                 $messageError "Email is blocked";
  216.             }
  217.             if($response->code == "email_disabled"){
  218.                 $messageError "Email is disabled";
  219.             }
  220.         }
  221.         return new JsonResponse(["status" => 404 "code" => "error" "message" => $messageError],404);
  222.     }
  223.     public function send_relance(Request $request)
  224.     {
  225.         $IdCompte $request->get('IdCompte');
  226.         $password $request->get('password');
  227.         $email $request->get('email');
  228.         $first_Emails = (new Emails())->first(["EMAIL"=>$email]);
  229.         if($first_Emails){
  230.             $body["args"] = [
  231.                 "IdEmail" =>$first_Emails->IDEMAIL,
  232.                 
  233.           ];
  234.           $body["operatedBy"] = Utils::DCryptNum($IdCompte);
  235.         
  236.           $response ApiAuth::sendRelance($body);
  237.   
  238.           if($response->status == 200){
  239.   
  240.               return new JsonResponse(["status" => 200 "code" => "success" "message" => " bien renvoyer "]);
  241.           }
  242.           if($response->status == 422){
  243.           
  244.               return new JsonResponse(["status" => 422 "code" => "error" "message" => $response->message],422);
  245.           }
  246.         }
  247.         
  248.         return new JsonResponse(["status" => 500 "code" => "error" "message" => "unknown error please try again"],500);
  249.     }
  250.     public function get_list_accounts(Request $request)
  251.     {
  252.         
  253.         if(isset($_SESSION['users']) && count($_SESSION['users'])){
  254.             return new JsonResponse(["status" => 200 "code" => "success" "message" => "List Accounts" "data" => $_SESSION['users']]);
  255.         }
  256.         return new JsonResponse(["status" => 404 "code" => "error" "message" => "List Accounts introuvable"]);
  257.     }
  258.     public function connect_with_registred_account(Request $request)
  259.     {
  260.         
  261.         $validators = [];
  262.         if( !$request->request->has('uuid') || empty($request->get('uuid'))){
  263.             $validators['uuid'] = "the uuid field is mandatory";
  264.         }
  265.         if(count($validators)>0){
  266.             throw (new JsonResponse(['code'=>'error','status'=>422,"message"=>"The data provided was invalid","data"=>$validators],422))->send();
  267.         }
  268.         
  269.         $uuid $request->get('uuid');
  270.         $ids = isset($_SESSION['users']) ? array_column($_SESSION['users'],"uuid") :[];
  271.         $search_in_array array_search($uuid$ids);
  272.         $http_user_agent $_SERVER['HTTP_USER_AGENT'];
  273.         if( $search_in_array !== false ){
  274.             $token $_SESSION['users'][$search_in_array]['session']->token;
  275.             $agent_session $_SESSION['users'][$search_in_array]['session']->agent;
  276.             
  277.             $compte ApiAuth::usersVerify(['token'=>$token,"revoke"=>false]);
  278.             
  279.             $user Utils::recursiveCryptingJWT("cryptJWT",['id'],$_SESSION['users'][$search_in_array]);
  280.             
  281.             if( $compte->status == 401 ){
  282.                 return new JsonResponse(['status'=>401,"code"=>"unauthorized","title"=>"unauthorized","message"=>"unauthorized","data"=>[
  283.                     "email" => $user["user"]->username
  284.                 ]],401);
  285.             }
  286.             $data Utils::recursiveCryptingJWT("cryptJWT",['id'],$_SESSION['users']);
  287.             if( $agent_session == $http_user_agent  ){
  288.                 // Todo create new token in order to login in app by token account
  289.                 
  290.                 $response ApiAuth::usersSignin(['token'=>$token,"expiresAfter"=>864000]);
  291.                 $token $response->token;
  292.                 if( empty($token) || $token == "" ){
  293.                     throw (new JsonResponse(['code'=>'error','status'=>422,"message"=>"unknown error please try again","data"=>$validators],422))->send();
  294.                 }
  295.                 $json_response = ['status'=>200,"code"=>"success","message"=>"success","data"=>$data,'token'=>$token];
  296.                 if( isset( $_SESSION['callback_signin'] )  ) {
  297.                     $host_params "token=$token";
  298.     
  299.                     if( strpos($_SESSION['callback_signin'], "?") !== false ){
  300.                         $json_response['redirect'] = $_SESSION['callback_signin']."&$host_params";
  301.                     }else{
  302.                         $json_response['redirect'] = $_SESSION['callback_signin']."?$host_params";
  303.                     }
  304.                     
  305.                     
  306.                     unset($_SESSION['callback']);
  307.                     unset($_SESSION['callback_signin']);
  308.                 }
  309.                 return new JsonResponse($json_response);
  310.             }else{
  311.                 return new JsonResponse(['status'=>1003,"code"=>"http_user_agent","title"=>"agent","message"=>"agent","data"=>[
  312.                     "email" => $user["user"]->username
  313.                 ]]);
  314.             }
  315.             
  316.         }else{
  317.             return new JsonResponse(['status'=>401,"code"=>"unauthorized",
  318.             "title"=>"Session Expired",
  319.             "message"=>"Session Expired"],401);   
  320.         }
  321.     }
  322.     
  323.     public function register_account(Request $request)
  324.     {
  325.         
  326.        
  327.         $validators = [];
  328.         $birthday null;
  329.         
  330.         if( $request->request->has('day') && !empty($request->get('day')) 
  331.             && $request->request->has('month') || !empty($request->get('month')) 
  332.             && $request->request->has('year') || !empty($request->get('year')) ){
  333.            $birthday $request->get('year')."-".$request->get('month')."-".$request->get('day');
  334.         }
  335.         $phone null;
  336.         $telMode null;
  337.         $ville null;
  338.         $langue null;
  339.         if( $request->request->has('ville') && !empty($request->get('ville'))){
  340.             $ville Utils::DCryptNum($request->get('ville'));
  341.         }
  342.         if($request->request->has('langue') && !empty($request->get('langue'))){
  343.             $langue Utils::DCryptNum($request->get('langue'));
  344.         }
  345.         if( $request->request->has('phone') && !empty($request->get('phone')) && $request->request->has('tel_mode') || !empty($request->get('tel_mode')) ){
  346.             $phone $request->get('phone');
  347.             $telMode =  Utils::DCryptNum($request->get('tel_mode'));
  348.            
  349.         }
  350.         $fields = ['email','prenom','nom','password','pays'];
  351.         foreach ($fields as $key => $field) {
  352.             if( !$request->request->has($field) || empty($request->get($field)) ){
  353.                 $validators[$field] = "The $field is required";
  354.             }
  355.         }
  356.         if(count($validators)>0){
  357.             throw (new JsonResponse(['code'=>'error','status'=>422,"message"=>"The data provided was invalid","data"=>$validators],422))->send();
  358.         }
  359.         $compte = [];
  360.         $compte['email'] = $request->get('email');
  361.         $compte['firstName'] = $request->get('prenom');
  362.         $compte['lastName'] = $request->get('nom');
  363.         $compte['password'] = $request->get('password');
  364.         $compte['country'] = Utils::DCryptNum($request->get('pays'));
  365.         $compte['city'] =  $ville;
  366.         $compte['language'] = $langue;
  367.         $compte['birthday'] = $birthday;
  368.         $compte['verificationMode'] = "email";
  369.         $tel_code $telMode;
  370.         if($tel_code != null){
  371.             $pays ApiUtils::GetPays(["query"=>["NumPays"=>$tel_code]]);
  372.             $pays reset($pays);
  373.             $compte['phone'] = $pays->TELCode.$request->get('phone');
  374.         }
  375.         $response ApiAuth::createCompte($compte);
  376.         
  377.         if($response->status == 200){
  378.             return new JsonResponse(['code'=>'success','status'=>200,"message"=>"Registred successfully"],200);
  379.         }
  380.         return new JsonResponse(['code'=>'error','status'=>500,"message"=>"Some thing went wrong"],500);
  381.     }
  382.     public function verify_account(Request $request)
  383.     {
  384.         $validators = [];
  385.         if( !$request->request->has('type') ){
  386.             $validators['type'] = "The type verification is required";
  387.         }
  388.         if(count($validators)>0){
  389.             throw (new JsonResponse(['code'=>'error','status'=>422,"message"=>"The data provided was invalid","data"=>$validators],422))->send();
  390.         }
  391.         $type $request->get("type");
  392.         if(in_array($type,["email","email_otp"]) && $request->request->has("email")){
  393.             $args = [];
  394.             $args['args']['email'] = $request->get('email');
  395.             // $args['args']['email'] = "laatarsisalaheddine1@gmail.com"; // TODO : remove this line
  396.             $args['args']['IdCompte'] = crc32($args['args']['email']);
  397.             $response ApiAuth::generateEmailOtp($args);
  398.             if($response->status == 200){
  399.                 if(isset($_SESSION['otp'])) unset($_SESSION['otp']);
  400.                 $_SESSION['otp'] = $response->data->otp;
  401.                 return new JsonResponse(['code'=>'success','status'=>200,"message"=>"OTP sent successfully","data"=>["type"=>$type]],200);
  402.             }
  403.         }
  404.         return new JsonResponse(['code'=>'error','status'=>404,"message"=>"Invalid request"],404);
  405.     }
  406.     public function validate_account(Request $request)
  407.     {
  408.         $validators = [];
  409.         if( !isset($_SESSION['otp']) || !$request->request->has('otp') ){
  410.             $validators['otp'] = "The otp is required";
  411.         }
  412.         
  413.         if( isset($_SESSION['otp']) && $request->get('otp') != $_SESSION['otp'] ){
  414.             $validators['otp'] = "The OTP Provided is not valid";
  415.         }
  416.         if(count($validators)>0){
  417.             throw (new JsonResponse(['code'=>'error','status'=>422,"message"=>"The data provided was invalid","data"=>$validators],422))->send();
  418.         }
  419.         return new JsonResponse(['code'=>'success','status'=>200,"message"=>"Validated successfully"],200);
  420.     }
  421.     public function send_password_reset(Request $request)
  422.     {
  423.         $validators = [];
  424.         if( !$request->request->has('email') || empty($request->get('email'))){
  425.             $validators['email'] = "Email is requireds";
  426.         }
  427.         if(count($validators)>0){
  428.             throw (new JsonResponse(['code'=>'error','status'=>422,"title" => "Confirmation Erreur","message"=>"The data provided was invalid","data"=>$validators],422))->send();
  429.         }
  430.         $email $request->get('email');
  431.         $body["args"] = [
  432.             "email" => $email
  433.         ];
  434.         $compte ApiAuth::getCompteByEmail($body);
  435.         if( $compte->compte != null ){
  436.             $body["args"] = [
  437.                 "Email" => $email
  438.             ];
  439.             $body["channels"] = ["mail"];
  440.             $response ApiAuth::reqResetPassword($body);
  441.             if($response->status == 200){
  442.                 return new JsonResponse(['code'=>'success','status'=>200,"message"=>"Email sent successfully"],200);
  443.             }
  444.             return new JsonResponse(["status" => 500 "code" => "error" "message" => "Some thing went wrong"],500);
  445.         }
  446.         return new JsonResponse(["status" => 404 "code" => "error" "message" => "Compte n'existe pas"],404);
  447.     }
  448.     public function submit_password_reset(Request $request)
  449.     {
  450.         
  451.         
  452.         if(!isset($_SESSION['reset_password']) && $_SESSION['reset_password']["ExpireIn"] < time()){
  453.             return new JsonResponse(["status" => 401 "code" => "error" "message" => "Operation Expired"],401);
  454.         }
  455.         $password $request->get('password');
  456.         $IdCompte $_SESSION['reset_password']['IdCompte'];
  457.         $body["args"] = [
  458.             "IdCompte" => $IdCompte,
  459.             "newPassword" => $password
  460.         ];
  461.         $body["channels"] = ["mail"];
  462.         $response ApiAuth::resetPassword($body);
  463.         if($response->status == 200){
  464.             // dd($request->get('token'));
  465.             
  466.             $res ApiAuth::revokeToken(['token'=>$request->get('token'),"revoked_by"=>$IdCompte]);
  467.             return new JsonResponse(["status" => 200 "code" => "success" "message" => "Password changed successfuly"],200);
  468.         }
  469.         
  470.         return new JsonResponse(["status" => 500 "code" => "error" "message" => "some thing went wrong"],500);
  471.     }
  472.     public function get_compte_connect(Request $request)
  473.     {
  474.         $session = [];
  475.         if( $this->session->get('user') != null ){
  476.             $session = [
  477.                 'X_NOM'=>$this->session->get('user')->X_NOM,
  478.                 'X_PRENOM'=>$this->session->get('user')->X_PRENOM,
  479.                 'IdCompte'=>Utils::DecryptJWT([
  480.                     'secret_key' => iConfig::getCryptSecretKey(),
  481.                     'secret_iv'  => iConfig::getCryptSecretIv(),
  482.                     'text'       => $this->session->get('user')->IdCompte
  483.                 ]),
  484.                 'pic_profile'=>$this->session->get('user')->pic_profile
  485.             ];
  486.         }
  487.         return new JsonResponse(["status" => 200 "code" => "success" "message" => "Compte Connected","session"=>$session]);
  488.         
  489.     }
  490.     public function switch_compte(Request $request)
  491.     {
  492.         $validators = [];
  493.         $validators = [];
  494.         if( !$request->request->has('password') || empty($request->get('password')) ){
  495.             $validators['password'] = "otp or password is requireds";
  496.         }
  497.         if( !$request->request->has('email') || empty($request->get('email'))){
  498.             $validators['fields'] = "some fields is requireds";
  499.         }
  500.         if(count($validators)>0){
  501.             // return new JsonResponse(['code'=>'error','status'=>422,"message"=>"The data provided was invalid","data"=>$validators],422);
  502.             throw (new JsonResponse(['code'=>'error','status'=>422,"title" => "Confirmation Erreur","message"=>"The data provided was invalid","data"=>$validators],422))->send();
  503.         }
  504.         
  505.         $params = [];
  506.         $params['username'] =   $request->get('email');
  507.         $params['password'] =   $request->get('password');
  508.         $params['expiresAfter'] = 864000;
  509.         
  510.         $response ApiAuth::usersSignin($params);
  511.         if( isset($response->token) ){
  512.             $compte ApiAuth::usersVerify(['token'=>$response->token,"revoke"=>false]);
  513.             self::loadSession($compte->user->id,$params['username'],$params['password'],$this,$request);
  514.             $session = [
  515.                 'X_NOM'=>$this->session->get('user')->X_NOM,
  516.                 'X_PRENOM'=>$this->session->get('user')->X_PRENOM,
  517.                 'IdCompte'=>$this->session->get('user')->IdCompte,
  518.                 'pic_profile'=>$this->session->get('user')->pic_profile
  519.             ];
  520.             $json_response = ['status'=>200,"code"=>"success","message"=>"compte switched","session"=>$session];
  521.             return new JsonResponse($json_response);
  522.         }
  523.         return new JsonResponse(["status" => 404 "code" => "error" "message" => "username or password incorrect"],404);
  524.     }
  525.     public function disconnect_compte(Request $request)
  526.     {
  527.         $connectedUser $this->session->get('user');
  528.         // matcherd user from users
  529.         $user array_filter($_SESSION['users'] , function($object) use ($connectedUser){
  530.             if( $connectedUser->IdCompte == $object["user"]->id){
  531.                 return $object;
  532.             }
  533.         });
  534.         $index array_keys($user);
  535.         // remove user from users session 
  536.         unset($_SESSION['users'][$index[0]]);
  537.         $_SESSION['users'] = array_values($_SESSION['users']);
  538.         $user reset($user);
  539.         $data["user_uuid"] =  $user["uuid"];
  540.         $this->session->remove('user');
  541.         $this->tokenStorage->setToken(null);
  542.         return new JsonResponse(["status" => 200 "code" => "success" "message" => "Compte Disconnected" "data" => $data],200);
  543.     }
  544.     protected static function loadSession($IdCompte,$identifiant,$password,$current,$request)
  545.     {
  546.         $current->tokenStorage->setToken(null);
  547.         // $request->getSession()->invalidate();
  548.         $compte ApiAuth::compteDetail($IdCompte);
  549.         $current->session->set('user'$compte->data->compte );
  550.         $current->session->set('compteid'$compte->data->compte->IdCompte );
  551.         $current->session->set('user_image'$compte->data->compte->pic_profile);
  552.         $user = new User();
  553.         $user->setId($compte->data->compte->IdCompte);
  554.         $user->setUserName($compte->data->compte->X_NOM.' '.$compte->data->compte->X_PRENOM);
  555.         $user->setEmail($identifiant);
  556.         $user->setFirstName($compte->data->compte->X_PRENOM);
  557.         $user->setLastName($compte->data->compte->X_NOM);
  558.         $user->setUserImage($compte->data->compte->pic_profile);
  559.         $user->setRoles(['ROLE_ADMIN']);
  560.         //Create session for symfony
  561.         $token = new UsernamePasswordToken($usernull'main', ['ROLE_ADMIN']);
  562.         $current->tokenStorage->setToken($token);
  563.         $request->getSession()->set('_security_main'serialize($token));
  564.         $dispatcher = new EventDispatcher();
  565.         $event = new InteractiveLoginEvent($request$token);
  566.         $dispatcher->dispatch($event);
  567.         try {
  568.             //generate user token
  569.             $uToken = new userToken(null,$current->session);
  570.             $userToken $uToken->authenticate($identifiant$password);
  571.             
  572.         } catch ( \Exception $th) {
  573.             error_log$th->getMessage() , 0);
  574.         }
  575.         // try {
  576.         //     // must check $userToken->status == 200 before continue
  577.         //     //push cookie 
  578.         //     $cToken = new cookieToken(null,$current->session);
  579.         //     $cToken->user_token = $userToken->token;
  580.         //     $cToken->set('lastName',$compte->data->compte->X_NOM);
  581.         //     $cToken->set('firstName',$compte->data->compte->X_PRENOM);
  582.         //     $cToken->push();
  583.             
  584.         // } catch ( \Exception $th) {
  585.         //     error_log( $th->getMessage() , 0);
  586.         // }
  587.         //test if request is xhr
  588.         if ($request->isXmlHttpRequest()){
  589.             return new JsonResponse(['message' => 'authenticated' 'code' => 'authenticated' 'status' => 200], 200);
  590.         }
  591.     }
  592.     public function get_apps(Request $request)
  593.     {   
  594.         try {
  595.             $body=[];
  596.             $results ApiUtils::GetApps($body);
  597.             $results Utils::recursiveCryptingJWT('cryptJWT',
  598.             ["ClientId""IdApps""IdAppsCat""IdAppsParent""IdEse""IdServerSmtpIn""IdServerSmtpOut"],$results);
  599.             return new JsonResponse($results); 
  600.             } catch (Exception $e) {
  601.                 return new JsonResponse(['error' => $e->getMessage()], 400);
  602.             }   
  603.     }
  604.     
  605. }