<?php
namespace App\EventListener;
use App\DTOs\UserMe;
use Lexik\Bundle\JWTAuthenticationBundle\Event\AuthenticationSuccessEvent;
use Lexik\Bundle\JWTAuthenticationBundle\Services\JWTTokenManagerInterface;
use Namshi\JOSE\JWS;
class AuthenticationSuccessListener
{
private JWTTokenManagerInterface $JWTManager;
public function __construct(JWTTokenManagerInterface $JWTManager)
{
$this->JWTManager = $JWTManager;
}
public function onAuthenticationSuccessResponse(AuthenticationSuccessEvent $event)
{
$data = $event->getData();
$user = $event->getUser();
if (!$user instanceof UserMe) {
return;
}
$jws = JWS::load($data['token']);
// TODO: tmp only for development
if (in_array($user->getUser()->getEmail(), explode(',', $_ENV['TEST_TOKEN_USERS']))) {
$payload = $jws->getPayload();
$payload['iat'] = time();
$payload['exp'] = $payload['iat'] + $_ENV['TEST_TOKEN_TTL'];
$data['token'] = $this->JWTManager->createFromPayload($user, $payload);
$jws = JWS::load($data['token']);
}
$data['ttl'] = $jws->getPayload()['exp'] - $jws->getPayload()['iat'];
$data['expire_at'] = $jws->getPayload()['exp'];
$data['state'] = $user->getUser()->getState();
$event->setData($data);
}
}