vendor/noxlogic/ratelimit-bundle/EventListener/HeaderModificationListener.php line 23

Open in your IDE?
  1. <?php
  2. namespace Noxlogic\RateLimitBundle\EventListener;
  3. use Noxlogic\RateLimitBundle\Service\RateLimitInfo;
  4. use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
  5. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  6. class HeaderModificationListener extends BaseListener
  7. {
  8.     /**
  9.      * @param array $defaultParameters
  10.      */
  11.     public function __construct($defaultParameters = array())
  12.     {
  13.         $this->parameters $defaultParameters;
  14.     }
  15.     /**
  16.      * @param FilterResponseEvent|ResponseEvent $event
  17.      */
  18.     public function onKernelResponse($event)
  19.     {
  20.         $request $event->getRequest();
  21.         // Check if we have a rate-limit-info object in our request attributes. If not, we didn't need to limit.
  22.         $rateLimitInfo $request->attributes->get('rate_limit_info'null);
  23.         if (! $rateLimitInfo) {
  24.             return;
  25.         }
  26.         // Check if we need to add our x-rate-limits to the headers
  27.         if (! $this->getParameter('display_headers')) {
  28.             return;
  29.         }
  30.         /** @var RateLimitInfo $rateLimitInfo */
  31.         $remaining $rateLimitInfo->getLimit() - $rateLimitInfo->getCalls();
  32.         if ($remaining 0) {
  33.             $remaining 0;
  34.         }
  35.         $response $event->getResponse();
  36.         $response->headers->set($this->getParameter('header_limit_name'), $rateLimitInfo->getLimit());
  37.         $response->headers->set($this->getParameter('header_remaining_name'), $remaining);
  38.         $response->headers->set($this->getParameter('header_reset_name'), $rateLimitInfo->getResetTimestamp());
  39.     }
  40. }