<?php
namespace Postroyka\AccountBundle\EventListener;
use Doctrine\ORM\EntityManagerInterface;
use Postroyka\ApiBundle\RabbitMQ\B24\Producers\B24ExportUserProducer;
use Submarine\ConfirmationBundle\Event\ConfirmEvent;
use Submarine\UsersBundle\Events\Users\UserDefaultEvent;
use Submarine\UsersBundle\Events\UsersEvents;
use Submarine\UsersBundle\Service\UsersService;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
class AccountRegistrationConfirmListener
{
/**
* @param UsersService $usersService
* @param TokenStorageInterface $tokenStorage
* @param SessionInterface $session
* @param EventDispatcherInterface $dispatcher
* @param EntityManagerInterface $entityManager
*/
public function __construct(
private UsersService $usersService,
private TokenStorageInterface $tokenStorage,
private SessionInterface $session,
private EventDispatcherInterface $dispatcher,
private EntityManagerInterface $entityManager,
private B24ExportUserProducer $b24ExportUserProducer
)
{}
/**
* @param ConfirmEvent $event
*/
public function onAccountRegistrationConfirm(ConfirmEvent $event)
{
if (!$event->getUserId()) {
return;
}
$user = $this->usersService->getUser($event->getUserId());
if (!$user->getId()) {
return;
}
$user->setConfirmed(true);
$this->entityManager->flush($user);
$this->b24ExportUserProducer->exportUser($user);
$this->dispatcher->dispatch(new UserDefaultEvent($user), UsersEvents::onUserChange);
//Auto login
$token = new UsernamePasswordToken($user, null, 'main', $user->getRoles());
$this->tokenStorage->setToken($token);
$this->session->set('_security_main', serialize($token));
}
}