pimcore/lib/Pimcore/Bundle/AdminBundle/EventListener/UsageStatisticsListener.php line 54

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.      * @param TokenStorageUserResolver $userResolver
  33.      */
  34.     public function __construct(TokenStorageUserResolver $userResolver)
  35.     {
  36.         $this->userResolver $userResolver;
  37.     }
  38.     /**
  39.      * @inheritDoc
  40.      */
  41.     public static function getSubscribedEvents()
  42.     {
  43.         return [
  44.             KernelEvents::REQUEST => 'onKernelRequest'
  45.         ];
  46.     }
  47.     public function onKernelRequest(GetResponseEvent $event)
  48.     {
  49.         $request $event->getRequest();
  50.         if (!$event->isMasterRequest()) {
  51.             return;
  52.         }
  53.         if (!$this->matchesPimcoreContext($requestPimcoreContextResolver::CONTEXT_ADMIN)) {
  54.             return;
  55.         }
  56.         $this->logUsageStatistics($request);
  57.     }
  58.     /**
  59.      * @param Request $request
  60.      */
  61.     protected function logUsageStatistics(Request $request)
  62.     {
  63.         if (Config::getSystemConfig()->general->disableusagestatistics) {
  64.             return;
  65.         }
  66.         $params $this->getParams($request);
  67.         $user   $this->userResolver->getUser();
  68.         $parts = [
  69.             $user $user->getId() : '0',
  70.             $request->attributes->get('_controller'),
  71.             $request->attributes->get('_route'),
  72.             @json_encode($request->attributes->get('_route_params')),
  73.             @json_encode($params)
  74.         ];
  75.         Simple::log('usagelog'implode('|'$parts));
  76.     }
  77.     /**
  78.      * @param Request $request
  79.      *
  80.      * @return array
  81.      */
  82.     protected function getParams(Request $request)
  83.     {
  84.         $params = [];
  85.         $disallowedKeys = ['_dc''module''controller''action''password'];
  86.         // TODO is this enough?
  87.         $requestParams array_merge(
  88.             $request->query->all(),
  89.             $request->request->all()
  90.         );
  91.         foreach ($requestParams as $key => $value) {
  92.             if (is_json($value)) {
  93.                 $value json_decode($value);
  94.                 if (is_array($value)) {
  95.                     array_walk_recursive($value, function (&$item$key) {
  96.                         if (strpos($key'pass') !== false) {
  97.                             $item '*************';
  98.                         }
  99.                     });
  100.                 }
  101.                 $value json_encode($value);
  102.             }
  103.             if (!in_array($key$disallowedKeys) && is_string($value)) {
  104.                 $params[$key] = (strlen($value) > 40) ? substr($value040) . '...' $value;
  105.             }
  106.         }
  107.         return $params;
  108.     }
  109. }