<?php
// src/EventSubscriber/LicenciaSubscriber.php
namespace App\EventSubscriber;
use App\Service\LicenciaService;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Routing\RouterInterface;
class LicenciaSubscriber implements EventSubscriberInterface
{
private $licenciaService;
private $router;
public function __construct(LicenciaService $licenciaService, RouterInterface $router)
{
$this->licenciaService = $licenciaService;
$this->router = $router;
}
public function onKernelRequest(RequestEvent $event)
{
$request = $event->getRequest();
$ruta = $request->getPathInfo();
// Rutas que NO requieren licencia
$rutasPublicas = [
'/activar-licencia',
'/obtener-hash-proyecto',
];
// Si es una ruta pública, no verificar licencia
foreach ($rutasPublicas as $rutaPublica) {
if (strpos($ruta, $rutaPublica) === 0) {
return;
}
}
// Verificar licencia para todas las demás rutas
$estadoLicencia = $this->licenciaService->verificarLicencia();
if (!$estadoLicencia['valido']) {
// Redirigir a activación de licencia
$event->setResponse(new RedirectResponse($this->router->generate('activar_licencia')));
}
}
public static function getSubscribedEvents()
{
return [
KernelEvents::REQUEST => ['onKernelRequest', 10],
];
}
}