<?php
/**
* Created by simpson <simpsonwork@gmail.com>
* Date: 2019-07-02
* Time: 18:22
*/
namespace App\EventSubscriber;
use App\Service\AccessManager;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class ApiAccessSubscriber implements EventSubscriberInterface
{
public function __construct(
private AccessManager $accessManager
) {}
protected static $routesToCheck = [
'api.voucher.check_code'
];
public function onRequest(RequestEvent $event): void
{
$request = $event->getRequest();
$ip = $request->getClientIp();
$route = $request->get('_route');
if(in_array($route, self::$routesToCheck)) {
if (false == $this->accessManager->checkIpAccessToAPIVouchers($ip))
$event->setResponse(new Response('Forbidden', Response::HTTP_FORBIDDEN));
}
}
/**
* @inheritDoc
*/
public static function getSubscribedEvents()
{
return [
KernelEvents::REQUEST => ['onRequest'],
];
}
}