<?php
namespace App\Listener;
use Lexik\Bundle\JWTAuthenticationBundle\Event\JWTCreatedEvent;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Security\Core\User\UserInterface;
class JWTCreatedListener
{
private RequestStack $requestStack;
public function __construct(RequestStack $requestStack)
{
$this->requestStack = $requestStack;
}
public function __invoke(JWTCreatedEvent $event): void
{
$request = $this->requestStack->getCurrentRequest();
// fallback si on n’est pas dans une requête HTTP (ex: CLI)
if (!$request) {
return;
}
$host = $request->headers->get('X-Server-Host');
$user = $event->getUser();
$userId = $user->getId();
$payload = $event->getData();
$payload['mercure'] = [
'subscribe' => [
sprintf('https://%s/users/%d/notifications', $host, $userId),
],
];
$event->setData($payload);
}
}