src/EventSubscriber/LoginSuccessSubscriber.php line 61

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use ApiPlatform\Core\EventListener\EventPriorities;
  4. use App\Entity\Device;
  5. use App\Repository\DeviceRepository;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Lexik\Bundle\JWTAuthenticationBundle\Event\AuthenticationSuccessEvent;
  8. use Lexik\Bundle\JWTAuthenticationBundle\Events;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpKernel\Event\RequestEvent;
  12. use Symfony\Component\HttpKernel\KernelEvents;
  13. use Symfony\Component\Security\Core\Security;
  14. class LoginSuccessSubscriber implements EventSubscriberInterface
  15. {
  16.     /**
  17.      * @var Request
  18.      */
  19.     private $request;
  20.     /**
  21.      * @var DeviceRepository
  22.      */
  23.     private $deviceRepository;
  24.     /**
  25.      * @var EntityManagerInterface
  26.      */
  27.     private $entityManager;
  28.     /**
  29.      * @var Security
  30.      */
  31.     private $security;
  32.     /**
  33.      * LoginSuccessSubscriber constructor.
  34.      * @param DeviceRepository $deviceRepository
  35.      * @param EntityManagerInterface $entityManager
  36.      */
  37.     public function __construct(DeviceRepository $deviceRepositoryEntityManagerInterface $entityManagerSecurity $security)
  38.     {
  39.         $this->deviceRepository $deviceRepository;
  40.         $this->entityManager $entityManager;
  41.         $this->security $security;
  42.     }
  43.     public static function getSubscribedEvents()
  44.     {
  45.         return [
  46.             KernelEvents::REQUEST => ['onRequest'EventPriorities::POST_SERIALIZE],
  47.             Events::AUTHENTICATION_SUCCESS => 'onSuccess',
  48.         ];
  49.     }
  50.     public function onSuccess(AuthenticationSuccessEvent $event)
  51.     {
  52.         if($this->request !== null) {
  53.             $content json_decode($this->request->getContent(), true);
  54.             if(empty($content['uuid'])) {
  55.                 return;
  56.             }
  57.             $device $this->deviceRepository->findOneBy(['uuid' => $content['uuid']]);
  58.             if( ! $device) {
  59.                 $device = new Device();
  60.                 $device->setName($content['model']);
  61.                 $device->setUuid($content['uuid']);
  62.                 $device->setUser($this->security->getUser());
  63.                 $this->entityManager->persist($device);
  64.                 $this->entityManager->flush();
  65.             }
  66.         }
  67.     }
  68.     public function onRequest(RequestEvent $requestEvent)
  69.     {
  70.         $request $requestEvent->getRequest();
  71.         if('api_login_check' === $request->attributes->get('_route')) {
  72.             $this->request $request;
  73.         }
  74.     }
  75. }