<?php
declare(strict_types=1);
namespace App\CoreBundle\Controller\Admin;
use App\CoreBundle\Form\Admin\Login\LoginFormType;
use App\CoreBundle\Model\Security\AdministratorLoginFacade;
use App\CoreBundle\Model\Security\Authenticator;
use App\CoreBundle\Model\Security\Roles;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
class LoginController extends AdminBaseController
{
public const ORIGINAL_REFERER_PARAMETER_NAME = 'originalReferer';
/**
* @var \App\CoreBundle\Model\Security\Authenticator
*/
protected $authenticator;
/**
* @var \App\CoreBundle\Model\Security\AdministratorLoginFacade
*/
protected $administratorLoginFacade;
/**
* @param \App\CoreBundle\Model\Security\Authenticator $authenticator
* @param \App\CoreBundle\Model\Security\AdministratorLoginFacade $administratorLoginFacade
*/
public function __construct(
Authenticator $authenticator,
AdministratorLoginFacade $administratorLoginFacade
) {
$this->authenticator = $authenticator;
$this->administratorLoginFacade = $administratorLoginFacade;
}
/**
* @Route("/", name="admin_login")
* @Route("/login-check/", name="admin_login_check")
* @Route("/logout/", name="admin_logout")
* @param \Symfony\Component\HttpFoundation\Request $request
*/
public function loginAction(Request $request)
{
if ($this->isGranted(Roles::ROLE_ADMIN)) {
return $this->redirectToRoute('admin_product_list');
}
$error = null;
$form = $this->createForm(LoginFormType::class, null, [
'action' => $this->generateUrl('admin_login_check'),
]);
try {
$this->authenticator->checkLoginProcess($request);
} catch (\App\CoreBundle\Model\Security\Exception\LoginFailedException $e) {
$error = t('Log in failed.');
}
return $this->render('Admin/Content/Login/login.html.twig', [
'form' => $form->createView(),
'error' => $error,
]);
}
/**
* @Route("/sso/", name="admin_login_sso")
* @param \Symfony\Component\HttpFoundation\Request $request
*/
public function ssoAction(Request $request)
{
$administrator = $this->getUser();
/* @var $administrator \App\CoreBundle\Model\Administrator\Administrator */
$redirectTo = $this->generateUrl(
'admin_login_authorization',
[
self::ORIGINAL_REFERER_PARAMETER_NAME => $request->get(self::ORIGINAL_REFERER_PARAMETER_NAME),
],
UrlGeneratorInterface::ABSOLUTE_URL
);
return $this->redirect($redirectTo);
}
/**
* @Route("/authorization/", name="admin_login_authorization")
* @param \Symfony\Component\HttpFoundation\Request $request
*/
public function authorizationAction(Request $request)
{
$originalReferer = $request->get(self::ORIGINAL_REFERER_PARAMETER_NAME);
$redirectTo = ($originalReferer !== null) ? $originalReferer : $this->generateUrl('admin_product_list');
return $this->redirect($redirectTo);
}
}