1616use Symfony \Component \HttpKernel \Event \GetResponseEvent ;
1717use Symfony \Component \HttpKernel \HttpKernelInterface ;
1818use Symfony \Component \Security \Core \Authentication \Token \Storage \TokenStorage ;
19+ use Symfony \Component \Security \Core \Authentication \Token \SwitchUserToken ;
1920use Symfony \Component \Security \Core \Authentication \Token \UsernamePasswordToken ;
2021use Symfony \Component \Security \Core \Role \SwitchUserRole ;
2122use Symfony \Component \Security \Core \User \User ;
@@ -93,7 +94,7 @@ public function testExitUserThrowsAuthenticationExceptionIfOriginalTokenCannotBe
9394 public function testExitUserUpdatesToken ()
9495 {
9596 $ originalToken = new UsernamePasswordToken ('username ' , '' , 'key ' , []);
96- $ this ->tokenStorage ->setToken (new UsernamePasswordToken ('username ' , '' , 'key ' , [new SwitchUserRole ('ROLE_PREVIOUS ' , $ originalToken)] ));
97+ $ this ->tokenStorage ->setToken (new SwitchUserToken ('username ' , '' , 'key ' , [new SwitchUserRole ('ROLE_PREVIOUS ' , $ originalToken, false )], $ originalToken ));
9798
9899 $ this ->request ->query ->set ('_switch_user ' , SwitchUserListener::EXIT_VALUE );
99100
@@ -107,6 +108,22 @@ public function testExitUserUpdatesToken()
107108 $ this ->assertSame ($ originalToken , $ this ->tokenStorage ->getToken ());
108109 }
109110
111+ /**
112+ * @group legacy
113+ */
114+ public function testExitUserBasedOnSwitchUserRoleUpdatesToken ()
115+ {
116+ $ originalToken = new UsernamePasswordToken ('username ' , '' , 'key ' , array ());
117+ $ this ->tokenStorage ->setToken (new UsernamePasswordToken ('username ' , '' , 'key ' , array (new SwitchUserRole ('ROLE_PREVIOUS ' , $ originalToken , false )), $ originalToken ));
118+
119+ $ this ->request ->query ->set ('_switch_user ' , SwitchUserListener::EXIT_VALUE );
120+
121+ $ listener = new SwitchUserListener ($ this ->tokenStorage , $ this ->userProvider , $ this ->userChecker , 'provider123 ' , $ this ->accessDecisionManager );
122+ $ listener ->handle ($ this ->event );
123+
124+ $ this ->assertSame ($ originalToken , $ this ->tokenStorage ->getToken ());
125+ }
126+
110127 public function testExitUserDispatchesEventWithRefreshedUser ()
111128 {
112129 $ originalUser = $ this ->getMockBuilder ('Symfony\Component\Security\Core\User\UserInterface ' )->getMock ();
@@ -118,7 +135,7 @@ public function testExitUserDispatchesEventWithRefreshedUser()
118135 ->with ($ originalUser )
119136 ->willReturn ($ refreshedUser );
120137 $ originalToken = new UsernamePasswordToken ($ originalUser , '' , 'key ' );
121- $ this ->tokenStorage ->setToken (new UsernamePasswordToken ('username ' , '' , 'key ' , [new SwitchUserRole ('ROLE_PREVIOUS ' , $ originalToken)] ));
138+ $ this ->tokenStorage ->setToken (new SwitchUserToken ('username ' , '' , 'key ' , [new SwitchUserRole ('ROLE_PREVIOUS ' , $ originalToken, false )], $ originalToken ));
122139 $ this ->request ->query ->set ('_switch_user ' , SwitchUserListener::EXIT_VALUE );
123140
124141 $ dispatcher = $ this ->getMockBuilder ('Symfony\Component\EventDispatcher\EventDispatcherInterface ' )->getMock ();
@@ -142,7 +159,7 @@ public function testExitUserDoesNotDispatchEventWithStringUser()
142159 ->expects ($ this ->never ())
143160 ->method ('refreshUser ' );
144161 $ originalToken = new UsernamePasswordToken ($ originalUser , '' , 'key ' );
145- $ this ->tokenStorage ->setToken (new UsernamePasswordToken ('username ' , '' , 'key ' , [new SwitchUserRole ('ROLE_PREVIOUS ' , $ originalToken)] ));
162+ $ this ->tokenStorage ->setToken (new SwitchUserToken ('username ' , '' , 'key ' , [new SwitchUserRole ('ROLE_PREVIOUS ' , $ originalToken, false )], $ originalToken ));
146163 $ this ->request ->query ->set ('_switch_user ' , SwitchUserListener::EXIT_VALUE );
147164
148165 $ dispatcher = $ this ->getMockBuilder ('Symfony\Component\EventDispatcher\EventDispatcherInterface ' )->getMock ();
0 commit comments