<?php
declare(strict_types=1);
namespace App\EventListener;
use App\Entity\User\ShopUser;
use App\Service\Edlsso;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\EventDispatcher\GenericEvent;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Contracts\HttpClient\HttpClientInterface;
class CheckoutValidation
{
public function __construct(private ParameterBagInterface $params, private ContainerInterface $container, private HttpClientInterface $client, private TokenStorageInterface $tokenStorage, private FlashBagInterface $flashBag, private RouterInterface $router)
{
}
public function handleEdlValidation(GenericEvent $event): void
{
$checkoutData = $event->getSubject();
/** @var TokenInterface $token */
$token = $this->tokenStorage->getToken();
if ($token === null) {
return;
}
$edlsso = new Edlsso($this->client, $this->params, $this->container);
/** @var ShopUser $shopUser */
$shopUser = $token->getUser();
$userToken = $shopUser->getEdlToken();
/** @var string $userTokenData */
$userTokenData = $userToken ? $userToken->getToken() : '';
$response = $edlsso->verifyToken($userTokenData);
if ($response['status'] === 'success') {
return;
}
$this->tokenStorage->setToken(null);
$this->flashBag->add('error', 'Session Expired. Please login again.');
$response = new RedirectResponse($this->router->generate('sylius_shop_login'));
$response->send();
}
}