oauth2-trackmania/examples/TrackManiaAuthenticatorSubscriber.php
2024-07-31 11:36:15 +02:00

36 lines
1.3 KiB
PHP

<?php
namespace App\Event;
use KnpU\OAuth2ClientBundle\Client\ClientRegistry;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class TrackManiaAuthenticatorSubscriber implements EventSubscriberInterface
{
public function __construct(private ClientRegistry $clientRegistry, private LoggerInterface $logger) {}
public function onKernelController(ControllerEvent $event): void
{
/** @var \League\OAuth2\Client\Token\AccessToken|null */
$accessToken = $event->getRequest()->getSession()->get('oauth2_trackmania_accesstoken');
if ($accessToken !== null && $accessToken->hasExpired()) {
$client = $this->clientRegistry->getClient('TrackMania');
$accessToken = $client->refreshAccessToken($accessToken->getRefreshToken());
// Store the refresh token in the session
if ($accessToken->getRefreshToken() !== null) {
$event->getRequest()->getSession()->set('oauth2_trackmania_accesstoken', $accessToken);
}
}
}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::CONTROLLER => 'onKernelController',
];
}
}