src/CoreBundle/Logger/SessionRequestProcessor.php line 26

Open in your IDE?
  1. <?php
  2. namespace CoreBundle\Logger;
  3. use FOS\UserBundle\Model\UserInterface;
  4. use Symfony\Component\HttpFoundation\Exception\SessionNotFoundException;
  5. use Symfony\Component\HttpFoundation\RequestStack;
  6. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  7. use function substr;
  8. class SessionRequestProcessor
  9. {
  10. private $requestStack;
  11. private $tokenStorage;
  12. public function __construct(TokenStorageInterface $tokenStorage, RequestStack $requestStack)
  13. {
  14. $this->tokenStorage = $tokenStorage;
  15. $this->requestStack = $requestStack;
  16. }
  17. public function __invoke(array $record)
  18. {
  19. try {
  20. $session = $this->requestStack->getSession();
  21. } catch (SessionNotFoundException $e) {
  22. return $record;
  23. }
  24. if (!$session->isStarted()) {
  25. return $record;
  26. }
  27. $sessionId = substr($session->getId(), 0, 8) ?: '????????';
  28. $record['extra']['token'] = $sessionId.'-'.substr(uniqid('', true), -8);
  29. $token = $this->tokenStorage->getToken();
  30. if ($token === null || !($token->getUser() instanceof UserInterface)) {
  31. $userName = 'no user registrered';
  32. $userAgent = 'no user registrered';
  33. } else {
  34. $userName = $token->getUserIdentifier();
  35. $userAgent = $token->getUser()->getUserAgent();
  36. }
  37. $record['extra']['userid'] = $userName;
  38. $record['extra']['useragent'] = $userAgent;
  39. return $record;
  40. }
  41. }