src/FHI360/Access/Portal/Controller/SecurityController.php line 23

Open in your IDE?
  1. <?php 
  2. namespace App\FHI360\Access\Portal\Controller;
  3. //use http\Env\Response;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  6. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  7. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  8. use Symfony\Component\HttpFoundation\RedirectResponse;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use \Curl\Curl;
  11. use Symfony\Component\Security\Core\Security;
  12. use Symfony\Component\HttpFoundation\Cookie;
  13. class SecurityController extends Controller
  14. {    
  15.     protected $authorizationChecker;
  16.     
  17.     /**
  18.      * @Route("/login", name="login")
  19.      */
  20.     public function loginAction(Request $request)
  21.     {
  22.         $this->authorizationChecker $this->get('security.authorization_checker');
  23.         // if user is logged in already, redirect to portal dashboard
  24.         if ($this->authorizationChecker->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
  25.             return new RedirectResponse($this->generateUrl('portal'));
  26.         }
  27.         
  28.         $authenticationUtils $this->get('security.authentication_utils');
  29.         
  30.         // get the login error if there is one
  31.         $error $authenticationUtils->getLastAuthenticationError();        
  32.         // last username entered by the user
  33.         $lastUsername $authenticationUtils->getLastUsername();
  34.         $check_if_javascript_is_enabled $this->getParameter("check_if_javascript_is_enabled");
  35.         $check_if_cookie_is_enabled $this->getParameter("check_if_cookie_is_enabled");
  36.         
  37.         //Check Browser compatibility
  38.         $suiteUtils $this->container->get('suite_utils');
  39.         $browser_details $suiteUtils->getBrowserDetails();
  40.         $browserName $browser_details['name'];
  41.         $acceptableBrowser = array('Mozilla Firefox','Apple Safari','Google Chrome''Microsoft Edge');
  42.         if(in_array($browserName,$acceptableBrowser)){
  43.             $check_browser_compatible "yes";
  44.         }else{
  45.             $check_browser_compatible "no";
  46.         }
  47.         return $this->render('Portal/Security/login.html.twig', array(
  48.             'lastUserName' => $lastUsername,
  49.             'check_browser_compatible' => $check_browser_compatible,
  50.             'check_if_javascript_is_enabled' => $check_if_javascript_is_enabled,
  51.             'check_if_cookie_is_enabled' => $check_if_cookie_is_enabled
  52.         ));
  53.     }
  54.     
  55.     /**
  56.      * @Route("/login_check", name="login_check")
  57.      */
  58.     public function loginCheckAction(Request $request)
  59.     {
  60.         return $this->render('Portal/Security/login.html.twig');
  61.     }
  62.     
  63.     /**
  64.      * @Route("/logout", name="logout")
  65.      */
  66.     public function logoutAction(){
  67.         throw new \Exception('This should not be reached!');
  68.     }
  69.     /**
  70.      * @Route("/extend_session", name="extend_session")
  71.      */
  72.     public function extendSessionAction(Request $request)
  73.     {
  74.         if ($request->hasSession()) {
  75.             $session $request->getSession();
  76.             if (isset($_COOKIE["PHPSESSID"])) {
  77.                 $session_created $session->getMetadataBag()->getCreated();
  78.                 $session_lifetime $session->getMetadataBag()->getLifetime();
  79.                 $session_expire_time $session_created $session_lifetime;
  80.                 $time_to_expire $session_expire_time time();
  81.                 //only ask user to extend the session when we have less than 15 minutes left
  82.                 $minutes_before_prompt $this->getParameter("session_timeout_timer_minutes");
  83.                 if ($time_to_expire && $time_to_expire $minutes_before_prompt 60) {
  84.                     $request->getSession()->migrate(true); //keep session active but generate new session id
  85.                     
  86.                     //set same session/cookie for suitecrm
  87.                     setcookie("PHPSESSID"$session->get('suite_session'), time()+$session_lifetime"/crm");
  88.                 }
  89.             }
  90.         }
  91.         $redirectUrl "https://{$this->getParameter('portal_domain')}";
  92.         return new RedirectResponse($redirectUrl);
  93.     }
  94.     /**
  95.      * @Route("/check_session", name="check_session")
  96.      */
  97.     public function checkSessionAction(Request $request)
  98.     {
  99.         $display_timeout_modal "false";
  100.         $this->authorizationChecker $this->get('security.authorization_checker');
  101.         // if user is logged in already, redirect to portal dashboard
  102.         if ($this->authorizationChecker->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
  103.             if ($request->hasSession()) {
  104.                 $session $request->getSession();
  105.                 if (isset($_COOKIE["PHPSESSID"])) {
  106.                     $session_created $session->getMetadataBag()->getCreated();
  107.                     $session_lifetime $session->getMetadataBag()->getLifetime();
  108.                     $session_expire_time $session_created $session_lifetime;
  109.                     $time_to_expire $session_expire_time time();
  110.                     //only ask user to extend the session when we have less than 15 minutes left
  111.                     $minutes_before_prompt $this->getParameter("session_timeout_timer_minutes");
  112.                     if ($time_to_expire && $time_to_expire $minutes_before_prompt 60) {
  113.                         $display_timeout_modal $time_to_expire;
  114.                     }
  115.                 }
  116.             }
  117.         }
  118.         return new Response($display_timeout_modal);
  119.     }
  120.     /**
  121.      * @Route("/reset-password", name="reset-password")
  122.      */
  123.     public function forgotPasswordAction(Request $request)
  124.     {
  125.         return $this->render('Portal/Security/reset-password.html.twig', array(
  126.                 'recaptcha_site_key' => $this->getParameter('recaptcha_site_key'),
  127.                 'forgot_password_url' => $this->getParameter('forgot_password_url'),
  128.                 'lastEmail' => "",
  129.         ));
  130.     }
  131.     /**
  132.      * @Route("/changenewpassword", name="Changenewpassword")
  133.      */
  134.     public function changenewpasswordAction(Request $request)
  135.     {
  136.         $suiteUtils $this->container->get('suite_utils');
  137.         $password_link_id $request->query->get('guid');
  138.         $password_link_details $suiteUtils->getPasswordLinkDetails($password_link_id);
  139.         $linkexpiration 24;
  140.         $expired='0';
  141.         if(sizeof($password_link_details)==0){
  142.             // Set success error message
  143.             $this->addFlash(
  144.                 'error',
  145.                 'The reset password link has been expired. Please create a new one using forgot password'
  146.             );
  147.             // Redirect to login page
  148.             return $this->redirectToRoute('login');
  149.         }
  150.         $password_link_details $password_link_details[0];
  151.         if($linkexpiration){
  152.             $delay=$linkexpiration*60*60;
  153.             $stim strtotime($password_link_details['date_generated']) + date('Z');
  154.             $expiretime =$stim+$delay;
  155.             $timenow time();
  156.             if ($timenow $expiretime){
  157.                 // Set success error message
  158.                 $this->addFlash(
  159.                     'error',
  160.                     'The reset password link has been expired. Please create a new one using forgot password'
  161.                 );
  162.                 // Redirect to login page
  163.                 return $this->redirectToRoute('login');
  164.             }
  165.         }
  166.         $file $this->get('kernel')->getProjectDir().'/password-requirements.json';
  167.         $password_settings json_decode(file_get_contents($file),true);
  168.         $data = array(
  169.             'tools' => '',
  170.             'username' => $password_link_details['username'],
  171.             'guid' => $password_link_id,
  172.             'first_name' => $password_link_details['first_name'],
  173.             'last_name' => $password_link_details['last_name'],
  174.             'email' => $password_link_details['email'],
  175.             'password_settings'=>$password_settings,
  176.         );
  177.         return $this->render('Portal/Security/generate-password.html.twig',$data);
  178.     }
  179.     /**
  180.      * @Route("/changenewpassword/submit", name="changenewpassword-submit")
  181.      */
  182.     public function changenewpasswordSubmitAction(Request $request){
  183.         // FHI360\Access\SuiteBundle\Service\SuiteUtils
  184.         $suiteUtils $this->container->get('suite_utils');
  185.         // Get the fields from request
  186.         $form_user_name $request->request->get('user_name');
  187.         $form_new_password $request->request->get('new_password');
  188.         $form_confirm_password $request->request->get('confirm_password');
  189.         $form_guid $request->request->get('guid');
  190.         $firstName $request->request->get('first_name');
  191.         $lastName $request->request->get('last_name');
  192.         $email $request->request->get('email');
  193.         $file $this->get('kernel')->getProjectDir().'/password-requirements.json';
  194.         $password_settings json_decode(file_get_contents($file),true);
  195.         $password_ok true;
  196.         if(!empty($form_new_password)) {
  197.             if(empty($form_confirm_password)) {
  198.                 $this->addFlash(
  199.                     'error',
  200.                     "Please enter Confirmation Password"
  201.                 );
  202.                 $password_ok false;
  203.                 return $this->redirect('/changenewpassword?guid='.$form_guid);
  204.             } else if($form_new_password !== $form_confirm_password) {
  205.                 $this->addFlash(
  206.                     'error',
  207.                     "New and Confirmation Passwords don't match"
  208.                 );
  209.                 $password_ok false;
  210.                 return $this->redirect('/changenewpassword?guid='.$form_guid);
  211.             }
  212.             $password_requirements $suiteUtils->validatePasswordRequirements($file,$form_new_password,strtolower($form_user_name),strtolower($firstName),strtolower($lastName),strtolower($email));
  213.             if(!$password_requirements['valid']){
  214.                 $this->addFlash(
  215.                     'error',
  216.                     $password_requirements['message']
  217.                 );
  218.                 $password_ok false;
  219.                 return $this->redirect('/changenewpassword?guid='.$form_guid);
  220.             }
  221.         }
  222.         if($password_ok && !empty($form_new_password) && !empty($form_confirm_password) && !empty($form_user_name)){
  223.             $sugarURL $this->getParameter('suitecrml_url');
  224.             $url $sugarURL "/index.php?entryPoint=change_new_password";
  225.             $curl = new Curl($url);
  226.             $curl->setOpt(CURLOPT_SSL_VERIFYPEERfalse);
  227.             $curl->setOpt(CURLOPT_RETURNTRANSFERtrue);
  228.             $curl->setOpt(CURLOPT_FOLLOWLOCATIONfalse);
  229.             $post_param = array(
  230.                 'user_name' => $form_user_name,
  231.                 'new_password' => trim($form_new_password),
  232.                 'guid' => $form_guid,
  233.                 'previous_passwords' => $password_settings['previous_passwords']['required'],
  234.                 'previous_passwords_count' => $password_settings['previous_passwords']['min'],
  235.             );
  236.             $curl->post($url$post_param);
  237.             $response_data json_decode(json_encode($curl->response), true);
  238.             if(isset($response_data) && $response_data==false) {
  239.                 $this->addFlash('error'"There was an error when trying to change your password.");
  240.                 return $this->redirect('/changenewpassword?guid='.$form_guid);
  241.             }else if(isset($response_data) && $response_data=='password_used'){
  242.                 $this->addFlash('error'$password_settings['previous_passwords']['message']);
  243.                 return $this->redirect('/changenewpassword?guid='.$form_guid);
  244.             }
  245.             else {
  246.                 $this->addFlash('notice'"Your password has been reset.");
  247.                 return $this->redirectToRoute('login');
  248.             }
  249.         }else{
  250.             return $this->redirect('/changenewpassword?guid='.$form_guid);
  251.         }
  252.     }
  253.     
  254.     /**
  255.      * @Route("/send-forgot-password", name="send-forgot-password")
  256.      */
  257.     public function sendForgotPasswordAction(Request $request)
  258.     {
  259.         // FHI360\Access\SuiteBundle\Service\SuiteUtils
  260.         $suiteUtils $this->container->get('suite_utils');
  261.         
  262.         $lastEmail = !empty($request->request->get('fp_user_mail')) ? $request->request->get('fp_user_mail') : "";
  263.         
  264.         // Set URL to verify user captcha before calling SuiteCRM reset password endpoint        
  265.         $recaptcha_verify_url $this->getParameter('recaptcha_verify_url');
  266.         $curl = new Curl($recaptcha_verify_url);
  267.         
  268.         $curl->setOpt(CURLOPT_SSL_VERIFYPEERfalse);
  269.         $curl->setOpt(CURLOPT_RETURNTRANSFERtrue);
  270.         $curl->setOpt(CURLOPT_FOLLOWLOCATIONfalse);        
  271.         
  272.         // Setting the values defined at 
  273.         // https://www.google.com/recaptcha/admin#site/338881496?setup
  274.         $post = array(
  275.                 'secret' => $this->getParameter('recaptcha_secret_key'),
  276.                 'response' => $request->request->get('g-recaptcha-response'),
  277.         );
  278.         
  279.         $curl->post($recaptcha_verify_url$post);
  280.         
  281.         $response_data json_decode(json_encode($curl->response), true);  
  282.         
  283.         // If captcha verified send forgot password 
  284.         // email and redirect to login page
  285.         if($response_data['success']){
  286.             
  287.             $userName $request->request->get('fp_user_name');
  288.             //Check Restrict user before sending any email
  289.             $userRestrictCheck $suiteUtils->getUserRestrictCheck($userName);
  290.             if($userRestrictCheck == 1){
  291.                 $this->addFlash('error''Invalid User Login');
  292.                 // Redirect to login page
  293.                 return $this->redirectToRoute('login');
  294.             }
  295.             
  296.             // Call SuiteCRM to send reset password email
  297.             $post = array(
  298.                     'user_name' => $request->request->get('fp_user_name'),
  299.                     'user_email' => $request->request->get('fp_user_mail'),
  300.                     'link' => '1',
  301.             );
  302.             
  303.             $sugarURL "https://{$this->getParameter('suite_domain')}";
  304.             $curl->post("$sugarURL/index.php?entryPoint=GeneratePassword"$post);
  305.             $response_data json_decode(json_encode($curl->response), true);  
  306.             
  307.             if($response_data == "1"){
  308.                 
  309.                 // Set success error message
  310.                 $this->addFlash(
  311.                     'notice',
  312.                     'The email was sent! Please check your inbox to reset your password.'
  313.                 );
  314.                 
  315.                 // Redirect to login page
  316.                 return $this->redirectToRoute('login');
  317.             } else {
  318.                 // Set email address
  319.                 
  320.                 // Show error
  321.                 $this->addFlash(
  322.                     'error',
  323.                     "The email couldn't be sent, please check your email address or contact the Access Tech Team."
  324.                 );
  325.             }            
  326.             
  327.         } else {
  328.             // Show error
  329.             $this->addFlash(
  330.                 'error',
  331.                 "Please complete the reCaptcha challenge before submitting your request."
  332.             );
  333.         }
  334.         
  335.         return $this->render('Portal/Security/reset-password.html.twig', array(
  336.                 'recaptcha_site_key' => $this->getParameter('recaptcha_site_key'),
  337.                 'forgot_password_url' => $this->getParameter('forgot_password_url'),
  338.                 'lastEmail' => $lastEmail
  339.         ));
  340.     }
  341.     /**
  342.      * @Route("/changepassword", name="Changepassword")
  343.      */
  344.     public function changepasswordAction(Request $request)
  345.     {
  346.         $suiteUtils $this->container->get('suite_utils');
  347.         $password_link_id $request->query->get('guid');
  348.         $password_link_details $suiteUtils->getPasswordLinkDetails($password_link_id);
  349.         if(sizeof($password_link_details)==0){
  350.             // Set success error message
  351.             $this->addFlash(
  352.                 'error',
  353.                 'The reset password link has been expired. Please create a new one using forgot password'
  354.             );
  355.             // Redirect to login page
  356.             return $this->redirectToRoute('login');
  357.         }
  358.         $password_link_details $password_link_details[0];
  359.         $file $this->get('kernel')->getProjectDir().'/password-requirements.json';
  360.         $password_settings json_decode(file_get_contents($file),true);
  361.         $data = array(
  362.             'tools' => '',
  363.             'username' => $password_link_details['username'],
  364.             'guid' => $password_link_id,
  365.             'first_name' => $password_link_details['first_name'],
  366.             'last_name' => $password_link_details['last_name'],
  367.             'email' => $password_link_details['email'],
  368.             'password_settings'=>$password_settings,
  369.         );
  370.         return $this->render('Portal/Security/change-old-password.html.twig',$data);
  371.     }
  372.     /**
  373.      * @Route("/changepassword/submit", name="changepassword-submit")
  374.      */
  375.     public function changepasswordSubmitAction(Request $request){
  376.         // FHI360\Access\SuiteBundle\Service\SuiteUtils
  377.         $suiteUtils $this->container->get('suite_utils');
  378.         // Get the fields from request
  379.         $form_user_name $request->request->get('user_name');
  380.         $form_old_password $request->request->get('old_password');
  381.         $form_new_password $request->request->get('new_password');
  382.         $form_confirm_password $request->request->get('confirm_password');
  383.         $form_guid $request->request->get('guid');
  384.         $firstName $request->request->get('first_name');
  385.         $lastName $request->request->get('last_name');
  386.         $email $request->request->get('email');
  387.         $file $this->get('kernel')->getProjectDir().'/password-requirements.json';
  388.         $password_settings json_decode(file_get_contents($file),true);
  389.         $password_ok true;
  390.         if(!empty($form_new_password)) {
  391.             if(empty($form_old_password)) {
  392.                 $this->addFlash(
  393.                     'error',
  394.                     "Please enter Current Password"
  395.                 );
  396.                 $password_ok false;
  397.                 return $this->redirect('/changepassword?guid='.$form_guid);
  398.             }
  399.             else if(empty($form_confirm_password)) {
  400.                 $this->addFlash(
  401.                     'error',
  402.                     "Please enter Confirmation Password"
  403.                 );
  404.                 $password_ok false;
  405.                 return $this->redirect('/changepassword?guid='.$form_guid);
  406.             } else if($form_new_password !== $form_confirm_password) {
  407.                 $this->addFlash(
  408.                     'error',
  409.                     "New and Confirmation Passwords don't match"
  410.                 );
  411.                 $password_ok false;
  412.                 return $this->redirect('/changepassword?guid='.$form_guid);
  413.             }
  414.             $password_requirements $suiteUtils->validatePasswordRequirements($file,$form_new_password,strtolower($form_user_name),strtolower($firstName),strtolower($lastName),strtolower($email));
  415.             if(!$password_requirements['valid']){
  416.                 $this->addFlash(
  417.                     'error',
  418.                     $password_requirements['message']
  419.                 );
  420.                 $password_ok false;
  421.                 return $this->redirect('/changepassword?guid='.$form_guid);
  422.             }
  423.         }
  424.         if($password_ok && !empty($form_new_password) && !empty($form_confirm_password) && !empty($form_user_name)){
  425.             $sugarURL $this->getParameter('suitecrml_url');
  426.             $url $sugarURL "/index.php?entryPoint=change_new_password";
  427.             $curl = new Curl($url);
  428.             $curl->setOpt(CURLOPT_SSL_VERIFYPEERfalse);
  429.             $curl->setOpt(CURLOPT_RETURNTRANSFERtrue);
  430.             $curl->setOpt(CURLOPT_FOLLOWLOCATIONfalse);
  431.             $post_param = array(
  432.                 'user_name' => $form_user_name,
  433.                 'old_password' => trim($form_old_password),
  434.                 'new_password' => trim($form_new_password),
  435.                 'guid' => $form_guid,
  436.                 'previous_passwords' => $password_settings['previous_passwords']['required'],
  437.                 'previous_passwords_count' => $password_settings['previous_passwords']['min'],
  438.             );
  439.             $curl->post($url$post_param);
  440.             $response_data json_decode(json_encode($curl->response), true);
  441.             $this->container->get('session')->getFlashBag()->clear();
  442.             if(isset($response_data) && $response_data==false) {
  443.                 $this->addFlash('error'"There was an error when trying to change your password.");
  444.                 return $this->redirect('/changepassword?guid='.$form_guid);
  445.             }else if(isset($response_data) && $response_data=='password_failed'){
  446.                 $this->addFlash('error''There was an error when trying to change your password, make sure the current password is correct.');
  447.                 return $this->redirect('/changepassword?guid='.$form_guid);
  448.             }else if(isset($response_data) && $response_data=='password_used'){
  449.                 $this->addFlash('error'$password_settings['previous_passwords']['message']);
  450.                 return $this->redirect('/changepassword?guid='.$form_guid);
  451.             }
  452.             else {
  453.                 $this->addFlash('notice'"Your password has been reset.");
  454.                 return $this->redirectToRoute('login');
  455.             }
  456.         }else{
  457.             return $this->redirect('/changepassword?guid='.$form_guid);
  458.         }
  459.     }
  460.     /**
  461.      * @Route("/policies", name="policies")
  462.      */
  463.     public function policies(Request $request)
  464.     {
  465.         if($this->getParameter("enable_disclaimer")=='no'){
  466.             return $this->redirect('/');
  467.         }
  468.         $suiteUtils $this->container->get('suite_utils');
  469.         $gid $request->query->get('guid');
  470.         if(isset($gid) && $gid!=""){
  471.             $password_link_details $suiteUtils->getPasswordLinkDetails($gid);
  472.             if(sizeof($password_link_details)==0){
  473.                 // Set success error message
  474.                 $this->addFlash(
  475.                     'error',
  476.                     'The link has been expired.'
  477.                 );
  478.                 // Redirect to login page
  479.                 return $this->redirectToRoute('login');
  480.             }
  481.         }
  482.         $file $this->get('kernel')->getProjectDir().'/policy-document.txt';
  483.         $policy_content file_get_contents($file,FILE_IGNORE_NEW_LINES);
  484.         $data = array(
  485.             'tools' => '',
  486.             'policy_content' => nl2br($policy_content,true),
  487.             'guid' => $gid
  488.         );
  489.         return $this->render('Portal/Security/policies.html.twig',$data);
  490.     }
  491.     /**
  492.      * @Route("/policies-submit", name="policies-submit")
  493.      */
  494.     public function policiesSubmitAction(Request $request)
  495.     {
  496.         $suiteUtils $this->container->get('suite_utils');
  497.         if($this->get('security.token_storage')->getToken() != null && $this->get('security.token_storage')->getToken()->getUsername() != 'anon.'){
  498.             $user $this->get('security.token_storage')->getToken()->getUser();
  499.             $user_id $user->getID();
  500.             $user_name $user->getUsername();
  501.             $suiteUtils->saveUserAcceptedTerms($user_id,$user_name);
  502.             $request->getSession()->set("user_accepted_terms",'yes');
  503.             return $this->redirect('/');
  504.         }else{
  505.             $gid $request->request->get('guid');
  506.             if(isset($gid) && $gid!=""){
  507.                 $password_link_details $suiteUtils->getPasswordLinkDetails($gid);
  508.                 if(sizeof($password_link_details)==0){
  509.                     // Set success error message
  510.                     $this->addFlash(
  511.                         'error',
  512.                         'The link has been expired.'
  513.                     );
  514.                     // Redirect to login page
  515.                     return $this->redirectToRoute('login');
  516.                 }
  517.                 $suiteUtils->saveUserAcceptedTerms($password_link_details[0]['user_id'],$password_link_details[0]['username']);
  518.                 return $this->redirect('/changepassword?guid='.$gid);
  519.             }
  520.         }
  521.     }
  522.     /**
  523.      * @Route("/set-user-consent", name="set-user-consent")
  524.      */
  525.     public function setUserConsentAction(Request $request){
  526.         $user $this->get('security.token_storage')->getToken()->getUser();
  527.         $suiteUtils $this->container->get('suite_utils');
  528.         
  529.         $user_id $user->getID();
  530.         $suiteUtils->saveUserConsent($user_id);
  531.         
  532.         return $this->redirectToRoute('login');
  533.     }
  534.     
  535.     
  536.     /**
  537.      * @Route("/masquerade", name="masquerade")
  538.      * @author Mahesh
  539.      * Check if the logged in user is admin and rewrite
  540.      * the session to make the logged in user as requested user.
  541.      */
  542.     public function masqueradeAction(Request $request)
  543.     {
  544.         $this->authorizationChecker $this->get('security.authorization_checker');
  545.         if ($this->authorizationChecker->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
  546.             if ($request->hasSession()) {
  547.                 $user $this->get('security.token_storage')->getToken()->getUser();
  548.                 $suiteUtils $this->container->get('suite_utils');
  549.                 $user_has_switch_permission $suiteUtils->getUserPermissionForSwitchUser($user->getID());
  550.                 if($user_has_switch_permission){
  551.                     setcookie("masquerade""true");
  552.                     return $this->redirect("/?_swtich_user=".$request->query->get('username'));
  553.                 }else{
  554.                     return new RedirectResponse($this->generateUrl('portal'));
  555.                 }
  556.             }
  557.         }
  558.     }
  559. }