<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Security\Core\Security;
use App\Form\SendLinkPasswordType;
use App\Form\ResetPasswordType;
use App\Form\ChangePasswordType;
use App\Form\UserType;
use App\Form\UserTypeFakRegister;
Use App\Form\CheckFAKNumberType;
use App\Form\CompanyType;
use App\Entity\Participant;
use Smt\CoreBundle\Service\SmtApi;
use Symfony\Contracts\Translation\TranslatorInterface;
use App\Service\MessageGenerator;
use Symfony\Contracts\HttpClient\HttpClientInterface;
class SecurityController extends AbstractController
{
private $Lo_SmtApi;
private $Lo_Security;
private $Lo_MessageGenerator;
private $Lo_Participant;
private $o_Session;
private $client;
public function __construct(
SmtApi $Ao_SmtApi,
Security $security,
MessageGenerator $messageGenerator,
Participant $participant,
SessionInterface $session,
HttpClientInterface $client
){
$this->Lo_SmtApi = $Ao_SmtApi;
$this->Lo_Security = $security;
$this->Lo_MessageGenerator = $messageGenerator;
$this->Lo_Participant = $participant;
$this->o_Session = $session;
$this->client = $client;
}
/**
* @Route("/login")
*/
public function indexNoLocale()
{
return $this->redirectToRoute('app_login', ['_locale' => 'de']);
}
/**
* @Route("/{_locale<%app.supported_locales%>}/login", name="app_login")
*/
public function login(AuthenticationUtils $authenticationUtils, Request $request): Response
{
$referer = $request->headers->get('referer');
if(empty($referer)) {
$session = $request->getSession();
$session->remove('initial_referer');
}
$pathQuery = $request->query->get('path_query');
if ($this->getUser()) {
if ($referer != null && $pathQuery != null) {
$pathQuerySlash = str_replace('-', '/', $pathQuery);
$pathCatalog = $referer . $pathQuerySlash;
return $this->redirect($pathCatalog);
}
return $this->redirectToRoute('app_home');
}
// get the login error if there is one
$error = $authenticationUtils->getLastAuthenticationError();
// last username entered by the user
$lastUsername = $authenticationUtils->getLastUsername();
$Lb_HasLeadership = (stripos($referer, 'leadership') !== false) ||
(stripos($referer, 'slapro') !== false);
return $this->render('security/login.html.twig', [
'last_username' => $lastUsername,
'error' => $error,
'company_register' => !$Lb_HasLeadership
]);
}
/**
* @Route("/{_locale<%app.supported_locales%>}/register", name="app_register", options={"expose"=true})
*/
public function register(
Request $request,
TranslatorInterface $translator
) {
$Ls_TargetPath = $request->getSession()->get('_security.main.target_path');
if(strpos($Ls_TargetPath, "/apps/book/"))
$this->o_Session->set('register/target/', $Ls_TargetPath);
$form = $this->createForm(UserType::class);
$form->handleRequest($request);
$error = 1;
$Ls_InitialReferer = $request->getSession()->get('initial_referer');
if ($form->isSubmitted() && $form->isValid()) {
$La_FormData = $form->getData();
$La_FormData['URL'] = $request->getScheme() . '://' . $request->getHttpHost();
$La_FormData['Password'] = $form->get('Password')->getData();
$La_FormData['Language'] = $request->getLocale();
$La_FormData['i_UserType'] = 2; // als Privatperson registrieren
$La_FormData['s_InitialReferer'] = $Ls_InitialReferer;
$Ls_Answer = $this->Lo_Participant->register($La_FormData);
$Lo_Answer = json_decode($Ls_Answer);
$error = $Lo_Answer->Error;
if($Lo_Answer->Error == 0 && $Lo_Answer->Result->RegisterState == 2)
{
$Ls_Message = $translator->trans('you_will_shortly_receive_an_email_with_a_link_to_confirm_the_email_address');
$this->addFlash('success', $Ls_Message);
} // if
else{
$Ls_Message = $translator->trans($this->Lo_MessageGenerator->getErrorMessage($Lo_Answer->Error)) . '!';
$this->addFlash('error', $Ls_Message);
} // else
}
return $this->render('security/register.html.twig', ['form' => $form->createView(), 'error' => $error, 'RegisterState' => 0]);
}
/**
* @Route("/{_locale<%app.supported_locales%>}/register_company", name="app_register_company", options={"expose"=true})
*/
public function registerCompany(
Request $request,
TranslatorInterface $translator
) {
$Ls_TargetPath = $request->getSession()->get('_security.main.target_path');
if(strpos($Ls_TargetPath, "/apps/book/"))
$this->o_Session->set('register/target/', $Ls_TargetPath);
$form = $this->createForm(CompanyType::class);
$form->handleRequest($request);
$error = 1;
if ($form->isSubmitted() && $form->isValid()) {
$La_FormData = $form->getData();
$La_FormData['URL'] = $request->getScheme() . '://' . $request->getHttpHost();
$La_FormData['Password'] = $form->get('Password')->getData();
$La_FormData['Language'] = $request->getLocale();
$La_FormData['i_UserType'] = 1; // als Firma registrieren
$Ls_Answer = $this->Lo_Participant->registerCompany($La_FormData);
$Lo_Answer = json_decode($Ls_Answer);
$error = $Lo_Answer->Error;
if($Lo_Answer->Error == 0 && $Lo_Answer->Result->RegisterState == 2)
{
$Ls_Message = $translator->trans('you_will_shortly_receive_an_email_with_a_link_to_confirm_the_email_address');
$this->addFlash('success', $Ls_Message);
} // if
else {
$Ls_Message = $translator->trans($this->Lo_MessageGenerator->getErrorMessage($Lo_Answer->Error)) . '!';
$this->addFlash('error', $Ls_Message);
} // else
}
return $this->render('security/register_company.html.twig', ['form' => $form->createView(), 'error' => $error, 'RegisterState' => 0]);
}
/**
* @Route("/ValidateRegistration", name="app_validateregistration", options={"expose"=true})
*/
public function validateRegistration(
Request $request,
TranslatorInterface $translator
) {
$Ls_RegisterState = 0;
$Ls_ValidationCode = $request->query->get('Token');
$Ls_Sid = $request->query->get('sid');
$La_ValidationData = [
's_ValidationCode' => $Ls_ValidationCode,
's_Sid' => $Ls_Sid,
's_URL' => $request->getScheme() . '://' . $request->getHttpHost()
];
$Ls_Answer = $this->Lo_Participant->validateRegistration($La_ValidationData);
$Lo_Answer = json_decode($Ls_Answer);
$error = $Lo_Answer->Error;
if(isset($Lo_Answer->Result->RegisterState)) $Ls_RegisterState = $Lo_Answer->Result->RegisterState;
if($Lo_Answer->Error == 0 && $Ls_RegisterState == 1)
{
$Ls_Message = $translator->trans('registration_complete');
$this->addFlash('success', $Ls_Message);
$this->Lo_Participant->addComment(30, 'Ausstehender Arbeitgeber', $Lo_Answer->Result->i_PersonID);
if ($Lo_Answer->Result->s_Target == 'app_login')
return $this->redirectToRoute('app_login');
else return $this->redirect($Lo_Answer->Result->s_Target);
} // if
else
{
$Ls_Message = $translator->trans($this->Lo_MessageGenerator->getErrorMessage($Lo_Answer->Error)) . '!';
$this->addFlash('error', $Ls_Message);
return $this->redirectToRoute('app_register');
} // else
}
/**
* @Route("/{_locale<%app.supported_locales%>}/sendlinkpass", name="app_sendlinkpass")
*/
public function sendLinkPassword(
Request $request,
TranslatorInterface $translator
): Response
{
$form = $this->createForm(SendLinkPasswordType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$Ls_ApiUrl = 'Authorization/ResetPassword';
$La_Data = $form->getData();
$Ao_ResultHeaders = array();
$La_Data['Username'] = $La_Data['Email'];
$La_Data['SendEmail'] = true;
$La_Data['URL'] = $request->getScheme() . '://' . $request->getHttpHost() . "/de/resetpass"; //// Achtung
$La_Data['s_InitialReferer'] = $request->getSession()->get('initial_referer');
$Ls_Data = json_encode($La_Data);
$Lo_Header = '';
$Ls_Answer = $this->Lo_SmtApi->callApi('POST', $Ls_ApiUrl, $Ls_Data, true ,$Lo_Header, $Ao_ResultHeaders);
$Lo_Answer = json_decode($Ls_Answer);
$this->o_Session->set('core/a_Person/LoginHeaders/Set-Cookie', $Ao_ResultHeaders['Set-Cookie']);
if($Lo_Answer->Error == 0)
{
$Ls_Message = $translator->trans('password_sent') . '!';
$this->addFlash('success', $Ls_Message);
return $this->render('apps/message.html.twig');
} // if
else {
$Ls_Message = $translator->trans($this->Lo_MessageGenerator->getErrorMessage($Lo_Answer->Error)) . '!';
$this->addFlash('error', $Ls_Message);
return $this->render('security/sendlinkpassword.html.twig', [
'form' => $form->createView(),
]);
} // else
}
return $this->render('security/sendlinkpassword.html.twig', ['form' => $form->createView(),]);
}
/**
* @Route("/{_locale<%app.supported_locales%>}/resetpass/ChangePassword", name="app_resetpass")
*/
public function resetPassword(
Request $request,
TranslatorInterface $translator
): Response
{
$form = $this->createForm(ResetPasswordType::class);
$Ls_Token = $request->query->get('ResetToken');
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$Ls_ApiUrl = 'Authorization/ChangePassword';
$La_Data = $form->getData();
$Ao_ResultHeaders = array();
$La_Data['Username'] = $La_Data['Email'];
$La_Data['SendEmail'] = true;
$La_Data['ResetCode'] = $Ls_Token;
$La_Data['s_InitialReferer'] = $request->getSession()->get('initial_referer');
$Ls_Data = json_encode($La_Data);
$Lo_Header = 'Cookie: ' . $this->o_Session->get('core/a_Person/LoginHeaders/Set-Cookie');
$Ls_Answer = $this->Lo_SmtApi->callApi('POST', $Ls_ApiUrl, $Ls_Data, true, $Lo_Header, $Ao_ResultHeaders);
$Lo_Answer = json_decode($Ls_Answer);
if($Lo_Answer->Error == 0)
{
$Ls_Message = $translator->trans('password_changed') . '!';
$this->addFlash('success', $Ls_Message);
} // if
else{
$Ls_Message = $translator->trans($this->Lo_MessageGenerator->getErrorMessage($Lo_Answer->Error)) . '!';
$this->addFlash('error', $Ls_Message);
} // else
}
return $this->render('security/resetpassword.html.twig', ['form' => $form->createView(), 'token' => $Ls_Token]);
}
/**
* @Route("/{_locale<%app.supported_locales%>}/changepass", name="app_changepass")
*/
public function changePassword(
Request $request,
TranslatorInterface $translator
): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$form = $this->createForm(ChangePasswordType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$Ls_ApiUrl = 'Authorization/ResetPassword';
$user = $this->getUser();
$La_Data = $form->getData();
$Ao_ResultHeaders = array();
$La_Data['Email'] = $user->getEmail();
$La_Data['Username'] = $La_Data['Email'];
$La_Data['SendEmail'] = false;
$La_Data['URL'] = $_SERVER['HTTP_HOST'] . $request->getBasePath() . "/resetpass"; //// Achtung
$Ls_Data = json_encode($La_Data);
$Lo_Header = 'Cookie: ' . $this->o_Session->get('core/a_Person/LoginHeaders/Set-Cookie');
$Ls_Answer = $this->Lo_SmtApi->callApi('POST', $Ls_ApiUrl, $Ls_Data, true, $Lo_Header, $Ao_ResultHeaders);
$Lo_Answer = json_decode($Ls_Answer);
$this->o_Session->set('core/a_Person/LoginHeaders/Set-Cookie', $Ao_ResultHeaders['Set-Cookie']);
if($Lo_Answer->Error == 0)
{
$La_Data['ResetCode'] = $Lo_Answer->Result->ResetCode;
$Ls_ApiUrl = 'Authorization/ChangePassword';
$Lo_Header = 'Cookie: ' . $this->o_Session->get('core/a_Person/LoginHeaders/Set-Cookie');
$Ls_Data = json_encode($La_Data);
$Ls_Answer = $this->Lo_SmtApi->callApi('POST', $Ls_ApiUrl, $Ls_Data, true, $Lo_Header, $Ao_ResultHeaders);
$Lo_Answer = json_decode($Ls_Answer);
if($Lo_Answer->Error == 0)
{
$Ls_Message = $translator->trans('password_changed') . '!';
$this->addFlash('success', $Ls_Message);
} // if
else{
$Ls_Message = $translator->trans($this->Lo_MessageGenerator->getErrorMessage($Lo_Answer->Error)) . '!';
$this->addFlash('error', $Ls_Message);
} // else
} // if
else{
$Ls_Message = $translator->trans($this->Lo_MessageGenerator->getErrorMessage($Lo_Answer->Error)) . '!';
$this->addFlash('error', $Ls_Message);
} // else
}
return $this->render('security/changepassword.html.twig', ['form' => $form->createView()]);
}
/**
* @Route("/logout", name="app_logout")
*/
public function logout()
{
throw new \LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.');
}
/**
* @Route("/api/user/profile", name="app_getuserprofile", methods={"GET"})
*/
public function getUserProfile(Request $request) {
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$Ls_EndPoint = 'Authorization/getprofile';
$Lo_User = $this->Lo_Security->getUser();
$Li_PersonID = $Lo_User->getPersonID();
$La_Data = [
"Li_PersonID" => $Li_PersonID
];
$Lo_Header = 'Cookie: ' . $this->o_Session->get('core/a_Person/LoginHeaders/Set-Cookie');
$Ls_Answer = $this->Lo_SmtApi->callApi('GET', $Ls_EndPoint, $La_Data, true, $Lo_Header);
$Lo_Answer = json_decode($Ls_Answer);
$La_Response = json_encode($Lo_Answer->Result);
$response = JsonResponse::fromJsonString($La_Response);
return $response;
}
/**
* @Route("/api/user/profile", name="app_setuserprofile", methods={"POST"})
*/
public function setUserProfile(Request $request) {
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$Ls_EndPoint = 'Authorization/saveprofile';
$La_Data = $request->getContent();
$Lo_Header = 'Cookie: ' . $this->o_Session->get('core/a_Person/LoginHeaders/Set-Cookie');
$Ls_Answer = $this->Lo_SmtApi->callApi('POST', $Ls_EndPoint, $La_Data, true, $Lo_Header);
$Lo_Answer = json_decode($Ls_Answer);
$La_Response = json_encode($Lo_Answer->Result);
$response = JsonResponse::fromJsonString($La_Response);
return $response;
}
/**
* @Route("/api/user", name="app_getuser", methods={"GET"})
*/
public function getUserFromSession(Request $request) {
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$Lo_User = $this->Lo_Security->getUser();
$La_Data = [
"i_PersonID" => $Lo_User->getPersonID(),
"s_FAKNumber" => $Lo_User->getFAKNumber(),
"s_Birthdate" => $Lo_User->getBirthdate(),
"a_AddressRole" => $Lo_User->getAddressRole()
];
$La_Response = json_encode($La_Data);
$response = JsonResponse::fromJsonString($La_Response);
return $response;
}
/**
* @Route("/{_locale<%app.supported_locales%>}/check_faknumber", name="app_check_faknumber_form")
*/
public function checkFakNumber(Request $request, TranslatorInterface $translator):Response{
$fknForm = $this->createForm(CheckFAKNumberType::class);
$error = 1;
$registerForm= $this->createForm(UserTypeFakRegister::class);
$fknForm->handleRequest($request);
$registerForm->handleRequest($request);
$La_FknFormData = $fknForm->getData();
if ($fknForm->isSubmitted() && $fknForm->isValid()) {
$response = $this->client->request(
'GET',
$request->getScheme() . '://' . $request->getHttpHost() .'/api/participant/check-faknumber',[
// these values are automatically encoded before including them in the URL
'query' => [
's_FAKNumber' => $La_FknFormData['FakNumber'],
's_Birthdate' => $La_FknFormData['Birthdate'],
],
]);
$content = $response->getContent();
$Lo_content = json_decode($content);
$Lo_UserData = $Lo_content->UserData;
$Lb_Status = $Lo_content->ResultOK;
if($Lb_Status){
return $this->render('security/Check-faknumber.html.twig',
['form' => $registerForm->createView(),'error' => $error, 'RegisterState' => 0, 'FAKcheckState'=> 0, 'response'=> $Lo_UserData]);
}
else{
$Ls_Message = $translator->trans($this->Lo_MessageGenerator->getErrorMessage('oooooooo')) . '!';
$this->addFlash('error', $Ls_Message);
}
}
if ($registerForm->isSubmitted() && $registerForm->isValid()) {
$La_FormData = $registerForm->getData();
$La_FormData['URL'] = $request->getScheme() . '://' . $request->getHttpHost();
$La_FormData['Password'] = $registerForm->get('Password')->getData();
$La_FormData['Language'] = $request->getLocale();
$La_FormData['i_UserType'] = 2; // als Privatperson registrieren
$Ls_Answer = $this->Lo_Participant->register($La_FormData);
$Lo_Answer = json_decode($Ls_Answer);
$error = $Lo_Answer->Error;
if($Lo_Answer->Error == 0 && $Lo_Answer->Result->RegisterState == 2)
{
$Ls_Message = $translator->trans('you_will_shortly_receive_an_email_with_a_link_to_confirm_the_email_address');
$this->addFlash('success', $Ls_Message);
} // if
else{
$Ls_Message = $translator->trans($this->Lo_MessageGenerator->getErrorMessage($Lo_Answer->Error)) . '!';
$this->addFlash('error', $Ls_Message);
} // else
}
return $this->render('security/Check-faknumber.html.twig', ['form' => $fknForm->createView(),'error' => $error,'RegisterState' => 0, 'FAKcheckState'=> 1]);
}
}