src/EventListener/RegistrationConfirmListener.php line 32

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Harmonizely\EventListener;
  4. use FOS\UserBundle\Event\FormEvent;
  5. use FOS\UserBundle\Event\GetResponseUserEvent;
  6. use FOS\UserBundle\FOSUserEvents;
  7. use FOS\UserBundle\Util\TokenGeneratorInterface;
  8. use Harmonizely\Entity\Company\UserOAuthEntity;
  9. use Harmonizely\Model\UserInterface;
  10. use Harmonizely\Repository\Company\Contract\IUserOAuthRepository;
  11. use Harmonizely\Service\Panel\OAuth\OAuthSession;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. use Symfony\Component\HttpFoundation\RedirectResponse;
  14. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  15. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  16. use Symfony\Component\Routing\RouterInterface;
  17. final class RegistrationConfirmListener implements EventSubscriberInterface
  18. {
  19.     private RouterInterface $router;
  20.     private SessionInterface $session;
  21.     private IUserOAuthRepository $userOAuthRepository;
  22.     private UrlGeneratorInterface $urlGenerator;
  23.     private TokenGeneratorInterface $tokenGenerator;
  24.     /**
  25.      * @param RouterInterface $router
  26.      * @param SessionInterface $session
  27.      * @param IUserOAuthRepository $userOAuthRepository
  28.      * @param UrlGeneratorInterface $urlGenerator
  29.      * @param TokenGeneratorInterface $tokenGenerator
  30.      */
  31.     public function __construct(
  32.         RouterInterface $router,
  33.         SessionInterface $session,
  34.         IUserOAuthRepository $userOAuthRepository,
  35.         UrlGeneratorInterface $urlGenerator,
  36.         TokenGeneratorInterface $tokenGenerator
  37.     )
  38.     {
  39.         $this->router $router;
  40.         $this->session $session;
  41.         $this->userOAuthRepository $userOAuthRepository;
  42.         $this->urlGenerator $urlGenerator;
  43.         $this->tokenGenerator $tokenGenerator;
  44.     }
  45.     /**
  46.      * {@inheritdoc}
  47.      */
  48.     public static function getSubscribedEvents()
  49.     {
  50.         return [
  51.             FOSUserEvents::REGISTRATION_SUCCESS => [['onRegistrationSuccess'10]],
  52.             FOSUserEvents::REGISTRATION_CONFIRM => 'onRegistrationConfirm',
  53.         ];
  54.     }
  55.     public function onRegistrationSuccess(FormEvent $event): void
  56.     {
  57.         $oauthData $this->session->get(OAuthSession::PENDING_REGISTRATION_KEY);
  58.         if (!$oauthData) {
  59.             return;
  60.         }
  61.         /** @var UserInterface $user */
  62.         $user $event->getForm()->getData();
  63.         if ($user->getEmail() !== $oauthData['email']) {
  64.             return;
  65.         }
  66.         $newToken $this->tokenGenerator->generateToken();
  67.         $user->setConfirmationToken($newToken);
  68.         $event->stopPropagation();
  69.         $this->session->remove(OAuthSession::PENDING_REGISTRATION_KEY);
  70.         $userOAuth = new UserOAuthEntity($user$oauthData['provider'], $oauthData['externalId']);
  71.         $this->userOAuthRepository->save($userOAuth);
  72.         $event->setResponse(new RedirectResponse($this->urlGenerator->generate('fos_user_registration_confirm', ['token' => $user->getConfirmationToken()], UrlGeneratorInterface::ABSOLUTE_URL)));
  73.     }
  74.     public function onRegistrationConfirm(GetResponseUserEvent $event): void
  75.     {
  76.         $event->setResponse(new RedirectResponse($this->router->generate('dashboard_index')));
  77.     }
  78. }