src/EventSubscriber/LocaleSubscriber.php line 39
<?php
namespace App\EventSubscriber;
use App\Common\Functions\DbFunction;
use App\Common\Functions\Helpers;
use App\Common\Globals\MainGlobals;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Doctrine\ODM\MongoDB\DocumentManager;
use Symfony\Component\Yaml\Yaml;
class LocaleSubscriber implements EventSubscriberInterface
{
private $public_urls = [];
public function __construct(
public DocumentManager $dm
)
{
$this->public_urls = ['\\/login', '\\/auth', '\\/forget\\-password', '\\/check\\-reset\\-code', '\\/reset\\-password'];
}
public static function getSubscribedEvents()
{
return array(
KernelEvents::REQUEST => array(array('onKernelRequest', 200)),
);
}
private function checkApp($request){
if($request->getMethod() == "GET"){
return true;
}
$currentPath = $request->getPathInfo();
if(!MainGlobals::$app){
return preg_match('/'.implode('|', $this->public_urls).'/i', $currentPath);
}
return false;
}
public function onKernelRequest(RequestEvent $event)
{
$request = $event->getRequest();
if($request->headers->has('stripe-signature')){
return null;
}
if ($request->headers->has("Accept-Language")) {
$locale = $request->headers->get('Accept-Language');
$request->setLocale($locale);
}
if($request->headers->has('secure-key')) {
if($request->headers->get("secure-key") == 'ukkera-admins'){
MainGlobals::$secure = 'ukkera-admins';
}
}
$funs = [];
$headers = $request->headers->all();
foreach ($headers as $k => $v) {
$funs[Helpers::capital($k)] = $v[0] ?? $v;
}
$vals = Helpers::MergeCallingFunction($funs, HeaderFetch::class, $this->dm);
MainGlobals::$extra = array_merge(...$vals);
if(!$this->checkApp($request)){
if(!(MainGlobals::$app->id ?? false )){
return $event->setResponse(new JsonResponse(['error'=> 'Invalid server key'], 401));
}
$date = new \DateTime();
if (MainGlobals::$app->de_date && MainGlobals::$app->de_date < $date) {
return $event->setResponse(new JsonResponse(['error' => 'deactivated app'], 401));
}
}
if(MainGlobals::$app && MainGlobals::$app->fetch){
MainGlobals::$extra = DbFunction::FetchExtra($this->dm, MainGlobals::$app->fetch);
}
MainGlobals::$extra = [...MainGlobals::$extra, ...$vals];
if(MainGlobals::$app->main_app ?? false){
MainGlobals::$apps = DbFunction::getList($this->dm, 'apps__app', ['main_app'=>MainGlobals::$app->main_app]);
}
if(MainGlobals::$app ?? false){
$config_path = dirname(__DIR__) . '/configs/models';
$files = scandir($config_path);
foreach ($files as $file) {
if ($file !== '.' && $file !== '..') {
$data = Yaml::parseFile($config_path . '/' . $file);
MainGlobals::$modules = array_merge(MainGlobals::$modules, $data);
}
}
}
}
}