src/JanusHercules/JanusIntegration/Api/EventSubscriber/ApiRequestEventSubscriber.php line 21

Open in your IDE?
  1. <?php
  2. namespace JanusHercules\JanusIntegration\Api\EventSubscriber;
  3. use JanusHercules\JanusIntegration\Api\Controller\AbstractJanusIntegrationApiController;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Symfony\Component\HttpFoundation\JsonResponse;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  8. use Symfony\Component\HttpKernel\KernelEvents;
  9. class ApiRequestEventSubscriber implements EventSubscriberInterface
  10. {
  11. public static function getSubscribedEvents(): array
  12. {
  13. return [
  14. KernelEvents::CONTROLLER => 'onKernelController',
  15. ];
  16. }
  17. public function onKernelController(ControllerEvent $event): void
  18. {
  19. $controller = $event->getController();
  20. // Handle array callables, e.g. [UserController::class, 'method']
  21. if (is_array($controller)) {
  22. $controllerObject = $controller[0];
  23. } else {
  24. $controllerObject = $controller;
  25. }
  26. // Check if the controller extends AbstractJanusIntegrationApiController
  27. if ($controllerObject instanceof AbstractJanusIntegrationApiController) {
  28. $request = $event->getRequest();
  29. if (!$controllerObject->containsValidApiKey($request)) {
  30. $response = new JsonResponse(
  31. ['error' => 'Invalid or missing API key'],
  32. Response::HTTP_FORBIDDEN
  33. );
  34. $event->setController(function () use ($response) {
  35. return $response;
  36. });
  37. }
  38. }
  39. }
  40. }