<?php
namespace App\EventSubscriber;
use Nellapp\Bundle\SDKBundle\Enum\AppEnum;
use Nellapp\Bundle\SDKBundle\Routing\Utils\DockerRoutingUtils;
use Nellapp\Bundle\SDKBundle\Routing\Utils\DomainsRoutingUtils;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\KernelEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class RequestCookieDomainSubscriber implements EventSubscriberInterface
{
public function __construct(
private DomainsRoutingUtils $domainsRoutingUtils,
)
{
}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::REQUEST => ['__invoke', 300], // really high priority. Before session started
];
}
public function __invoke(KernelEvent $event): void
{
if (session_status() === PHP_SESSION_ACTIVE) {
return;
}
$request = $event->getRequest();
$host = $request->getHost();
$subdomainsPattern = implode('|', array_map('preg_quote', $this->domainsRoutingUtils->getSubdomainsForApp())); // transform subdomains array in regex friendly string
$regex = '/^(' . $subdomainsPattern . ')\.(.+)$/';
if (preg_match($regex, $host, $matches)) {
$baseDomain = $matches[2]; // drosalys.com
session_set_cookie_params([
'domain' => '.' . $baseDomain,
]);
}
}
}