<?php
declare(strict_types=1);
namespace App\EventListener;
use App\Entity\Security\User;
use App\Service\Security\PasswordService;
use Lexik\Bundle\JWTAuthenticationBundle\Event\AuthenticationSuccessEvent;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Security\Core\User\UserInterface;
class JWTAuthSuccessListener
{
private $request;
public function __construct(
private RequestStack $requestStack,
private PasswordService $passwordService,
) {
$this->request = $this->requestStack->getCurrentRequest();
}
public function onJWTAuthSuccess(AuthenticationSuccessEvent $event): void
{
if ('foxorders_api_refresh_token' === $this->request->get('_route')) {
return;
}
try {
/** @var User $user */
$user = $event->getUser();
if (false === $user instanceof UserInterface) {
return;
}
if (null === $user->getPlainPassword() && false === property_exists(json_decode($this->request->getContent()), 'password')) {
return;
}
$plainPassword = (null !== $user->getPlainPassword()) ? $user->getPlainPassword() : json_decode($this->request->getContent())->password;
$user->setPlainPassword($plainPassword);
} catch (\Exception $e) {
throw $e;
}
}
}