<?php
namespace JanusHercules\JanusIntegration\Api\EventSubscriber;
use JanusHercules\JanusIntegration\Api\Controller\AbstractJanusIntegrationApiController;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class ApiRequestEventSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [
KernelEvents::CONTROLLER => 'onKernelController',
];
}
public function onKernelController(ControllerEvent $event): void
{
$controller = $event->getController();
// Handle array callables, e.g. [UserController::class, 'method']
if (is_array($controller)) {
$controllerObject = $controller[0];
} else {
$controllerObject = $controller;
}
// Check if the controller extends AbstractJanusIntegrationApiController
if ($controllerObject instanceof AbstractJanusIntegrationApiController) {
$request = $event->getRequest();
if (!$controllerObject->containsValidApiKey($request)) {
$response = new JsonResponse(
['error' => 'Invalid or missing API key'],
Response::HTTP_FORBIDDEN
);
$event->setController(function () use ($response) {
return $response;
});
}
}
}
}