Skip to content

Commit 40be7fe

Browse files
committed
Merge pull request #9 from Jean85/master
Setting the user through a new listener
2 parents 0d19adf + 1b71b3f commit 40be7fe

File tree

3 files changed

+83
-6
lines changed

3 files changed

+83
-6
lines changed

composer.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"require": {
1515
"php": ">=5.3.3",
1616
"sentry/sentry": ">=0.18.0",
17-
"symfony/symfony": ">=2.2.0"
17+
"symfony/symfony": ">=2.4.0"
1818
},
1919
"require-dev": {
2020
"fabpot/php-cs-fixer": "^1.8.0",

src/Sentry/SentryBundle/EventListener/ExceptionListener.php

+77-4
Original file line numberDiff line numberDiff line change
@@ -2,33 +2,106 @@
22

33
namespace Sentry\SentryBundle\EventListener;
44

5+
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
56
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
67
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
8+
use Symfony\Component\HttpKernel\HttpKernelInterface;
9+
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
10+
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
11+
use Symfony\Component\Security\Core\User\UserInterface;
712

13+
/**
14+
* Class ExceptionListener
15+
* @package Sentry\SentryBundle\EventListener
16+
*/
817
class ExceptionListener
918
{
10-
public function __construct(\Raven_Client $client = null)
11-
{
19+
/** @var TokenStorageInterface */
20+
private $tokenStorage;
21+
22+
/** @var AuthorizationCheckerInterface */
23+
private $authorizationChecker;
24+
25+
/** @var \Raven_Client */
26+
private $client;
27+
28+
/**
29+
* ExceptionListener constructor.
30+
* @param TokenStorageInterface $tokenStorage
31+
* @param AuthorizationCheckerInterface $authorizationChecker
32+
* @param \Raven_Client $client
33+
*/
34+
public function __construct(
35+
TokenStorageInterface $tokenStorage,
36+
AuthorizationCheckerInterface $authorizationChecker,
37+
\Raven_Client $client = null
38+
) {
1239
if (!$client) {
1340
$client = new \Raven_Client();
1441
}
42+
43+
$this->tokenStorage = $tokenStorage;
44+
$this->authorizationChecker = $authorizationChecker;
1545
$this->client = $client;
1646
}
1747

48+
/**
49+
* @param \Raven_Client $client
50+
*/
1851
public function setClient(\Raven_Client $client)
1952
{
2053
$this->client = $client;
2154
}
2255

56+
/**
57+
* Set the username from the security context by listening on core.request
58+
*
59+
* @param GetResponseEvent $event
60+
*/
61+
public function onKernelRequest(GetResponseEvent $event)
62+
{
63+
if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
64+
return;
65+
}
66+
67+
if (null === $this->tokenStorage || null === $this->authorizationChecker) {
68+
return;
69+
}
70+
71+
$token = $this->tokenStorage->getToken();
72+
if (null !== $token && $this->authorizationChecker->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
73+
$this->setUserValue($token->getUser());
74+
}
75+
}
76+
77+
/**
78+
* @param GetResponseForExceptionEvent $event
79+
*/
2380
public function onKernelException(GetResponseForExceptionEvent $event)
2481
{
2582
$exception = $event->getException();
2683

27-
// dont capture HTTP responses
28-
if ($exception instanceof HttpException) {
84+
// don't capture HTTP responses
85+
if ($exception instanceof HttpExceptionInterface) {
2986
return;
3087
}
3188

3289
$this->client->captureException($exception);
3390
}
91+
92+
/**
93+
* @param UserInterface | object | string $user
94+
*/
95+
private function setUserValue($user)
96+
{
97+
switch (true) {
98+
case $user instanceof UserInterface:
99+
$this->client->set_user_data($user->getUsername());
100+
return;
101+
case is_object($user):
102+
case is_string($user):
103+
$this->client->set_user_data((string) $user);
104+
return;
105+
}
106+
}
34107
}

src/Sentry/SentryBundle/Resources/config/services.yml

+5-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ services:
1010

1111
sentry.exception_listener:
1212
class: '%sentry.exception_listener%'
13-
arguments: ['@sentry.client']
13+
arguments:
14+
- '@security.token_storage'
15+
- '@security.authorization_checker'
16+
- '@sentry.client'
1417
tags:
18+
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
1519
- { name: kernel.event_listener, event: kernel.exception, method: onKernelException }

0 commit comments

Comments
 (0)