src/EventListener/RequestValidation/CheckHeaders.php line 21

Open in your IDE?
  1. <?php
  2. namespace App\EventListener\RequestValidation;
  3. use App\Service\JWTTools;
  4. use Symfony\Component\HttpKernel\Event\RequestEvent;
  5. use App\Exception\DigitalCouponBadRequest;
  6. class CheckHeaders
  7. {
  8.     const SOGEC_HEADER_EMITTER_CODE_NAME "Sogec-Emitter-Code";
  9.     private $JWTTools;
  10.     public function __construct(JWTTools $JWTTools)
  11.     {
  12.         $this->JWTTools $JWTTools;
  13.     }
  14.     public function onKernelRequest(RequestEvent $event)
  15.     {
  16.         if (!$event->isMasterRequest()) {
  17.             return;
  18.         }
  19.         $request $event->getRequest();
  20.         $routeName $request->attributes->get('_route');
  21.         if( !preg_match("/^(api_coupons_get|api_emissions)/"$routeName) ) {
  22.             return;
  23.         }
  24.         if (!$request->headers->has(SELF::SOGEC_HEADER_EMITTER_CODE_NAME)) {
  25.             throw new DigitalCouponBadRequest(sprintf("%s header missing."SELF::SOGEC_HEADER_EMITTER_CODE_NAME));
  26.         }
  27.         $payload $this->JWTTools->getPayload();
  28.         $availableEmitterCodes $payload->get("emitterCodes") ?? [];
  29.         $currentEmitterCode $request->headers->get(SELF::SOGEC_HEADER_EMITTER_CODE_NAME);
  30.         if(!in_array($currentEmitterCode$availableEmitterCodes)) {
  31.             throw new DigitalCouponBadRequest(sprintf(
  32.                 "The emitter code %s not available. Available emitter code for your user : %s",
  33.                 $currentEmitterCode,
  34.                 json_encode($availableEmitterCodes)
  35.             ));
  36.         }
  37.     }
  38. }