Skip to content

Commit 5be7ded

Browse files
committed
Merge branch '4.4' into 5.2
* 4.4: [Mailer] fix lowest allowed dependencies Refresh original user in SwitchUserListener. check if templating engine supports view [Mime] Escape commas in address names
2 parents e7947da + c5546b7 commit 5be7ded

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

Firewall/SwitchUserListener.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,7 @@ private function attemptExitUser(Request $request): TokenInterface
207207

208208
if (null !== $this->dispatcher && $original->getUser() instanceof UserInterface) {
209209
$user = $this->provider->refreshUser($original->getUser());
210+
$original->setUser($user);
210211
$switchEvent = new SwitchUserEvent($request, $user, $original);
211212
$this->dispatcher->dispatch($switchEvent, SecurityEvents::SWITCH_USER);
212213
$original = $switchEvent->getToken();

Tests/Firewall/SwitchUserListenerTest.php

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -396,4 +396,34 @@ public function testSwitchUserStateless()
396396
$this->assertInstanceOf(UsernamePasswordToken::class, $this->tokenStorage->getToken());
397397
$this->assertFalse($this->event->hasResponse());
398398
}
399+
400+
public function testSwitchUserRefreshesOriginalToken()
401+
{
402+
$originalUser = $this->createMock(UserInterface::class);
403+
$refreshedOriginalUser = $this->createMock(UserInterface::class);
404+
$this
405+
->userProvider
406+
->expects($this->any())
407+
->method('refreshUser')
408+
->with($originalUser)
409+
->willReturn($refreshedOriginalUser);
410+
$originalToken = new UsernamePasswordToken($originalUser, '', 'key');
411+
$this->tokenStorage->setToken(new SwitchUserToken('username', '', 'key', ['ROLE_USER'], $originalToken));
412+
$this->request->query->set('_switch_user', SwitchUserListener::EXIT_VALUE);
413+
414+
$dispatcher = $this->createMock(EventDispatcherInterface::class);
415+
$dispatcher
416+
->expects($this->once())
417+
->method('dispatch')
418+
->with(
419+
$this->callback(function (SwitchUserEvent $event) use ($refreshedOriginalUser) {
420+
return $event->getToken()->getUser() === $refreshedOriginalUser;
421+
}),
422+
SecurityEvents::SWITCH_USER
423+
)
424+
;
425+
426+
$listener = new SwitchUserListener($this->tokenStorage, $this->userProvider, $this->userChecker, 'provider123', $this->accessDecisionManager, null, '_switch_user', 'ROLE_ALLOWED_TO_SWITCH', $dispatcher);
427+
$listener($this->event);
428+
}
399429
}

0 commit comments

Comments
 (0)