vendor/oz/nvl-portal-displayer/src/EventSubscriber/UpdateDisplayerUserSubscriber.php line 57

Open in your IDE?
  1. <?php
  2. namespace Oz\NvlPortalDisplayer\EventSubscriber;
  3. use DateTime;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use League\OAuth2\Client\Token\AccessToken;
  6. use Oz\ApiNvl\Model\User;
  7. use Oz\NvlPortalDisplayer\Entity\PortalUser;
  8. use Oz\NvlPortalDisplayer\Service\Helper\UserHelper;
  9. use Oz\NvlPortalDisplayer\Service\User\UserTransformator;
  10. use Oz\NvlPortalDisplayer\Model\UserRessourceOwner;
  11. use Oz\Toolboxe\Tools\JwtHelper;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. use Symfony\Component\Security\Core\User\UserInterface;
  14. use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
  15. /**
  16.  *
  17.  */
  18. class UpdateDisplayerUserSubscriber implements EventSubscriberInterface
  19. {
  20.     /**
  21.      * @var EntityManagerInterface
  22.      */
  23.     private $em;
  24.     /**
  25.      * @var UserHelper
  26.      */
  27.     private $userHelper;
  28.     /**
  29.      * @param EntityManagerInterface $em
  30.      * @param UserHelper             $userHelper
  31.      */
  32.     public function __construct(EntityManagerInterface $emUserHelper $userHelper)
  33.     {
  34.         $this->em         $em;
  35.         $this->userHelper $userHelper;
  36.     }
  37.     /**
  38.      * @return string[]
  39.      */
  40.     public static function getSubscribedEvents(): array
  41.     {
  42.         return [
  43.             'security.interactive_login' => ['onSecurityInteractiveLogin'20],
  44.         ];
  45.     }
  46.     /**
  47.      * @param InteractiveLoginEvent $event
  48.      */
  49.     public function onSecurityInteractiveLogin(InteractiveLoginEvent $event): void
  50.     {
  51.         /** @var UserRessourceOwner $user */
  52.         $user $event->getAuthenticationToken()->getUser();
  53.         if (method_exists($user'isLocalAdmin') && $user->isLocalAdmin() === true) {
  54.             return;
  55.         }
  56.         if (!$user instanceof UserInterface) {
  57.             return;
  58.         }
  59. //        if (!$user instanceof User) {
  60. //            return;
  61. //        }
  62.         $this->updateUser($user);
  63.         $this->userHelper->checkUserStructure($user);
  64.         $this->em->flush();
  65.     }
  66.     /**
  67.      * Creation de l'user en base si il n'existe pas et update last login
  68.      *
  69.      * @param UserRessourceOwner $user
  70.      */
  71.     private function updateUser(UserInterface $user): void
  72.     {
  73.         $now = new DateTime('NOW');
  74.         if (!$baseUser $this->em->getRepository(PortalUser::class)->findOneBy(['userId' => $user->getId()])) {
  75.             // creation de l'user
  76.             $baseUser = (UserTransformator::getEntityUserFromUserRessourceOwner($user))
  77.                 ->setCreationDate($now);
  78.             if (
  79.                 $user->getToken() instanceof AccessToken &&
  80.                 method_exists($user'isSsoUser') &&
  81.                 $user->isSsoUser() === true
  82.             ) {
  83.                 $jwtDecoded JwtHelper::decode($user->getToken());
  84.                 $baseUser->setUserId($jwtDecoded['Id']);
  85.             }
  86.         }
  87.         $baseUser->setLastLogin($now);
  88.         $this->em->persist($baseUser);
  89.     }
  90. }