Your IP : 216.73.217.79


Current Path : /var/www/v3.cesa.co.za/src/UserBundle/Security/
Upload File :
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;
    }
}