8000 [Security] Look at headers for switch user username parameter · symfony/symfony@3c80195 · GitHub
[go: up one dir, main page]

Skip to content
8000

Commit 3c80195

Browse files
author
Robin Chalas
committed
[Security] Look at headers for switch user username parameter
1 parent 0c6eca3 commit 3c80195

File tree

3 files changed

+10
-9
lines changed

3 files changed

+10
-9
lines changed

src/Symfony/Bundle/SecurityBundle/Tests/Functional/SwitchUserTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public function testSwitchedUserExit()
5454
public function testSwitchUserStateless()
5555
{
5656
$client = $this->createClient(array('test_case' => 'JsonLogin', 'root_config' => 'switchuser_stateless.yml'));
57-
$client->request('POST', '/chk', array('_switch_user' => 'dunglas'), array(), array('CONTENT_TYPE' => 'application/json'), '{"user": {"login": "user_can_switch", "password": "test"}}');
57+
$client->request('POST', '/chk', array(), array(), array('HTTP_X_SWITCH_USER' => 'dunglas', 'CONTENT_TYPE' => 'application/json'), '{"user": {"login": "user_can_switch", "password": "test"}}');
5858
$response = $client->getResponse();
5959

6060
$this->assertInstanceOf(JsonResponse::class, $response);

src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/JsonLogin/switchuser_stateless.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@ security:
1010
firewalls:
1111
main:
1212
switch_user:
13+
parameter: X-Switch-User
1314
stateless: true

src/Symfony/Component/Security/Http/Firewall/SwitchUserListener.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -79,16 +79,17 @@ public function __construct(TokenStorageInterface $tokenStorage, UserProviderInt
7979
public function handle(GetResponseEvent $event)
8080
{
8181
$request = $event->getRequest();
82+
$username = $request->get($this->usernameParameter) ?: $request->headers->get($this->usernameParameter);
8283

83-
if (!$request->get($this->usernameParameter)) {
84+
if (!$username) {
8485
return;
8586
}
8687

87-
if (self::EXIT_VALUE === $request->get($this->usernameParameter)) {
88+
if (self::EXIT_VALUE === $username) {
8889
$this->tokenStorage->setToken($this->attemptExitUser($request));
8990
} else {
9091
try {
91-
$this->tokenStorage->setToken($this->attemptSwitchUser($request));
92+
$this->tokenStorage->setToken($this->attemptSwitchUser($request, $username));
9293
} catch (AuthenticationException $e) {
9394
throw new \LogicException(sprintf('Switch User failed: "%s"', $e->getMessage()));
9495
}
@@ -106,20 +107,21 @@ public function handle(GetResponseEvent $event)
106107
/**
107108
* Attempts to switch to another user.
108109
*
109-
* @param Request $request A Request instance
110+
* @param Request $request A Request instance
111+
* @param string $username
110112
*
111113
* @return TokenInterface|null The new TokenInterface if successfully switched, null otherwise
112114
*
113115
* @throws \LogicException
114116
* @throws AccessDeniedException
115117
*/
116-
private function attemptSwitchUser(Request $request)
118+
private function attemptSwitchUser(Request $request, $username)
117119
{
118120
$token = $this->tokenStorage->getToken();
119121
$originalToken = $this->getOriginalToken($token);
120122

121123
if (false !== $originalToken) {
122-
if ($token->getUsername() === $request->get($this->usernameParameter)) {
124+
if ($token->getUsername() === $username) {
123125
return $token;
124126
}
125127

@@ -133,8 +135,6 @@ private function attemptSwitchUser(Request $request)
133135
throw $exception;
134136
}
135137

136-
$username = $request->get($this->usernameParameter);
137-
138138
if (null !== $this->logger) {
139139
$this->logger->info('Attempting to switch to user.', array('username' => $username));
140140
}

0 commit comments

Comments
 (0)
0