<?php
declare(strict_types=1);
namespace App\EventListener;
use App\Repository\ClientKeysRepository;
use App\Repository\RestrictionsRepository;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
use Symfony\Contracts\Translation\TranslatorInterface;
class LocaleListener
{
/** @var ClientKeysRepository $clientKeysRepository */
private $clientKeysRepository;
/** @var RestrictionsRepository $restrictionsRepository */
private $restrictionsRepository;
/** @var TranslatorInterface */
private $translator;
public function __construct(
ClientKeysRepository $clientKeysRepository,
RestrictionsRepository $restrictionsRepository,
TranslatorInterface $translator
) {
$this->clientKeysRepository = $clientKeysRepository;
$this->restrictionsRepository = $restrictionsRepository;
$this->translator = $translator;
}
public function onKernelRequest(RequestEvent $event)
{
$request = $event->getRequest();
if (
strpos($request->getUri(), 'api/') !== false &&
$event->isMasterRequest()
) {
$restrictions = $this->restrictionsRepository->findOrCreate();
if ($restrictions->getClientKeyNeeded()) {
$clientKey = $this->clientKeysRepository->getAllActiveKeys($request->headers->get('client-key', ''));
if ($clientKey == null) {
throw new AccessDeniedHttpException($this->translator->trans('client_token_verification_error'));
}
}
}
if (strlen((string) $acceptLanguage = $request->headers->get('Accept-Language'))) {
//TAG:LANGUAGE
$request->setLocale($request->getPreferredLanguage(['ro', 'de', 'en', 'hr', 'sl', 'sr', 'sq', 'el', 'bs', 'mk', 'me']));
return;
}
$request->setLocale(getenv('DEFAULT_LOCALE'));
}
public function onKernelResponse(ResponseEvent $event)
{
$event->getResponse()->headers->set('Content-Language', $event->getRequest()->getLocale());
}
}