<?php
namespace App\EventSubscriber;
use App\Entity\Monolith\User;
use Doctrine\ORM\EntityManagerInterface;
use Gesdinet\JWTRefreshTokenBundle\Event\RefreshEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Core\Exception\AuthenticationException;
class RefreshTokenSubscriber implements EventSubscriberInterface
{
public function __construct(
private EntityManagerInterface $entityManager
) {
}
public static function getSubscribedEvents(): array
{
return [
'gesdinet.refresh_token' => 'onRefreshToken',
];
}
public function onRefreshToken(RefreshEvent $event): void
{
$refreshToken = $event->getRefreshToken();
if (null !== $refreshToken->getHash()) {
$user = $this->entityManager->getRepository(User::class)->findOneBy(['email' => $refreshToken->getUsername()]);
if (sha1($user?->getPassword()) !== $refreshToken->getHash()) {
throw new AuthenticationException('The password does not match.');
}
}
}
}