src/Controller/SecurityController.php line 235

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\Routing\Annotation\Route;
  7. use Symfony\Component\HttpFoundation\JsonResponse;
  8. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  9. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  10. use Symfony\Component\Security\Core\Security;
  11. use App\Form\SendLinkPasswordType;
  12. use App\Form\ResetPasswordType;
  13. use App\Form\ChangePasswordType;
  14. use App\Form\UserType;
  15. use App\Form\UserTypeFakRegister;
  16. Use App\Form\CheckFAKNumberType;
  17. use App\Form\CompanyType;
  18. use App\Entity\Participant;
  19. use Smt\CoreBundle\Service\SmtApi;
  20. use Symfony\Contracts\Translation\TranslatorInterface;
  21. use App\Service\MessageGenerator;
  22. use Symfony\Contracts\HttpClient\HttpClientInterface;
  23. class SecurityController extends AbstractController
  24. {
  25.   private $Lo_SmtApi;
  26.   private $Lo_Security;
  27.   private $Lo_MessageGenerator;
  28.   private $Lo_Participant;
  29.   private $o_Session;
  30.   private $client;
  31.   public function __construct(
  32.     SmtApi $Ao_SmtApi
  33.     Security $security,
  34.     MessageGenerator $messageGenerator,
  35.     Participant $participant,
  36.     SessionInterface $session,
  37.     HttpClientInterface $client
  38.   ){
  39.     $this->Lo_SmtApi $Ao_SmtApi;
  40.     $this->Lo_Security $security;
  41.     $this->Lo_MessageGenerator $messageGenerator;
  42.     $this->Lo_Participant $participant;
  43.     $this->o_Session $session;
  44.     $this->client $client;
  45.   }
  46.     /**
  47.     * @Route("/login")
  48.     */
  49.     public function indexNoLocale()
  50.     {
  51.         return $this->redirectToRoute('app_login', ['_locale' => 'de']);
  52.     }
  53.     /**
  54.      * @Route("/{_locale<%app.supported_locales%>}/login", name="app_login")
  55.      */
  56.     public function login(AuthenticationUtils $authenticationUtilsRequest $request): Response
  57.     {
  58.       $referer $request->headers->get('referer');
  59.       if(empty($referer)) {
  60.         $session $request->getSession();
  61.         $session->remove('initial_referer');
  62.       }
  63.       $pathQuery $request->query->get('path_query');
  64.       if ($this->getUser()) {
  65.         if ($referer != null && $pathQuery != null) {
  66.           $pathQuerySlash str_replace('-''/'$pathQuery);
  67.           $pathCatalog $referer $pathQuerySlash;
  68.           return $this->redirect($pathCatalog);
  69.         }
  70.         return $this->redirectToRoute('app_home');
  71.       }
  72.       // get the login error if there is one
  73.       $error $authenticationUtils->getLastAuthenticationError();
  74.       // last username entered by the user
  75.       $lastUsername $authenticationUtils->getLastUsername();
  76.       $Lb_HasLeadership = (stripos($referer'leadership') !== false) ||
  77.         (stripos($referer'slapro') !== false);
  78.       return $this->render('security/login.html.twig', [
  79.         'last_username' => $lastUsername
  80.         'error' => $error,
  81.         'company_register' => !$Lb_HasLeadership
  82.       ]);
  83.     }
  84.     /**
  85.    * @Route("/{_locale<%app.supported_locales%>}/register", name="app_register", options={"expose"=true})
  86.      */
  87.     public function register(
  88.       Request $request
  89.       TranslatorInterface $translator
  90.     ) {
  91.       $Ls_TargetPath $request->getSession()->get('_security.main.target_path'); 
  92.       if(strpos($Ls_TargetPath"/apps/book/"))
  93.         $this->o_Session->set('register/target/'$Ls_TargetPath);
  94.       $form $this->createForm(UserType::class);
  95.       $form->handleRequest($request);
  96.       $error 1;
  97.       $Ls_InitialReferer $request->getSession()->get('initial_referer');
  98.       if ($form->isSubmitted() && $form->isValid()) {
  99.         $La_FormData $form->getData();
  100.         $La_FormData['URL'] = $request->getScheme() . '://' $request->getHttpHost();
  101.         $La_FormData['Password'] = $form->get('Password')->getData();
  102.         $La_FormData['Language'] = $request->getLocale();
  103.         $La_FormData['i_UserType'] = 2// als Privatperson registrieren
  104.         $La_FormData['s_InitialReferer'] = $Ls_InitialReferer;
  105.         $Ls_Answer $this->Lo_Participant->register($La_FormData);
  106.         $Lo_Answer json_decode($Ls_Answer);
  107.         $error $Lo_Answer->Error;
  108.         if($Lo_Answer->Error == && $Lo_Answer->Result->RegisterState == 2)
  109.         {
  110.           $Ls_Message $translator->trans('you_will_shortly_receive_an_email_with_a_link_to_confirm_the_email_address');
  111.           $this->addFlash('success'$Ls_Message); 
  112.         } // if
  113.         else{
  114.           $Ls_Message $translator->trans($this->Lo_MessageGenerator->getErrorMessage($Lo_Answer->Error)) . '!';
  115.           $this->addFlash('error'$Ls_Message);
  116.         } // else
  117.       }
  118.       return $this->render('security/register.html.twig', ['form' => $form->createView(), 'error' => $error'RegisterState' => 0]);
  119.     }
  120.     /**
  121.    * @Route("/{_locale<%app.supported_locales%>}/register_company", name="app_register_company", options={"expose"=true})
  122.      */
  123.     public function registerCompany(
  124.       Request $request
  125.       TranslatorInterface $translator
  126.     ) {
  127.       $Ls_TargetPath $request->getSession()->get('_security.main.target_path');
  128.       if(strpos($Ls_TargetPath"/apps/book/"))
  129.         $this->o_Session->set('register/target/'$Ls_TargetPath);
  130.       $form $this->createForm(CompanyType::class);
  131.       $form->handleRequest($request);
  132.       $error 1;
  133.       if ($form->isSubmitted() && $form->isValid()) {
  134.         $La_FormData $form->getData();
  135.         $La_FormData['URL'] = $request->getScheme() . '://' $request->getHttpHost();
  136.         $La_FormData['Password'] = $form->get('Password')->getData();
  137.         $La_FormData['Language'] = $request->getLocale();
  138.         $La_FormData['i_UserType'] = 1// als Firma registrieren
  139.         $Ls_Answer $this->Lo_Participant->registerCompany($La_FormData);
  140.         $Lo_Answer json_decode($Ls_Answer);
  141.         $error $Lo_Answer->Error;
  142.         if($Lo_Answer->Error == && $Lo_Answer->Result->RegisterState == 2)
  143.         {
  144.           $Ls_Message $translator->trans('you_will_shortly_receive_an_email_with_a_link_to_confirm_the_email_address');
  145.           $this->addFlash('success'$Ls_Message); 
  146.         } // if
  147.         else {
  148.           $Ls_Message $translator->trans($this->Lo_MessageGenerator->getErrorMessage($Lo_Answer->Error)) . '!';
  149.           $this->addFlash('error'$Ls_Message);
  150.         } // else
  151.       }
  152.       return $this->render('security/register_company.html.twig', ['form' => $form->createView(), 'error' => $error'RegisterState' => 0]);
  153.     }
  154.     /**
  155.    * @Route("/ValidateRegistration", name="app_validateregistration", options={"expose"=true})
  156.      */
  157.     public function validateRegistration(
  158.       Request $request
  159.       TranslatorInterface $translator
  160.     ) {
  161.       $Ls_RegisterState 0;
  162.       $Ls_ValidationCode $request->query->get('Token');
  163.       $Ls_Sid $request->query->get('sid');
  164.       $La_ValidationData = [
  165.         's_ValidationCode' => $Ls_ValidationCode,
  166.         's_Sid' => $Ls_Sid,
  167.         's_URL' => $request->getScheme() . '://' $request->getHttpHost()
  168.       ];
  169.       $Ls_Answer $this->Lo_Participant->validateRegistration($La_ValidationData);
  170.       $Lo_Answer json_decode($Ls_Answer);
  171.       $error $Lo_Answer->Error;
  172.       if(isset($Lo_Answer->Result->RegisterState)) $Ls_RegisterState $Lo_Answer->Result->RegisterState;      
  173.       if($Lo_Answer->Error == && $Ls_RegisterState == 1)
  174.       {
  175.         $Ls_Message $translator->trans('registration_complete');
  176.         $this->addFlash('success',  $Ls_Message);    
  177.         $this->Lo_Participant->addComment(30'Ausstehender Arbeitgeber'$Lo_Answer->Result->i_PersonID);  
  178.         if ($Lo_Answer->Result->s_Target == 'app_login')
  179.           return $this->redirectToRoute('app_login');  
  180.         else return $this->redirect($Lo_Answer->Result->s_Target);           
  181.       } // if
  182.       else
  183.       {
  184.         $Ls_Message $translator->trans($this->Lo_MessageGenerator->getErrorMessage($Lo_Answer->Error)) . '!';   
  185.         $this->addFlash('error'$Ls_Message);
  186.         return $this->redirectToRoute('app_register'); 
  187.       } // else
  188.     }
  189.     /**
  190.      * @Route("/{_locale<%app.supported_locales%>}/sendlinkpass", name="app_sendlinkpass")
  191.      */
  192.     public function sendLinkPassword(
  193.       Request $request
  194.       TranslatorInterface $translator
  195.     ): Response
  196.     {
  197.       $form $this->createForm(SendLinkPasswordType::class);
  198.       $form->handleRequest($request);
  199.       if ($form->isSubmitted() && $form->isValid()) {
  200.         $Ls_ApiUrl 'Authorization/ResetPassword';
  201.         $La_Data $form->getData();
  202.         $Ao_ResultHeaders = array();
  203.         $La_Data['Username'] = $La_Data['Email'];
  204.         $La_Data['SendEmail'] = true;
  205.         $La_Data['URL'] = $request->getScheme() . '://' $request->getHttpHost() . "/de/resetpass"//// Achtung
  206.         $La_Data['s_InitialReferer'] = $request->getSession()->get('initial_referer');
  207.         $Ls_Data json_encode($La_Data);
  208.         $Lo_Header '';
  209.         $Ls_Answer $this->Lo_SmtApi->callApi('POST'$Ls_ApiUrl$Ls_Datatrue ,$Lo_Header$Ao_ResultHeaders);
  210.         $Lo_Answer json_decode($Ls_Answer);
  211.         $this->o_Session->set('core/a_Person/LoginHeaders/Set-Cookie'$Ao_ResultHeaders['Set-Cookie']);
  212.         if($Lo_Answer->Error == 0)
  213.         {
  214.           $Ls_Message $translator->trans('password_sent') . '!';
  215.           $this->addFlash('success'$Ls_Message);
  216.           return $this->render('apps/message.html.twig');
  217.         } // if
  218.         else {
  219.           $Ls_Message $translator->trans($this->Lo_MessageGenerator->getErrorMessage($Lo_Answer->Error)) . '!'
  220.           $this->addFlash('error'$Ls_Message);
  221.           return $this->render('security/sendlinkpassword.html.twig', [
  222.             'form' => $form->createView(),
  223.           ]);
  224.         } // else
  225.       }
  226.       return $this->render('security/sendlinkpassword.html.twig', ['form' => $form->createView(),]);
  227.     }
  228.     /**
  229.    * @Route("/{_locale<%app.supported_locales%>}/resetpass/ChangePassword", name="app_resetpass")
  230.      */
  231.     public function resetPassword(
  232.       Request $request
  233.       TranslatorInterface $translator
  234.     ): Response
  235.     {
  236.         $form $this->createForm(ResetPasswordType::class);
  237.         $Ls_Token $request->query->get('ResetToken');
  238.         $form->handleRequest($request);
  239.         if ($form->isSubmitted() && $form->isValid()) {
  240.           $Ls_ApiUrl 'Authorization/ChangePassword';
  241.           $La_Data $form->getData();
  242.           $Ao_ResultHeaders = array();
  243.           $La_Data['Username'] = $La_Data['Email'];
  244.           $La_Data['SendEmail'] = true;
  245.           $La_Data['ResetCode'] = $Ls_Token;
  246.           $La_Data['s_InitialReferer'] = $request->getSession()->get('initial_referer');
  247.           $Ls_Data json_encode($La_Data);
  248.           $Lo_Header 'Cookie: ' $this->o_Session->get('core/a_Person/LoginHeaders/Set-Cookie');
  249.           $Ls_Answer $this->Lo_SmtApi->callApi('POST'$Ls_ApiUrl$Ls_Datatrue$Lo_Header$Ao_ResultHeaders);
  250.           $Lo_Answer json_decode($Ls_Answer);
  251.           if($Lo_Answer->Error == 0)
  252.           {
  253.             $Ls_Message $translator->trans('password_changed') . '!';
  254.             $this->addFlash('success'$Ls_Message);
  255.           } // if
  256.           else{
  257.             $Ls_Message $translator->trans($this->Lo_MessageGenerator->getErrorMessage($Lo_Answer->Error)) . '!';
  258.             $this->addFlash('error'$Ls_Message);
  259.           } // else
  260.         }
  261.         return $this->render('security/resetpassword.html.twig', ['form' => $form->createView(), 'token' => $Ls_Token]);
  262.     }
  263.     /**
  264.    * @Route("/{_locale<%app.supported_locales%>}/changepass", name="app_changepass")
  265.      */
  266.     public function changePassword(
  267.       Request $request
  268.       TranslatorInterface $translator
  269.     ): Response
  270.     {
  271.         $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  272.         $form $this->createForm(ChangePasswordType::class);
  273.         $form->handleRequest($request);
  274.         if ($form->isSubmitted() && $form->isValid()) {
  275.           $Ls_ApiUrl 'Authorization/ResetPassword';
  276.           $user $this->getUser();
  277.           $La_Data $form->getData();
  278.           $Ao_ResultHeaders = array();
  279.           $La_Data['Email'] = $user->getEmail();
  280.           $La_Data['Username'] = $La_Data['Email'];
  281.           $La_Data['SendEmail'] = false;
  282.           $La_Data['URL'] = $_SERVER['HTTP_HOST'] . $request->getBasePath() . "/resetpass"//// Achtung
  283.           $Ls_Data json_encode($La_Data);
  284.           $Lo_Header 'Cookie: ' $this->o_Session->get('core/a_Person/LoginHeaders/Set-Cookie');
  285.           $Ls_Answer $this->Lo_SmtApi->callApi('POST'$Ls_ApiUrl$Ls_Datatrue$Lo_Header$Ao_ResultHeaders);
  286.           $Lo_Answer json_decode($Ls_Answer);
  287.           $this->o_Session->set('core/a_Person/LoginHeaders/Set-Cookie'$Ao_ResultHeaders['Set-Cookie']);
  288.           if($Lo_Answer->Error == 0)
  289.           {
  290.             $La_Data['ResetCode'] = $Lo_Answer->Result->ResetCode;
  291.             $Ls_ApiUrl 'Authorization/ChangePassword';
  292.             $Lo_Header 'Cookie: ' $this->o_Session->get('core/a_Person/LoginHeaders/Set-Cookie');
  293.             $Ls_Data json_encode($La_Data);
  294.             $Ls_Answer $this->Lo_SmtApi->callApi('POST'$Ls_ApiUrl$Ls_Datatrue$Lo_Header$Ao_ResultHeaders);
  295.             $Lo_Answer json_decode($Ls_Answer);
  296.             if($Lo_Answer->Error == 0)
  297.             {
  298.               $Ls_Message $translator->trans('password_changed') . '!';
  299.               $this->addFlash('success'$Ls_Message);
  300.             } // if
  301.             else{
  302.               $Ls_Message $translator->trans($this->Lo_MessageGenerator->getErrorMessage($Lo_Answer->Error)) . '!';
  303.               $this->addFlash('error'$Ls_Message);
  304.             } // else
  305.           // if
  306.           else{
  307.             $Ls_Message $translator->trans($this->Lo_MessageGenerator->getErrorMessage($Lo_Answer->Error)) . '!';
  308.             $this->addFlash('error'$Ls_Message);
  309.           } // else
  310.         }
  311.         return $this->render('security/changepassword.html.twig', ['form' => $form->createView()]);
  312.     }
  313.     /**
  314.      * @Route("/logout", name="app_logout")
  315.      */
  316.     public function logout()
  317.     {
  318.         throw new \LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.');
  319.     }
  320.   /**
  321.   * @Route("/api/user/profile", name="app_getuserprofile", methods={"GET"})
  322.   */
  323.   public function getUserProfile(Request $request) {
  324.     $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  325.     $Ls_EndPoint 'Authorization/getprofile';
  326.     $Lo_User $this->Lo_Security->getUser();
  327.     $Li_PersonID $Lo_User->getPersonID();
  328.     $La_Data = [
  329.       "Li_PersonID" => $Li_PersonID
  330.     ];
  331.     $Lo_Header 'Cookie: ' $this->o_Session->get('core/a_Person/LoginHeaders/Set-Cookie');
  332.     $Ls_Answer $this->Lo_SmtApi->callApi('GET'$Ls_EndPoint$La_Datatrue$Lo_Header);
  333.     $Lo_Answer json_decode($Ls_Answer);
  334.     $La_Response json_encode($Lo_Answer->Result);
  335.     $response JsonResponse::fromJsonString($La_Response);
  336.     return $response;
  337.   }
  338.   /**
  339.    * @Route("/api/user/profile", name="app_setuserprofile", methods={"POST"})
  340.    */
  341.   public function setUserProfile(Request $request) {
  342.     $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  343.     $Ls_EndPoint 'Authorization/saveprofile';
  344.     $La_Data $request->getContent();
  345.     $Lo_Header 'Cookie: ' $this->o_Session->get('core/a_Person/LoginHeaders/Set-Cookie');
  346.     $Ls_Answer =  $this->Lo_SmtApi->callApi('POST'$Ls_EndPoint$La_Datatrue$Lo_Header);
  347.     $Lo_Answer json_decode($Ls_Answer);
  348.     $La_Response json_encode($Lo_Answer->Result);
  349.     $response JsonResponse::fromJsonString($La_Response);
  350.     return $response;
  351.   }
  352.   /**
  353.   * @Route("/api/user", name="app_getuser", methods={"GET"})
  354.   */
  355.   public function getUserFromSession(Request $request) {
  356.     $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  357.     $Lo_User $this->Lo_Security->getUser();
  358.     $La_Data = [
  359.       "i_PersonID" => $Lo_User->getPersonID(),
  360.       "s_FAKNumber" => $Lo_User->getFAKNumber(),
  361.       "s_Birthdate" => $Lo_User->getBirthdate(),
  362.       "a_AddressRole" => $Lo_User->getAddressRole()
  363.     ];
  364.     $La_Response json_encode($La_Data);
  365.     $response JsonResponse::fromJsonString($La_Response);
  366.     return $response;
  367.   }
  368.   /**
  369.    * @Route("/{_locale<%app.supported_locales%>}/check_faknumber", name="app_check_faknumber_form")
  370.   */
  371.   public function checkFakNumber(Request $requestTranslatorInterface $translator):Response{
  372.     $fknForm $this->createForm(CheckFAKNumberType::class);
  373.     $error 1;
  374.     $registerForm$this->createForm(UserTypeFakRegister::class);
  375.     $fknForm->handleRequest($request);
  376.     $registerForm->handleRequest($request);
  377.     $La_FknFormData $fknForm->getData();
  378.     if ($fknForm->isSubmitted() && $fknForm->isValid()) {
  379.       $response $this->client->request(
  380.           'GET',
  381.           $request->getScheme() . '://' $request->getHttpHost() .'/api/participant/check-faknumber',[
  382.             // these values are automatically encoded before including them in the URL
  383.             'query' => [
  384.                 's_FAKNumber' => $La_FknFormData['FakNumber'],
  385.                 's_Birthdate' => $La_FknFormData['Birthdate'],
  386.             ],
  387.         ]);
  388.       $content $response->getContent();
  389.       $Lo_content json_decode($content);
  390.       $Lo_UserData $Lo_content->UserData;
  391.       $Lb_Status $Lo_content->ResultOK;
  392.       if($Lb_Status){
  393.         return $this->render('security/Check-faknumber.html.twig',
  394.         ['form' => $registerForm->createView(),'error' => $error'RegisterState' => 0'FAKcheckState'=> 0'response'=> $Lo_UserData]);
  395.       }
  396.       else{
  397.         $Ls_Message $translator->trans($this->Lo_MessageGenerator->getErrorMessage('oooooooo')) . '!';
  398.         $this->addFlash('error'$Ls_Message);
  399.       }
  400.       
  401.     }
  402.     if ($registerForm->isSubmitted() && $registerForm->isValid()) {
  403.       $La_FormData $registerForm->getData();
  404.       $La_FormData['URL'] = $request->getScheme() . '://' $request->getHttpHost();
  405.       $La_FormData['Password'] = $registerForm->get('Password')->getData();
  406.       $La_FormData['Language'] = $request->getLocale();
  407.       $La_FormData['i_UserType'] = 2// als Privatperson registrieren
  408.       $Ls_Answer $this->Lo_Participant->register($La_FormData);
  409.       $Lo_Answer json_decode($Ls_Answer);
  410.       $error $Lo_Answer->Error;
  411.       if($Lo_Answer->Error == && $Lo_Answer->Result->RegisterState == 2)
  412.       {
  413.         $Ls_Message $translator->trans('you_will_shortly_receive_an_email_with_a_link_to_confirm_the_email_address');
  414.         $this->addFlash('success'$Ls_Message);
  415.       } // if
  416.       else{
  417.         $Ls_Message $translator->trans($this->Lo_MessageGenerator->getErrorMessage($Lo_Answer->Error)) . '!';
  418.         $this->addFlash('error'$Ls_Message);
  419.       } // else
  420.     }
  421.     return $this->render('security/Check-faknumber.html.twig', ['form' => $fknForm->createView(),'error' => $error,'RegisterState' => 0'FAKcheckState'=> 1]);
  422.   }
  423. }