src/EventListener/LoggerSubscriber.php line 105

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  4. use Symfony\Component\HttpKernel\Event\KernelEvent;
  5. use Symfony\Component\HttpKernel\KernelEvents;
  6. /**
  7.  * Listener responsible to change the redirection at the end of the password resetting
  8.  */
  9. class LoggerSubscriber implements EventSubscriberInterface
  10. {
  11.     private $event;
  12.     private $logger;
  13.     private $usersToAnalyze;
  14.     private $user;
  15.     private $assetsVersion;
  16.     public function __construct($tokenStorage$logger$usersToAnalyze$user$assetsVersion)
  17.     {
  18.         $this->logger         $logger;
  19.         $this->usersToAnalyze $usersToAnalyze;
  20.         $this->user           $user;
  21.         $this->assetsVersion  $assetsVersion;
  22.     }
  23.     public static function getSubscribedEvents(): array
  24.     {
  25.         //return [];
  26.         return [
  27.             KernelEvents::REQUEST => 'onKernelRequest',
  28.         ];
  29.     }
  30.     private function needToLog()
  31.     {
  32.         // we disable entirely this logger;
  33.         return false;
  34.     }
  35.     public function log()
  36.     {
  37.         /*
  38.          * Infos to send
  39.          * IP
  40.          * user-agent
  41.          * url
  42.          * method
  43.          * post data
  44.          * user id
  45.          * shop id
  46.          *
  47.          * => WE DO NOT WANT PASSWORD TO BE WRITTEN IN CLEAR IN LOGS <=
  48.          * NB : do not send $_POST data when the target page is login verification or new password choosing
  49.          *
  50.          */
  51.         $request       $this->event->getRequest();
  52.         $route         $request->attributes->get('_route');
  53.         $currentUserId $this->user->getEntity()->getId();
  54.         $currentShop   $this->user->getCurrentShopt();
  55.         $shopId = (is_null($currentShop)) ? 'NO ID' $currentShop->getEntity()->getId();
  56.         $data = [
  57.             'userId'        => 'user ' $currentUserId,
  58.             'shopId'        => 'shop ' $shopId,
  59.             'method'        => $request->getMethod(),
  60.             'requestUri'    => $request->getRequestUri(),
  61.             'postData'      => json_encode($request->request->all()),
  62.             'route'         => $route,
  63.             'assetsVersion' => 'assets version : ' $this->assetsVersion,
  64.             'ip'            => $request->getClientIp(),
  65.             'userAgent'     => $request->headers->get('User-Agent')
  66.         ];
  67.         // Clear data when password is sent in
  68.         if (in_array($route, [
  69.             'fos_user_security_login',
  70.             'admin_security_login',
  71.             'admin_security_reset_password',
  72.             'front_security_reset_password'
  73.         ])) {
  74.             $data['postData'] = null;
  75.         }
  76.         $this->logger->info(implode(' - '$data));
  77.     }
  78.     public function onKernelRequest(KernelEvent $event)
  79.     {
  80.         if (is_null($this->usersToAnalyze)) {
  81.             return;
  82.         }
  83.         $this->event $event;
  84.         $needToLog $this->needToLog();
  85.         if ($needToLog) {
  86.             $this->log();
  87.         }
  88.     }
  89. }