<?php
namespace App\Logger\Core;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\HttpFoundation\Exception\SessionNotFoundException;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use function substr;
class SessionRequestProcessor
{
private $requestStack;
private $tokenStorage;
public function __construct(TokenStorageInterface $tokenStorage, RequestStack $requestStack)
{
$this->tokenStorage = $tokenStorage;
$this->requestStack = $requestStack;
}
public function __invoke(array $record)
{
try {
$session = $this->requestStack->getSession();
} catch (SessionNotFoundException $e) {
return $record;
}
if (!$session->isStarted()) {
return $record;
}
$sessionId = substr($session->getId(), 0, 8) ?: '????????';
$record['extra']['token'] = $sessionId.'-'.substr(uniqid('', true), -8);
$token = $this->tokenStorage->getToken();
if ($token === null || !($token->getUser() instanceof UserInterface)) {
$userName = 'no user registrered';
$userAgent = 'no user registrered';
} else {
$userName = $token->getUserIdentifier();
$userAgent = $token->getUser()->getUserAgent();
}
$record['extra']['userid'] = $userName;
$record['extra']['useragent'] = $userAgent;
return $record;
}
}