<?php
namespace App\Wam\EventSubscriber;
use AppBundle\Repository\UserRepository;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Routing\RouterInterface;
class PasswordResettingSubscriber implements EventSubscriberInterface
{
private const USERNAME_PARAM = 'login';
public function __construct(private UserRepository $userRepository, private RouterInterface $router)
{
}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::REQUEST => ['onKernelRequest'],
];
}
public function onKernelRequest(RequestEvent $event): void
{
$request = $event->getRequest();
if (!$event->isMasterRequest()) {
return;
}
$resettingPath = $this->router->generate('fos_user_resetting_request');
if ($request->getPathInfo() !== $resettingPath) {
return;
}
if (!$request->isMethod('GET')) {
return;
}
$username = $request->query->get(self::USERNAME_PARAM);
if (empty($username)) {
return;
}
$user = $this->userRepository->findOneBy(['email' => $username]);
if (null === $user || (empty($user->getPermId()) && empty($user->getLawFirm()?->getEcmId()))) {
return;
}
$event->setResponse(new RedirectResponse($this->router->generate('wam_login')));
}
}