@@ -85,7 +85,8 @@ class TestLoginPresenter extends Tester\TestCase
8585 $ events = $ this ->presenter ->securityEvents ->findAll ();
8686 Assert::count (0 , $ events );
8787
88- $ request = new Request (
88+ $ payload = PresenterTestHelper::performPresenterRequest (
89+ $ this ->presenter ,
8990 "V1:Login " ,
9091 "POST " ,
9192 ["action " => "default " ],
@@ -95,16 +96,47 @@ class TestLoginPresenter extends Tester\TestCase
9596 ]
9697 );
9798
98- /** @var JsonResponse $response */
99- $ response = $ this ->presenter ->run ($ request );
100- Assert::type (JsonResponse::class, $ response );
101- $ result = $ response ->getPayload ();
99+ $ user = $ this ->presenter ->users ->getByEmail ($ this ->userLogin );
100+ Assert::same ($ user ->getId (), $ payload ["user " ]["id " ]);
101+ Assert::true ($ this ->presenter ->user ->isLoggedIn ());
102102
103- Assert::same (200 , $ result ["code " ]);
104- Assert::true (array_key_exists ("accessToken " , $ result ["payload " ]));
105- Assert::same ($ this ->presenter ->users ->getByEmail ($ this ->userLogin )->getId (), $ result ["payload " ]["user " ]["id " ]);
103+ Assert::true (array_key_exists ("accessToken " , $ payload ));
104+ $ token = $ this ->presenter ->accessManager ->decodeToken ($ payload ["accessToken " ]);
105+ Assert::same ($ user ->getId (), $ token ->getUserId ());
106+ Assert::same ($ this ->presenter ->accessManager ->getExpiration (), $ token ->getExpirationTime ());
107+
108+ $ events = $ this ->presenter ->securityEvents ->findAll ();
109+ Assert::count (1 , $ events );
110+ Assert::equal (SecurityEvent::TYPE_LOGIN , $ events [0 ]->getType ());
111+ Assert::equal ($ this ->presenter ->user ->getId (), $ events [0 ]->getUser ()->getId ());
112+ }
113+
114+ public function testLoginRestrictedExpiration ()
115+ {
116+ $ events = $ this ->presenter ->securityEvents ->findAll ();
117+ Assert::count (0 , $ events );
118+
119+ $ payload = PresenterTestHelper::performPresenterRequest (
120+ $ this ->presenter ,
121+ "V1:Login " ,
122+ "POST " ,
123+ ["action " => "default " ],
124+ [
125+ "username " => $ this ->userLogin ,
126+ "password " => $ this ->userPassword ,
127+ "expiration " => 10 ,
128+ ]
129+ );
130+
131+ $ user = $ this ->presenter ->users ->getByEmail ($ this ->userLogin );
132+ Assert::same ($ user ->getId (), $ payload ["user " ]["id " ]);
106133 Assert::true ($ this ->presenter ->user ->isLoggedIn ());
107134
135+ Assert::true (array_key_exists ("accessToken " , $ payload ));
136+ $ token = $ this ->presenter ->accessManager ->decodeToken ($ payload ["accessToken " ]);
137+ Assert::same ($ user ->getId (), $ token ->getUserId ());
138+ Assert::same (10 , $ token ->getExpirationTime ());
139+
108140 $ events = $ this ->presenter ->securityEvents ->findAll ();
109141 Assert::count (1 , $ events );
110142 Assert::equal (SecurityEvent::TYPE_LOGIN , $ events [0 ]->getType ());
@@ -171,10 +203,66 @@ class TestLoginPresenter extends Tester\TestCase
171203 $ result = $ response ->getPayload ();
172204
173205 Assert::same (200 , $ result ["code " ]);
206+ Assert::equal ($ user ->getId (), $ result ["payload " ]["user " ]["id " ]);
207+ Assert::true ($ this ->presenter ->user ->isLoggedIn ());
208+
174209 Assert::true (array_key_exists ("accessToken " , $ result ["payload " ]));
210+ $ token = $ this ->presenter ->accessManager ->decodeToken ($ result ["payload " ]["accessToken " ]);
211+ Assert::same ($ user ->getId (), $ token ->getUserId ());
212+ Assert::same ($ this ->presenter ->accessManager ->getExpiration (), $ token ->getExpirationTime ());
213+
214+ $ events = $ this ->presenter ->securityEvents ->findAll ();
215+ Assert::count (1 , $ events );
216+ Assert::equal (SecurityEvent::TYPE_LOGIN_EXTERNAL , $ events [0 ]->getType ());
217+ Assert::equal ($ user ->getId (), $ events [0 ]->getUser ()->getId ());
218+ }
219+
220+ public function testLoginExternalRestrictedExpiration ()
221+ {
222+ $ events = $ this ->presenter ->securityEvents ->findAll ();
223+ Assert::count (0 , $ events );
224+
225+ $ authenticator = new ExternalServiceAuthenticator (
226+ [[
227+ 'name ' => 'test-cas ' ,
228+ 'jwtSecret ' => 'tajnyRetezec ' ,
229+ ]],
230+ $ this ->externalLogins ,
231+ $ this ->users ,
232+ $ this ->logins ,
233+ $ this ->instances ,
234+ $ this ->emailVerificationHelper ,
235+ $ this ->failureHelper
236+ );
237+
238+ $ user = $ this ->presenter ->users ->getByEmail ($ this ->userLogin );
239+
240+ $ payload = [
241+ 'iat ' => time (),
242+ 'id ' => 'external-id-1 ' ,
243+ 'mail ' => $ this ->userLogin ,
244+ 'firstName ' => $ user ->getFirstName (),
245+ 'lastName ' => $ user ->getLastName (),
246+ ];
247+ $ token = JWT ::encode ($ payload , 'tajnyRetezec ' , "HS256 " );
248+
249+ $ this ->presenter ->externalServiceAuthenticator = $ authenticator ;
250+
251+ $ request = new Request ("V1:Login " , "POST " , ["action " => "external " , "authenticatorName " => "test-cas " ], ['token ' => $ token , 'expiration ' => 15 ]);
252+
253+ $ response = $ this ->presenter ->run ($ request );
254+ Assert::type (JsonResponse::class, $ response );
255+ $ result = $ response ->getPayload ();
256+
257+ Assert::same (200 , $ result ["code " ]);
175258 Assert::equal ($ user ->getId (), $ result ["payload " ]["user " ]["id " ]);
176259 Assert::true ($ this ->presenter ->user ->isLoggedIn ());
177260
261+ Assert::true (array_key_exists ("accessToken " , $ result ["payload " ]));
262+ $ token = $ this ->presenter ->accessManager ->decodeToken ($ result ["payload " ]["accessToken " ]);
263+ Assert::same ($ user ->getId (), $ token ->getUserId ());
264+ Assert::same (15 , $ token ->getExpirationTime ());
265+
178266 $ events = $ this ->presenter ->securityEvents ->findAll ();
179267 Assert::count (1 , $ events );
180268 Assert::equal (SecurityEvent::TYPE_LOGIN_EXTERNAL , $ events [0 ]->getType ());
0 commit comments