<?php
namespace App\EventListener;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\KernelEvent;
use Symfony\Component\HttpKernel\KernelEvents;
/**
* Listener responsible to change the redirection at the end of the password resetting
*/
class LoggerSubscriber implements EventSubscriberInterface
{
private $event;
private $logger;
private $usersToAnalyze;
private $user;
private $assetsVersion;
public function __construct($tokenStorage, $logger, $usersToAnalyze, $user, $assetsVersion)
{
$this->logger = $logger;
$this->usersToAnalyze = $usersToAnalyze;
$this->user = $user;
$this->assetsVersion = $assetsVersion;
}
public static function getSubscribedEvents(): array
{
//return [];
return [
KernelEvents::REQUEST => 'onKernelRequest',
];
}
private function needToLog()
{
// we disable entirely this logger;
return false;
}
public function log()
{
/*
* Infos to send
* IP
* user-agent
* url
* method
* post data
* user id
* shop id
*
* => WE DO NOT WANT PASSWORD TO BE WRITTEN IN CLEAR IN LOGS <=
* NB : do not send $_POST data when the target page is login verification or new password choosing
*
*/
$request = $this->event->getRequest();
$route = $request->attributes->get('_route');
$currentUserId = $this->user->getEntity()->getId();
$currentShop = $this->user->getCurrentShopt();
$shopId = (is_null($currentShop)) ? 'NO ID' : $currentShop->getEntity()->getId();
$data = [
'userId' => 'user ' . $currentUserId,
'shopId' => 'shop ' . $shopId,
'method' => $request->getMethod(),
'requestUri' => $request->getRequestUri(),
'postData' => json_encode($request->request->all()),
'route' => $route,
'assetsVersion' => 'assets version : ' . $this->assetsVersion,
'ip' => $request->getClientIp(),
'userAgent' => $request->headers->get('User-Agent')
];
// Clear data when password is sent in
if (in_array($route, [
'fos_user_security_login',
'admin_security_login',
'admin_security_reset_password',
'front_security_reset_password'
])) {
$data['postData'] = null;
}
$this->logger->info(implode(' - ', $data));
}
public function onKernelRequest(KernelEvent $event)
{
if (is_null($this->usersToAnalyze)) {
return;
}
$this->event = $event;
$needToLog = $this->needToLog();
if ($needToLog) {
$this->log();
}
}
}