vendor/can/rest/src/Can/RestBundle/EventListener/TrackingListener.php line 53

Open in your IDE?
  1. <?php
  2. namespace Can\RestBundle\EventListener;
  3. use Can\RestBundle\CanRestBundle;
  4. use Can\RestBundle\Http\Header\DoNotTrack;
  5. use Can\RestBundle\Tracking\TrackingConfiguration;
  6. use Can\RestBundle\Tracking\TrackingHeader;
  7. use Can\RestBundle\Tracking\TrackingResolverInterface;
  8. use Can\RestBundle\Tracking\TrackingUtil;
  9. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  10. use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
  11. use InvalidArgumentException;
  12. /**
  13.  * Manages tracking headers (DNT and its Do-Not-Track variants).
  14.  *
  15.  * @group tracking
  16.  *
  17.  * @package can/rest-bundle
  18.  * @author lechecacharro <lechecacharro@gmail.com>
  19.  */
  20. class TrackingListener
  21. {
  22.     /**
  23.      * @var TrackingConfiguration
  24.      */
  25.     private $configuration;
  26.     /**
  27.      * @var TrackingResolverInterface
  28.      */
  29.     private $resolver;
  30.     /**
  31.      * TrackingListener constructor.
  32.      *
  33.      * @param TrackingConfiguration     $configuration
  34.      * @param TrackingResolverInterface $resolver
  35.      */
  36.     public function __construct(TrackingConfiguration $configurationTrackingResolverInterface $resolver)
  37.     {
  38.         $this->configuration $configuration;
  39.         $this->resolver $resolver;
  40.     }
  41.     /**
  42.      * @param ResponseEvent $event
  43.      */
  44.     public function onResponse(ResponseEvent $event): void
  45.     {
  46.         if (! $this->configuration->isEnabled()) {
  47.             return;
  48.         }
  49.         $request $event->getRequest();
  50.         if (! $request->attributes->get(CanRestBundle::ATTR_SERVICE_ZONE)) {
  51.             return;
  52.         }
  53.         if (null === $doNotTrack TrackingUtil::extractDoNotTrackHeader($request)) {
  54.             return;
  55.         }
  56.         try {
  57.             $trackingPreference DoNotTrack::parseHeader($doNotTrack);
  58.         } catch (InvalidArgumentException $e) {
  59.             throw new BadRequestHttpException($e->getMessage(), $e);
  60.         }
  61.         $trackingStatus $this->resolver->resolve($request);
  62.         $request->attributes->set(CanRestBundle::ATTR_DO_NOT_TRACK, (string) $doNotTrack);
  63.         $request->attributes->set(CanRestBundle::ATTR_TRACKING_PREFERENCE$trackingPreference);
  64.         $request->attributes->set(CanRestBundle::ATTR_TRACKING_STATUS$trackingStatus);
  65.         $response $event->getResponse();
  66.         $response->headers->set(TrackingHeader::TRACKING_STATUS$trackingStatus->getValue());
  67.     }
  68. }