18
18
use Symfony \Bundle \SecurityBundle \Security \FirewallMap ;
19
19
use Symfony \Component \EventDispatcher \EventDispatcher ;
20
20
use Symfony \Component \EventDispatcher \EventDispatcherInterface ;
21
+ use Symfony \Component \HttpFoundation \Request ;
22
+ use Symfony \Component \HttpFoundation \Response ;
21
23
use Symfony \Component \HttpKernel \Event \GetResponseEvent ;
22
24
use Symfony \Component \HttpKernel \HttpKernelInterface ;
23
25
use Symfony \Component \Security \Core \Authentication \Token \Storage \TokenStorage ;
26
+ use Symfony \Component \Security \Core \Authentication \Token \SwitchUserToken ;
24
27
use Symfony \Component \Security \Core \Authentication \Token \UsernamePasswordToken ;
25
28
use Symfony \Component \Security \Core \Authorization \AccessDecisionManager ;
26
29
use Symfony \Component \Security \Core \Authorization \TraceableAccessDecisionManager ;
@@ -38,7 +41,7 @@ class SecurityDataCollectorTest extends TestCase
38
41
public function testCollectWhenSecurityIsDisabled ()
39
42
{
40
43
$ collector = new SecurityDataCollector ();
41
- $ collector ->collect ($ this -> getRequest (), $ this -> getResponse ());
44
+ $ collector ->collect (new Request (), new Response ());
42
45
43
46
$ this ->assertSame ('security ' , $ collector ->getName ());
44
47
$ this ->assertFalse ($ collector ->isEnabled ());
@@ -58,7 +61,7 @@ public function testCollectWhenAuthenticationTokenIsNull()
58
61
{
59
62
$ tokenStorage = new TokenStorage ();
60
63
$ collector = new SecurityDataCollector ($ tokenStorage , $ this ->getRoleHierarchy ());
61
- $ collector ->collect ($ this -> getRequest (), $ this -> getResponse ());
64
+ $ collector ->collect (new Request (), new Response ());
62
65
63
66
$ this ->assertTrue ($ collector ->isEnabled ());
64
67
$ this ->assertFalse ($ collector ->isAuthenticated ());
@@ -80,7 +83,7 @@ public function testCollectAuthenticationTokenAndRoles(array $roles, array $norm
80
83
$ tokenStorage ->setToken (new UsernamePasswordToken ('hhamon ' , 'P4$$w0rD ' , 'provider ' , $ roles ));
81
84
82
85
$ collector = new SecurityDataCollector ($ tokenStorage , $ this ->getRoleHierarchy ());
83
- $ collector ->collect ($ this -> getRequest (), $ this -> getResponse ());
86
+ $ collector ->collect (new Request (), new Response ());
84
87
$ collector ->lateCollect ();
85
88
86
89
$ this ->assertTrue ($ collector ->isEnabled ());
@@ -95,6 +98,9 @@ public function testCollectAuthenticationTokenAndRoles(array $roles, array $norm
95
98
$ this ->assertSame ('hhamon ' , $ collector ->getUser ());
96
99
}
97
100
101
+ /**
102
+ * @group legacy
103
+ */
98
104
public function testCollectImpersonatedToken ()
99
105
{
100
106
$ adminToken = new UsernamePasswordToken ('yceruto ' , 'P4$$w0rD ' , 'provider ' , ['ROLE_ADMIN ' ]);
@@ -108,7 +114,7 @@ public function testCollectImpersonatedToken()
108
114
$ tokenStorage ->setToken (new UsernamePasswordToken ('hhamon ' , 'P4$$w0rD ' , 'provider ' , $ userRoles ));
109
115
110
116
$ collector = new SecurityDataCollector ($ tokenStorage , $ this ->getRoleHierarchy ());
111
- $ collector ->collect ($ this -> getRequest (), $ this -> getResponse ());
117
+ $ collector ->collect (new Request (), new Response ());
112
118
$ collector ->lateCollect ();
113
119
114
120
$ this ->assertTrue ($ collector ->isEnabled ());
@@ -122,10 +128,32 @@ public function testCollectImpersonatedToken()
122
128
$ this ->assertSame ('hhamon ' , $ collector ->getUser ());
123
129
}
124
130
131
+ public function testCollectSwitchUserToken ()
132
+ {
133
+ $ adminToken = new UsernamePasswordToken ('yceruto ' , 'P4$$w0rD ' , 'provider ' , ['ROLE_ADMIN ' ]);
134
+
135
+ $ tokenStorage = new TokenStorage ();
136
+ $ tokenStorage ->setToken (new SwitchUserToken ('hhamon ' , 'P4$$w0rD ' , 'provider ' , ['ROLE_USER ' , 'ROLE_PREVIOUS_ADMIN ' ], $ adminToken ));
137
+
138
+ $ collector = new SecurityDataCollector ($ tokenStorage , $ this ->getRoleHierarchy ());
139
+ $ collector ->collect (new Request (), new Response ());
140
+ $ collector ->lateCollect ();
141
+
142
+ $ this ->assertTrue ($ collector ->isEnabled ());
143
+ $ this ->assertTrue ($ collector ->isAuthenticated ());
144
+ $ this ->assertTrue ($ collector ->isImpersonated ());
145
+ $ this ->assertSame ('yceruto ' , $ collector ->getImpersonatorUser ());
146
+ $ this ->assertSame (SwitchUserToken::class, $ collector ->getTokenClass ()->getValue ());
147
+ $ this ->assertTrue ($ collector ->supportsRoleHierarchy ());
148
+ $ this ->assertSame (['ROLE_USER ' , 'ROLE_PREVIOUS_ADMIN ' ], $ collector ->getRoles ()->getValue (true ));
149
+ $ this ->assertSame ([], $ collector ->getInheritedRoles ()->getValue (true ));
150
+ $ this ->assertSame ('hhamon ' , $ collector ->getUser ());
151
+ }
152
+
125
153
public function testGetFirewall ()
126
154
{
127
155
$ firewallConfig = new FirewallConfig ('dummy ' , 'security.request_matcher.dummy ' , 'security.user_checker.dummy ' );
128
- $ request = $ this -> getRequest ();
156
+ $ request = new Request ();
129
157
130
158
$ firewallMap = $ this
131
159
->getMockBuilder (FirewallMap::class)
@@ -138,7 +166,7 @@ public function testGetFirewall()
138
166
->willReturn ($ firewallConfig );
139
167
140
168
$ collector = new SecurityDataCollector (null , null , null , null , $ firewallMap , new TraceableFirewallListener ($ firewallMap , new EventDispatcher (), new LogoutUrlGenerator ()));
141
- $ collector ->collect ($ request , $ this -> getResponse ());
169
+ $ collector ->collect ($ request , new Response ());
142
170
$ collector ->lateCollect ();
143
171
$ collected = $ collector ->getFirewall ();
144
172
@@ -158,8 +186,8 @@ public function testGetFirewall()
158
186
159
187
public function testGetFirewallReturnsNull ()
160
188
{
161
- $ request = $ this -> getRequest ();
162
- $ response = $ this -> getResponse ();
189
+ $ request = new Request ();
190
+ $ response = new Response ();
163
191
164
192
// Don't inject any firewall map
165
193
$ collector = new SecurityDataCollector ();
@@ -192,9 +220,9 @@ public function testGetFirewallReturnsNull()
192
220
*/
193
221
public function testGetListeners ()
194
222
{
195
- $ request = $ this -> getRequest ();
223
+ $ request = new Request ();
196
224
$ event = new GetResponseEvent ($ this ->getMockBuilder (HttpKernelInterface::class)->getMock (), $ request , HttpKernelInterface::MASTER_REQUEST );
197
- $ event ->setResponse ($ response = $ this -> getResponse ());
225
+ $ event ->setResponse ($ response = new Response ());
198
226
$ listener = $ this ->getMockBuilder (ListenerInterface::class)->getMock ();
199
227
$ listener
200
228
->expects ($ this ->once ())
@@ -345,7 +373,7 @@ public function testCollectDecisionLog(string $strategy, array $decisionLog, arr
345
373
->willReturn ($ decisionLog );
346
374
347
375
$ dataCollector = new SecurityDataCollector (null , null , null , $ accessDecisionManager );
348
- $ dataCollector ->collect ($ this -> getRequest (), $ this -> getResponse ());
376
+ $ dataCollector ->collect (new Request (), new Response ());
349
377
350
378
$ this ->assertEquals ($ dataCollector ->getAccessDecisionLog (), $ expectedDecisionLog , 'Wrong value returned by getAccessDecisionLog ' );
351
379
@@ -367,7 +395,7 @@ public function provideRoles()
367
395
[],
368
396
],
369
397
[
370
- [new Role ('ROLE_USER ' )],
398
+ [new Role ('ROLE_USER ' , false )],
371
399
['ROLE_USER ' ],
372
400
[],
373
401
],
@@ -378,7 +406,7 @@ public function provideRoles()
378
406
['ROLE_USER ' , 'ROLE_ALLOWED_TO_SWITCH ' ],
379
407
],
380
408
[
381
- [new Role ('ROLE_ADMIN ' )],
409
+ [new Role ('ROLE_ADMIN ' , false )],
382
410
['ROLE_ADMIN ' ],
383
411
['ROLE_USER ' , 'ROLE_ALLOWED_TO_SWITCH ' ],
384
412
],
@@ -397,20 +425,4 @@ private function getRoleHierarchy()
397
425
'ROLE_OPERATOR ' => ['ROLE_USER ' ],
398
426
]);
399
427
}
400
-
401
- private function getRequest ()
402
- {
403
- return $ this
404
- ->getMockBuilder ('Symfony\Component\HttpFoundation\Request ' )
405
- ->disableOriginalConstructor ()
406
- ->getMock ();
407
- }
408
-
409
- private function getResponse ()
410
- {
411
- return $ this
412
- ->getMockBuilder ('Symfony\Component\HttpFoundation\Response ' )
413
- ->disableOriginalConstructor ()
414
- ->getMock ();
415
- }
416
428
}
0 commit comments