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

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 Commercial License (PCL)
  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 PCL
  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\RequestEvent;
  23. use Symfony\Component\HttpKernel\KernelEvents;
  24. /**
  25.  * @internal
  26.  */
  27. class UsageStatisticsListener implements EventSubscriberInterface
  28. {
  29.     use PimcoreContextAwareTrait;
  30.     /**
  31.      * @var TokenStorageUserResolver
  32.      */
  33.     protected $userResolver;
  34.     /**
  35.      * @var Config
  36.      */
  37.     protected $config;
  38.     /**
  39.      * @param TokenStorageUserResolver $userResolver
  40.      */
  41.     public function __construct(TokenStorageUserResolver $userResolverConfig $config)
  42.     {
  43.         $this->userResolver $userResolver;
  44.         $this->config $config;
  45.     }
  46.     /**
  47.      * {@inheritdoc}
  48.      */
  49.     public static function getSubscribedEvents()
  50.     {
  51.         return [
  52.             KernelEvents::REQUEST => 'onKernelRequest',
  53.         ];
  54.     }
  55.     public function onKernelRequest(RequestEvent $event)
  56.     {
  57.         $request $event->getRequest();
  58.         if (!$event->isMainRequest()) {
  59.             return;
  60.         }
  61.         if (!$this->matchesPimcoreContext($requestPimcoreContextResolver::CONTEXT_ADMIN)) {
  62.             return;
  63.         }
  64.         $this->logUsageStatistics($request);
  65.     }
  66.     /**
  67.      * @param Request $request
  68.      */
  69.     protected function logUsageStatistics(Request $request)
  70.     {
  71.         if (!empty($this->config['general']['disable_usage_statistics'])) {
  72.             return;
  73.         }
  74.         $params $this->getParams($request);
  75.         $user $this->userResolver->getUser();
  76.         $parts = [
  77.             $user $user->getId() : '0',
  78.             $request->attributes->get('_controller'),
  79.             $request->attributes->get('_route'),
  80.             @json_encode($request->attributes->get('_route_params')),
  81.             @json_encode($params),
  82.         ];
  83.         Simple::log('usagelog'implode('|'$parts));
  84.     }
  85.     /**
  86.      * @param Request $request
  87.      *
  88.      * @return array
  89.      */
  90.     protected function getParams(Request $request)
  91.     {
  92.         $params = [];
  93.         $disallowedKeys = ['_dc''module''controller''action''password'];
  94.         // TODO is this enough?
  95.         $requestParams array_merge(
  96.             $request->query->all(),
  97.             $request->request->all()
  98.         );
  99.         foreach ($requestParams as $key => $value) {
  100.             if (is_json($value)) {
  101.                 $value json_decode($value);
  102.                 if (is_array($value)) {
  103.                     array_walk_recursive($value, function (&$item$key) {
  104.                         if (strpos($key'pass') !== false) {
  105.                             $item '*************';
  106.                         }
  107.                     });
  108.                 }
  109.                 $value json_encode($value);
  110.             }
  111.             if (!in_array($key$disallowedKeys) && is_string($value)) {
  112.                 $params[$key] = (strlen($value) > 40) ? substr($value040) . '...' $value;
  113.             }
  114.         }
  115.         return $params;
  116.     }
  117. }