| Current Path : /var/www/v3.cesa.co.za/src/UserBundle/Security/ |
| Current File : /var/www/v3.cesa.co.za/src/UserBundle/Security/LoginSuccessHandler.php |
<?php
namespace App\UserBundle\Security;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Response;
use App\UserBundle\Entity\UserLogin;
use Symfony\Component\Routing\Router;
use Symfony\Component\Security\Core\User\UserInterface;
class LoginSuccessHandler implements AuthenticationSuccessHandlerInterface
{
/**
* Service Container
* @var object
*/
private $container = null;
protected $router;
public function __construct(ContainerInterface $container, Router $router)
{
$this->router = $router;
$this->setContainer($container);
}
/**
* Get Container
*
* @return ContainerInterface $container
*/
public function getContainer()
{
return $this->container;
}
/**
* Set Container
*
* @param ContainerInterface $container
* @return void
*/
public function setContainer($container)
{
$this->container = $container;
}
public function onAuthenticationSuccess(Request $request, TokenInterface $token): Response
{
$url = $this->router->generate('home');
$response = new RedirectResponse($url);
if (is_object($this->container->get('sessions.manager')->getSfSession())) {
$this->container->get('sessions.manager')->getSfSession()->set('logout', false);
}
$this->getContainer()->get('session_values.manager')->setValue(array('value_name' => 'logged_out', 'value' => 0));
$loggedInUser = $token->getUser();
if (!is_object($loggedInUser) || !$loggedInUser instanceof UserInterface) {
return $response;
}
if ($loggedInUser instanceof UserLogin) {
$sessionValues = $this->container->get('session_values.manager');
$sessionValues->setValue([
'value_name' => 'member_firm_present',
'value' => $loggedInUser->hasMemberFirm() ? 1 : 0,
]);
if ($loggedInUser->getMemberFirmId() !== null) {
$sessionValues->setValue([
'value_name' => 'member_firm_id',
'value' => $loggedInUser->getMemberFirmId(),
]);
}
$sessionValues->setValue([
'value_name' => 'logged_on_user_id',
'value' => $loggedInUser->getId(),
]);
} elseif (method_exists($loggedInUser, 'getId')) {
$this->container->get('session_values.manager')->setValue([
'value_name' => 'logged_on_user_id',
'value' => $loggedInUser->getId(),
]);
}
// echo $loggedInUser->getId() . ' auth success triggered <br />';
// exit;
if ($loggedInUser->getGranted('ROLE_USER') && strlen($this->getContainer()->get('session_values.manager')->getValue(array('value_name' => 'login_target_path'))) > 0) {
if (
strpos(' ' . $this->getContainer()->get('session_values.manager')->getValue(array('value_name' => 'login_target_path')), '/page/') > 0 &&
!$this->getContainer()->get('content.manager')->hasAccessURL($this->getContainer()->get('session_values.manager')->getValue(array('value_name' => 'login_target_path')), $loggedInUser)
) {
$response = new RedirectResponse($url);
} else {
$response = new RedirectResponse($this->getContainer()->get('session_values.manager')->getValue(array('value_name' => 'login_target_path')));
}
$this->getContainer()->get('session_values.manager')->setValue(array('value_name' => 'login_target_path', 'value' => ''));
} elseif ($loggedInUser->getGranted('ROLE_USER')) {
// redirect the user to where they were before the login process begun.
$referer_url = $request->headers->get('referer');
if (strlen($referer_url) > 0 && strpos($referer_url, 'login') <= 0) {
$response = new RedirectResponse($referer_url);
} else {
$key = '_security.secured_area.target_path';
$session = $this->getContainer()->get('sessions.manager')->getSfSession();
// try to redirect to the last page, or fallback to the homepage
if (is_object($session) && $session->has($key)) {
$url = $session->get($key);
$session->remove($key);
}
$response = new RedirectResponse($url);
}
}
return $response;
}
}