<?php
namespace App\Controller;
use App\Entity\Gos\PortalSettings;
use App\Repository\PortalSettingsRepository;
use App\Utils\PortalSettingsService;
use Doctrine\ORM\EntityManager;
use FOS\UserBundle\Controller\SecurityController as FOSBaseController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
class FmSecurityController extends FOSBaseController
{
private $portalSettingsHash;
private ?Request $request;
private PortalSettingsService $portalSettingsService;
private PortalSettingsRepository $portalSettingsRepository;
public function __construct(
RequestStack $requestStack,
PortalSettingsService $portalSettingsService,
PortalSettingsRepository $portalSettingsRepository,
AuthenticationUtils $authenticationUtils,
?CsrfTokenManagerInterface $tokenManager = null
) {
$this->request = $requestStack->getCurrentRequest();
$this->portalSettingsService = $portalSettingsService;
$this->portalSettingsRepository = $portalSettingsRepository;
parent::__construct($authenticationUtils, $tokenManager);
}
public function loginAction(): Response
{
$request = $this->request;
$currentRoute = $request->attributes->get('_route');
if ($currentRoute !== 'backend_login')
{
// Wait for safari to set special cookie
$userAgent = $request->headers->get('User-Agent');
$isSafari = stripos($userAgent, 'Safari') && !stripos($userAgent, 'Chrome');
$safariCookieSet = $request->cookies->get('gos_safari_cookie');
$isForceRedirect = $request->query->has('r');
$portalSettingsHash = $this->portalSettingsService->getPortalSettingsHashForIframe($request);
if ($isForceRedirect === false && empty($portalSettingsHash) && (($isSafari && $safariCookieSet) || !$isSafari))
{
if ($currentRoute === 'eforum_login')
{
return $this->redirectToRoute('efShowDynamicTemplate');
}
if ($currentRoute === 'uniqskills_login' || $currentRoute === 'uniqskills_stress-test_login')
{
return $this->redirectToRoute('fmUniqskillsHomePage', [
'_locale' => $request->getSession()->get('userLocale', 'pl')
]);
}
return $this->render('frontend/base/reloadPage.html.twig', [
'method' => 'externalLink',
'href' => 'login'
]);
}
}
if ($request->query->get('redirect'))
{
$request->getSession()->set('redirectAfterLogin', $request->query->get('redirect'));
}
if ($currentRoute == 'eforum_login' && !empty($this->getUser()))
{
return $this->redirectToRoute('efShowDynamicTemplate');
}
if ($currentRoute == 'uniqskills_login' && !empty($this->getUser()))
{
$modalVideo = $request->query->get('modalVideo');
$modalPdf = $request->query->get('modalPdf');
$modalCourse = $request->query->get('modalCourse');
if (!empty($modalVideo))
{
return $this->redirectToRoute('fmUniqskillsVideoPreview', [
'video' => $modalVideo,
'course' => $modalCourse
]);
}
if (!empty($modalPdf))
{
return $this->redirectToRoute('fmUniqskillsModalSuccess');
}
return $this->redirectToRoute('fmUniqskillsAccount');
}
$this->portalSettingsHash = $request->getSession()->get('portalSettingsHash');
return parent::loginAction();
}
public function renderLogin(array $data): Response
{
/** @var PortalSettings $portalSettings */
$portalSettings = $this->portalSettingsRepository->findOneByHash($this->portalSettingsHash);
$currentRoute = $this->request->attributes->get('_route');
if ('backend_login' === $currentRoute)
{
$template = sprintf('/backend/security/login.html.twig');
}
elseif ('order_login' === $currentRoute)
{
$template = sprintf('/frontend/order/user/login.html.twig');
}
elseif ('eforum_login' === $currentRoute)
{
$template = sprintf('/frontend-eforum/security/login.html.twig');
}
elseif ('uniqskills_login' === $currentRoute)
{
$modalVideo = $this->request->query->get('modalVideo');
$modalPdf = $this->request->query->get('modalPdf');
$modalCourse = $this->request->query->get('modalCourse');
$template = sprintf('/uniqskills/security/login.html.twig');
if (!empty($modalVideo) or !(empty($modalPdf)))
{
$session = new Session();
if (!empty($modalVideo))
$session->set('modalVideo', $modalVideo);
if (!empty($modalPdf))
$session->set('modalPdf', $modalPdf);
if (!empty($modalCourse))
$session->set('modalCourse', $modalCourse);
$data['modal'] = true;
}
}
else
{
$template = sprintf('/frontend/security/login.html.twig');
}
$data['portalSettings'] = $portalSettings;
$data['source'] = $this->request->query->get('source', 'default');
return $this->render($template, $data);
}
}