<?php
namespace App\EventListener;
use App\Service\KeycloakApiService;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Security\Core\User\UserProviderInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
class KeycloakRefreshAccessTokenListener implements EventSubscriberInterface
{
private RequestStack $requestStack;
private UrlGeneratorInterface $urlGenerator;
private TokenStorageInterface $tokenStorage;
public function __construct(
RequestStack $requestStack,
UrlGeneratorInterface $urlGenerator,
TokenStorageInterface $tokenStorage,
KeycloakApiService $keycloakApiService,
) {
$this->requestStack = $requestStack;
$this->urlGenerator = $urlGenerator;
$this->tokenStorage = $tokenStorage;
$this->keycloakApiService = $keycloakApiService;
}
public function onKernelRequest(RequestEvent $event): void
{
$request = $this->requestStack->getMainRequest();
$session = $request->getSession();
$tokenExpires = $session->get('oidc_expires_token');
if (time() < ($tokenExpires-50)) {
return;
}
// $keycloakProvider = $this->keycloakApiService->keycloakProvider();
// $session->remove('oidc_access_token');
// $session->set('oidc_access_token', $keycloakProvider['new_access_token']);
// $session->remove('oidc_refresh_token');
// $session->set('oidc_refresh_token', $keycloakProvider['new_refresh_token']);
// $session->remove('oidc_expires_token');
// $session->set('oidc_expires_token', $keycloakProvider['new_oidc_expires_token']);
// $session->remove('oidc_access_token');
// $session->set('oidc_access_token', $keycloakProvider['new_access_token']);
}
public static function getSubscribedEvents(): array
{
return [RequestEvent::class => 'onKernelRequest'];
}
}