Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 3c80195

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

File tree

3 files changed

+10
-9
lines changed
Filter options

3 files changed

+10
-9
lines changed

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

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/SecurityBundle/Tests/Functional/SwitchUserTest.php
+1-1Lines 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

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/JsonLogin/switchuser_stateless.yml
+1Lines 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

Copy file name to clipboardExpand all lines: src/Symfony/Component/Security/Http/Firewall/SwitchUserListener.php
+8-8Lines 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)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.