src/Infrastructure/Sentry/SentryRequestListener.php line 30

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Infrastructure\Sentry;
  4. use App\Entity\Project\User;
  5. use Sentry\State\HubInterface;
  6. use Sentry\State\Scope;
  7. use Sentry\UserDataBag;
  8. use Symfony\Component\HttpKernel\Event\KernelEvent;
  9. use Symfony\Component\HttpKernel\Event\RequestEvent;
  10. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  11. class SentryRequestListener
  12. {
  13.     public function __construct(
  14.         private readonly ?HubInterface $hub,
  15.         private readonly ?TokenStorageInterface $tokenStorage
  16.     ) {
  17.     }
  18.     protected function isMainRequest(KernelEvent $event): bool
  19.     {
  20.         return method_exists($event'isMainRequest')
  21.             ? $event->isMainRequest()
  22.             : $event->isMasterRequest();
  23.     }
  24.     public function handleKernelRequestEvent(RequestEvent $event): void
  25.     {
  26.         if (!$this->hub || !$this->isMainRequest($event)) {
  27.             return;
  28.         }
  29.         $client $this->hub->getClient();
  30.         if (null === $client || !$client->getOptions()->shouldSendDefaultPii()) {
  31.             return;
  32.         }
  33.         $userData UserDataBag::createFromUserIpAddress($event->getRequest()->getClientIp());
  34.         if ($user $this->tokenStorage?->getToken()?->getUser()) {
  35.             if (!$user instanceof User) {
  36.                 return;
  37.             }
  38.             $userData->setId($user->getId());
  39.             $userData->setUsername($user->getFirstname().' '.$user->getLastname());
  40.             $userData->setEmail($user->getPhone());
  41.         }
  42.         $this->hub->configureScope(static function (Scope $scope) use ($userData): void {
  43.             $scope->setUser($userData);
  44.         });
  45.     }
  46. }