src/Aqarmap/Bundle/UserBundle/EventListener/ChangeUserPasswordSubscriber.php line 60

Open in your IDE?
  1. <?php
  2. namespace Aqarmap\Bundle\UserBundle\EventListener;
  3. use Aqarmap\Bundle\UserBundle\Entity\User;
  4. use Aqarmap\Bundle\UserBundle\Services\UserManager;
  5. use FOS\UserBundle\Event\FilterUserResponseEvent;
  6. use FOS\UserBundle\Event\FormEvent;
  7. use FOS\UserBundle\Event\UserEvent;
  8. use FOS\UserBundle\FOSUserEvents;
  9. use FOS\UserBundle\Model\UserManagerInterface;
  10. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  11. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  12. class ChangeUserPasswordSubscriber implements EventSubscriberInterface
  13. {
  14.     private UserManager $userManager;
  15.     private UserManagerInterface $fosUserManager;
  16.     private EventDispatcherInterface $eventDispatcher;
  17.     public function __construct(
  18.         UserManager $userManager,
  19.         UserManagerInterface $fosUserManager,
  20.         EventDispatcherInterface $eventDispatcher
  21.     ) {
  22.         $this->userManager $userManager;
  23.         $this->fosUserManager $fosUserManager;
  24.         $this->eventDispatcher $eventDispatcher;
  25.     }
  26.     /**
  27.      * @throws \Exception
  28.      */
  29.     public function expireTokens(FilterUserResponseEvent $event): void
  30.     {
  31.         $this->userManager->expireAccessTokensByUser($event->getUser());
  32.         $this->userManager->expireRefreshTokensByUser($event->getUser());
  33.     }
  34.     public function onResettingResetRequest(FormEvent $event): void
  35.     {
  36.         $event->getRequest();
  37.         /** @var User $user */
  38.         $user $event->getForm()->getData();
  39.         $plainPassword $event->getForm()->get('plainPassword')->getData();
  40.         if ($user instanceof User && $user->getLegacy() && !empty($plainPassword)) {
  41.             $user->setPlainPassword($plainPassword);
  42.             $user->setLegacy(false);
  43.             $this->fosUserManager->updateUser($user);
  44.             $event = new UserEvent($user$event->getRequest());
  45.             $this->eventDispatcher->dispatch($eventFOSUserEvents::USER_PASSWORD_CHANGED);
  46.         }
  47.     }
  48.     public function onResettingPassword(UserEvent $event): void
  49.     {
  50.         /** @var User|null $user */
  51.         $user $event->getUser();
  52.         $plainPassword $event->getRequest()->get('password');
  53.         if ($user instanceof User && !empty($plainPassword)) {
  54.             $user->setPlainPassword($plainPassword);
  55.             $user->setLegacy(false);
  56.             $this->fosUserManager->updateUser($user);
  57.             $event = new UserEvent($user$event->getRequest());
  58.             $this->eventDispatcher->dispatch($eventFOSUserEvents::USER_PASSWORD_CHANGED);
  59.         }
  60.     }
  61.     /**
  62.      * @return array
  63.      */
  64.     public static function getSubscribedEvents()
  65.     {
  66.         return [
  67.             FOSUserEvents::CHANGE_PASSWORD_COMPLETED => 'expireTokens',
  68.             FOSUserEvents::RESETTING_RESET_SUCCESS => 'onResettingResetRequest',
  69.             'aqarmap.user.password.reset' => 'onResettingPassword',
  70.         ];
  71.     }
  72. }