예제 #1
0
 public function onKernelController(FilterControllerEvent $event)
 {
     if ($event->isMasterRequest()) {
         $route = $event->getRequest()->get('_route');
         if ($this->isExcludedRoute($route)) {
             return;
         }
         if ($this->isAsset($_SERVER['REQUEST_URI'])) {
             return;
         }
         $is_logged = $this->securityContext->isGranted('IS_AUTHENTICATED_FULLY');
         if (!$is_logged && $route != 'fos_user_security_login') {
             $redirectUrl = $this->router->generate('fos_user_security_login');
             $event->setController(function () use($redirectUrl) {
                 return new RedirectResponse($redirectUrl);
             });
         }
         if (!$is_logged && $route == 'fos_user_security_login') {
             return;
         }
         if (!$this->rolesProvider->hasRouteAccess($route)) {
             throw new AccessDeniedException();
         }
     }
 }
 /**
  * @param FilterControllerEvent $event
  */
 public function onKernelController(FilterControllerEvent $event)
 {
     if (!$event->isMasterRequest()) {
         return;
     }
     $request = $event->getRequest();
     $this->logger->info('Attributes are logged.', ['metadata' => ['attributes' => $request->attributes->all()], 'description' => 'attributes']);
 }
예제 #3
0
 /**
  * @param FilterControllerEvent $event
  */
 public function onKernelController(FilterControllerEvent $event)
 {
     if (!$event->isMasterRequest()) {
         return;
     }
     $route = $this->getRoute($event->getRequest());
     $this->logger->info('LOGIC START', array($route));
 }
예제 #4
0
 public function registerCurrentController(FilterControllerEvent $event)
 {
     // this check is needed because in Symfony a request can perform any
     // number of sub-requests. See
     // http://symfony.com/doc/current/components/http_kernel/introduction.html#sub-requests
     if ($event->isMasterRequest()) {
         $this->twigExtension->setController($event->getController());
     }
 }
 /**
  * @param FilterControllerEvent $event
  */
 public function onKernelController(FilterControllerEvent $event)
 {
     if (!$event->isMasterRequest()) {
         return;
     }
     $request = $event->getRequest();
     $app = $request->attributes->get('_app');
     if (!isset($app['interceptors'])) {
         return;
     }
     $this->manager->handle($request);
 }
 /**
  * Read the controller annotations and change theme if the annotation indicate that need
  * @param FilterControllerEvent $event
  */
 public function readControllerAnnotations(FilterControllerEvent $event)
 {
     if (!$event->isMasterRequest()) {
         // prevents calling this for controller usage within a template or elsewhere
         return;
     }
     $controller = $event->getController();
     list($controller, $method) = $controller;
     // the controller could be a proxy, e.g. when using the JMSSecuriyExtraBundle or JMSDiExtraBundle
     $controllerClassName = ClassUtils::getClass($controller);
     $this->themeEngine->changeThemeByAnnotation($controllerClassName, $method);
 }
예제 #7
0
 /**
  * @param \Symfony\Component\HttpKernel\Event\FilterControllerEvent $event
  *
  * @return void
  */
 public function onKernelController(FilterControllerEvent $event)
 {
     if (!$event->isMasterRequest()) {
         return;
     }
     $request = $event->getRequest();
     $transactionName = $request->attributes->get('_route');
     $requestUri = $request->server->get('REQUEST_URI', 'n/a');
     $host = $request->server->get('COMPUTERNAME', $this->system->getHostname());
     $this->newRelicApi->setNameOfTransaction($transactionName);
     $this->newRelicApi->addCustomParameter('request_uri', $requestUri);
     $this->newRelicApi->addCustomParameter('host', $host);
     if ($this->ignoreTransaction($transactionName)) {
         $this->newRelicApi->markIgnoreTransaction();
     }
 }
 /**
  * Add the module stylesheet to the page assets.
  * @param FilterControllerEvent $event
  * @throws \Twig_Error_Loader
  */
 public function insertModuleStylesheet(FilterControllerEvent $event)
 {
     if (!$event->isMasterRequest()) {
         return;
     }
     $controller = $event->getController()[0];
     if ($controller instanceof AbstractController) {
         /** @var AbstractModule $module */
         $module = $this->kernel->getModule($controller->getName());
         try {
             $module->addStylesheet();
         } catch (\InvalidArgumentException $e) {
             // The module doesn't contain the default stylesheet.
         }
     }
 }
예제 #9
0
 public function onKernelController(FilterControllerEvent $event)
 {
     $route = $event->getRequest()->attributes->get('_route');
     if (!$event->isMasterRequest() || in_array($route, ['comunidad_select', 'comunidad_new'])) {
         return;
     }
     $user = $this->token ? $this->token->getUser() : null;
     if (!$user instanceof Usuario) {
         return;
     }
     $comunidad = $this->comunidadProvider->get();
     if (!$comunidad instanceof Comunidad) {
         $fakeRequest = $event->getRequest()->duplicate(null, null, array('_controller' => 'AppBundle:Comunidad:index'));
         $controller = $this->resolver->getController($fakeRequest);
         $event->setController($controller);
     }
 }
예제 #10
0
 public function onKernelController(FilterControllerEvent $event)
 {
     if (!$event->isMasterRequest()) {
         return;
     }
     $controller = $event->getController();
     if (!is_array($controller)) {
         return;
     }
     $control = $controller[0];
     if ($control instanceof LangController) {
         $url = $control->checkLang($event->getRequest());
         if (!is_null($url)) {
             $event->setController(function () use($url) {
                 return new RedirectResponse($url);
             });
         }
     }
 }
 /**
  * Add ThemePath to searchable paths when locating templates using name-spaced scheme
  * @param FilterControllerEvent $event
  * @throws \Twig_Error_Loader
  */
 public function setUpThemePathOverrides(FilterControllerEvent $event)
 {
     if (!$event->isMasterRequest()) {
         return;
     }
     // add theme path to template locator
     $controller = $event->getController()[0];
     if ($controller instanceof AbstractController) {
         $theme = $this->themeEngine->getTheme();
         $bundleName = $controller->getName();
         if ($theme) {
             $overridePath = $theme->getPath() . '/Resources/' . $bundleName . '/views';
             if (is_readable($overridePath)) {
                 $paths = $this->loader->getPaths($bundleName);
                 // inject themeOverridePath before the original path in the array
                 array_splice($paths, count($paths) - 1, 0, array($overridePath));
                 $this->loader->setPaths($paths, $bundleName);
             }
         }
     }
 }
예제 #12
0
 /**
  * @author Krzysztof Bednarczyk
  * @param FilterControllerEvent $event
  */
 public function onKernelController(FilterControllerEvent $event)
 {
     if (!$event->isMasterRequest()) {
         return;
     }
     $controller = $event->getController()[0];
     if (!$controller instanceof Controller) {
         //do nothing when is other controller;
         return;
     }
     $request = $event->getRequest();
     /**
      * Validate CSRF token
      */
     $isXVRequest = (int) $request->headers->get('X-XV-Request', 0);
     if ($isXVRequest) {
         if (!$this->checkCsrfToken($request)) {
             throw new CsrfHttpException("Invalid CSRF token. Please turn on cookies and reload page.");
         }
         $request->headers->set("X-XV-{$this->uniqueKey}", 1);
         return;
     }
     $controller = $event->getController()[0];
     if (!$controller instanceof Controller) {
         return;
     }
     /**
      * Prevent posting data directly form other post
      */
     if ($request->getMethod() !== Request::METHOD_GET) {
         $event->setController(function () use($request) {
             return new RedirectResponse($request->getRequestUri());
         });
         return;
     }
     $request->headers->set("X-XV-First-Request", 1);
     $request->headers->set("X-XV-Source", "bootstrap");
 }
예제 #13
0
 public function onKernelController(FilterControllerEvent $event)
 {
     if (!$event->isMasterRequest()) {
         return;
     }
     if (!$this->maintenance) {
         return;
     }
     $this->customRoutesExclusion();
     foreach ($this->routesExclusion as $routePattern) {
         if (preg_match($routePattern, $event->getRequest()->get('_route'))) {
             return;
         }
     }
     $this->isAdmin = $this->container->get('security.authorization_checker')->isGranted('ROLE_ADMIN');
     if (!$this->isAdmin) {
         $controller = new MaintenanceController();
         $controller->setContainer($this->container);
         $event->setController([$controller, 'maintenanceAction']);
         //            dump($event->getController());
         //            die();
     }
 }
예제 #14
0
 /**
  * Add mauticForms in js script tag for Froala.
  *
  * @param FilterControllerEvent $event
  */
 public function onKernelRequestAddGlobalJS(FilterControllerEvent $event)
 {
     if (defined('MAUTIC_INSTALLER') || $this->userHelper->getUser()->isGuest || !$event->isMasterRequest()) {
         return;
     }
     $list = $this->em->getRepository('MauticFormBundle:Form')->getSimpleList();
     $mauticForms = json_encode($list, JSON_FORCE_OBJECT | JSON_PRETTY_PRINT);
     $this->assetsHelper->addScriptDeclaration("var mauticForms = {$mauticForms};");
 }
예제 #15
0
 public function onKernelController(FilterControllerEvent $event)
 {
     if (!$event->isMasterRequest()) {
         return;
     }
     $request = $event->getRequest();
     if (!$request->attributes->has('_api')) {
         return;
     }
     /** @var Api $api */
     $api = $request->attributes->get('_api');
     $subRequests = $this->getSubRequests($request);
     $bulk = $api->isBulkable() && $subRequests;
     $stream = ($api->isStreamable() || $bulk) && $this->shouldStream($request);
     if (!$bulk && !$stream) {
         $request->attributes->set('stream', $this->noop);
         return;
     }
     // This listener will unwind/spread the calls, so don't trigger other Api listeners.
     $request->attributes->remove('_api');
     if ($stream) {
         $headers = ['content-type' => 'application/json; boundary=NL', 'x-accel-buffering' => 'no'];
     } else {
         $headers = ['content-type' => 'application/json'];
     }
     if ($subRequests) {
         $event->setController(function () use($request, $headers, $subRequests, $stream) {
             return new StreamedResponse(function () use($request, $subRequests, $stream) {
                 $promises = [];
                 foreach ($subRequests as $i => $requestParams) {
                     // Forward the query string without the 'payload', and put all the parameters in the body.
                     $query = $request->query->all();
                     if (isset($query['payload'])) {
                         unset($query['payload']);
                     }
                     $subRequest = $request->duplicate([], $requestParams);
                     // Also force-make it a POST request, so it can contain a body.
                     $subRequest->setMethod('POST');
                     $subRequest->attributes->set('stream', $stream ? $this->createStreamer($i) : $this->noop);
                     /* @var PromiseInterface $promise */
                     $promises[] = $promise = $this->httpKernel->handle($subRequest, HttpKernelInterface::SUB_REQUEST, true, false);
                     if ($stream) {
                         $streamer = $this->createStreamer($i);
                         $promise->then(function (Response $response) use($streamer) {
                             $streamer($response->getContent(), true);
                         });
                     }
                 }
                 $responses = \GuzzleHttp\Promise\all($promises)->wait();
                 if (!$stream) {
                     echo '[';
                     for (reset($responses); $response = current($responses); next($responses)) {
                         echo $response->getContent();
                         if (current($responses)) {
                             echo ',';
                         }
                     }
                     echo ']';
                 }
             }, 200, $headers);
         });
     } else {
         $event->setController(function () use($request, $headers) {
             return new StreamedResponse(function () use($request) {
                 $request->attributes->set('stream', $this->createStreamer());
                 // We duplicate the request because the profiler component's token keeps a reference to the parent request's token,
                 // creating an infinite loop when attempting to display profiler info.
                 $response = $this->httpKernel->handle($request->duplicate(), HttpKernelInterface::SUB_REQUEST, true, true);
                 // The streamer outputs a new line as the ending delimiter. In single action calls, the ending line should be
                 // the actual response without a new line at the end. That's why streaming single calls have a resulting
                 // response, but bulk calls don't have one.
                 echo $response->getContent();
             }, 200, $headers);
         });
     }
 }