vendor/pimcore/pimcore/bundles/AdminBundle/EventListener/UsageStatisticsListener.php line 60

Open in your IDE?
  1. <?php
  2. /**
  3.  * Pimcore
  4.  *
  5.  * This source file is available under two different licenses:
  6.  * - GNU General Public License version 3 (GPLv3)
  7.  * - Pimcore Enterprise License (PEL)
  8.  * Full copyright and license information is available in
  9.  * LICENSE.md which is distributed with this source code.
  10.  *
  11.  * @copyright  Copyright (c) Pimcore GmbH (http://www.pimcore.org)
  12.  * @license    http://www.pimcore.org/license     GPLv3 and PEL
  13.  */
  14. namespace Pimcore\Bundle\AdminBundle\EventListener;
  15. use Pimcore\Bundle\AdminBundle\Security\User\TokenStorageUserResolver;
  16. use Pimcore\Bundle\CoreBundle\EventListener\Traits\PimcoreContextAwareTrait;
  17. use Pimcore\Config;
  18. use Pimcore\Http\Request\Resolver\PimcoreContextResolver;
  19. use Pimcore\Log\Simple;
  20. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  21. use Symfony\Component\HttpFoundation\Request;
  22. use Symfony\Component\HttpKernel\Event\GetResponseEvent;
  23. use Symfony\Component\HttpKernel\KernelEvents;
  24. class UsageStatisticsListener implements EventSubscriberInterface
  25. {
  26.     use PimcoreContextAwareTrait;
  27.     /**
  28.      * @var TokenStorageUserResolver
  29.      */
  30.     protected $userResolver;
  31.     /**
  32.      * @var Config
  33.      */
  34.     protected $config;
  35.     /**
  36.      * @param TokenStorageUserResolver $userResolver
  37.      */
  38.     public function __construct(TokenStorageUserResolver $userResolverConfig $config)
  39.     {
  40.         $this->userResolver $userResolver;
  41.         $this->config $config;
  42.     }
  43.     /**
  44.      * @inheritDoc
  45.      */
  46.     public static function getSubscribedEvents()
  47.     {
  48.         return [
  49.             KernelEvents::REQUEST => 'onKernelRequest'
  50.         ];
  51.     }
  52.     public function onKernelRequest(GetResponseEvent $event)
  53.     {
  54.         $request $event->getRequest();
  55.         if (!$event->isMasterRequest()) {
  56.             return;
  57.         }
  58.         if (!$this->matchesPimcoreContext($requestPimcoreContextResolver::CONTEXT_ADMIN)) {
  59.             return;
  60.         }
  61.         $this->logUsageStatistics($request);
  62.     }
  63.     /**
  64.      * @param Request $request
  65.      */
  66.     protected function logUsageStatistics(Request $request)
  67.     {
  68.         if (!empty($this->config['general']['disable_usage_statistics'])) {
  69.             return;
  70.         }
  71.         $params $this->getParams($request);
  72.         $user $this->userResolver->getUser();
  73.         $parts = [
  74.             $user $user->getId() : '0',
  75.             $request->attributes->get('_controller'),
  76.             $request->attributes->get('_route'),
  77.             @json_encode($request->attributes->get('_route_params')),
  78.             @json_encode($params)
  79.         ];
  80.         Simple::log('usagelog'implode('|'$parts));
  81.     }
  82.     /**
  83.      * @param Request $request
  84.      *
  85.      * @return array
  86.      */
  87.     protected function getParams(Request $request)
  88.     {
  89.         $params = [];
  90.         $disallowedKeys = ['_dc''module''controller''action''password'];
  91.         // TODO is this enough?
  92.         $requestParams array_merge(
  93.             $request->query->all(),
  94.             $request->request->all()
  95.         );
  96.         foreach ($requestParams as $key => $value) {
  97.             if (is_json($value)) {
  98.                 $value json_decode($value);
  99.                 if (is_array($value)) {
  100.                     array_walk_recursive($value, function (&$item$key) {
  101.                         if (strpos($key'pass') !== false) {
  102.                             $item '*************';
  103.                         }
  104.                     });
  105.                 }
  106.                 $value json_encode($value);
  107.             }
  108.             if (!in_array($key$disallowedKeys) && is_string($value)) {
  109.                 $params[$key] = (strlen($value) > 40) ? substr($value040) . '...' $value;
  110.             }
  111.         }
  112.         return $params;
  113.     }
  114. }