src/WebserviceBundle/Event/IdempotencyRequestListener.php line 32

Open in your IDE?
  1. <?php
  2. namespace WebserviceBundle\Event;
  3. use Predis\Client;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\HttpKernel\Event\GetResponseEvent;
  6. /**
  7.  * Class IdempotencyRequestListener
  8.  * @package WebserviceBundle\Event
  9.  */
  10. class IdempotencyRequestListener
  11. {
  12.     /**
  13.      * @var Client
  14.      */
  15.     private $redisConnection;
  16.     /**
  17.      * IdempotencyRequestListener constructor.
  18.      * @param Client $redisConnection
  19.      */
  20.     public function __construct(Client $redisConnection)
  21.     {
  22.         $this->redisConnection $redisConnection;
  23.     }
  24.     /**
  25.      * @param GetResponseEvent $event
  26.      */
  27.     public function onRequest(GetResponseEvent $event)
  28.     {
  29.         $request $event->getRequest();
  30.         if (!$request->headers->has('idempotency-key') || !$request->headers->get('idempotency-key')) {
  31.             return;
  32.         }
  33.         $requestKey $request->headers->get('idempotency-key');
  34.         $prefix 'IDEMP_';
  35.         $value $prefix $requestKey;
  36.         // return 304 (not-modified) when key already exists
  37.         if ($this->redisConnection->exists($value)) {
  38.             $event->setResponse(new Response('Non-unique request'304));
  39.         }
  40.         $this->redisConnection->setex($value3600'exists');
  41.     }
  42. }