<?php
namespace App\EventListener\RequestValidation;
use App\Service\JWTTools;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use App\Exception\DigitalCouponBadRequest;
class CheckHeaders
{
const SOGEC_HEADER_EMITTER_CODE_NAME = "Sogec-Emitter-Code";
private $JWTTools;
public function __construct(JWTTools $JWTTools)
{
$this->JWTTools = $JWTTools;
}
public function onKernelRequest(RequestEvent $event)
{
if (!$event->isMasterRequest()) {
return;
}
$request = $event->getRequest();
$routeName = $request->attributes->get('_route');
if( !preg_match("/^(api_coupons_get|api_emissions)/", $routeName) ) {
return;
}
if (!$request->headers->has(SELF::SOGEC_HEADER_EMITTER_CODE_NAME)) {
throw new DigitalCouponBadRequest(sprintf("%s header missing.", SELF::SOGEC_HEADER_EMITTER_CODE_NAME));
}
$payload = $this->JWTTools->getPayload();
$availableEmitterCodes = $payload->get("emitterCodes") ?? [];
$currentEmitterCode = $request->headers->get(SELF::SOGEC_HEADER_EMITTER_CODE_NAME);
if(!in_array($currentEmitterCode, $availableEmitterCodes)) {
throw new DigitalCouponBadRequest(sprintf(
"The emitter code %s not available. Available emitter code for your user : %s",
$currentEmitterCode,
json_encode($availableEmitterCodes)
));
}
}
}