<?php
namespace App\EventListener\Apollon;
use App\Controller\Apollon\DefaultPublicController;
use App\Service\Apollon\WebsiteService;
use Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\Security\Core\Security;
class ControllerListener
{
const PDN_PARAMETER = 'pro.domain_name';
private DefaultPublicController $controller;
private ContainerBagInterface $params;
private WebsiteService $websiteService;
private Security $security;
public function __construct(
DefaultPublicController $controller,
ContainerBagInterface $params,
WebsiteService $websiteService,
Security $security
)
{
$this->controller = $controller;
$this->params = $params;
$this->websiteService = $websiteService;
$this->security = $security;
}
public function onKernelRequest(RequestEvent $event)
{
if (is_null($this->security->getUser()) && 'fetch' === $event->getRequest()->headers->get('A-Sending-Method')) {
$event->setResponse(new JsonResponse(['a-reload' => true]));
return;
}
if (
$this->params->has(self::PDN_PARAMETER) &&
$event->getRequest()->getHost() !== $this->params->get(self::PDN_PARAMETER) &&
!$this->websiteService->getWebsiteFromDomainName($event->getRequest()->getHost()) &&
$this->websiteService->getWebsiteFromDomainName('www.' . $event->getRequest()->getHost())
) {
$event->setResponse(new RedirectResponse('https://www.' . $event->getRequest()->getHost()));
}
}
public function onKernelController(ControllerEvent $event)
{
if (
$this->params->has(self::PDN_PARAMETER) &&
$event->getRequest()->getHost() !== $this->params->get(self::PDN_PARAMETER) &&
$this->websiteService->getWebsiteFromDomainName($event->getRequest()->getHost()) &&
!str_starts_with($event->getRequest()->getRequestUri(), '/_')
) {
$event->setController([$this->controller, 'index']);
}
}
}