@@ -104,7 +104,9 @@ public function test_users_may_be_retrieved_from_cookies()
104
104
$ request ->headers ->set ('X-CSRF-TOKEN ' , 'token ' );
105
105
$ request ->cookies ->set ('laravel_token ' ,
106
106
$ encrypter ->encrypt (JWT ::encode ([
107
- 'sub ' => 1 , 'csrf ' => 'token ' ,
107
+ 'sub ' => 1 ,
108
+ 'aud ' => 1 ,
109
+ 'csrf ' => 'token ' ,
108
110
'expiry ' => Carbon::now ()->addMinutes (10 )->getTimestamp (),
109
111
], str_repeat ('a ' , 16 )), false )
110
112
);
@@ -130,7 +132,9 @@ public function test_cookie_xsrf_is_verified_against_header()
130
132
$ request ->headers ->set ('X-CSRF-TOKEN ' , 'wrong_token ' );
131
133
$ request ->cookies ->set ('laravel_token ' ,
132
134
$ encrypter ->encrypt (JWT ::encode ([
133
- 'sub ' => 1 , 'csrf ' => 'token ' ,
135
+ 'sub ' => 1 ,
136
+ 'aud ' => 1 ,
137
+ 'csrf ' => 'token ' ,
134
138
'expiry ' => Carbon::now ()->addMinutes (10 )->getTimestamp (),
135
139
], str_repeat ('a ' , 16 )))
136
140
);
@@ -154,7 +158,9 @@ public function test_expired_cookies_may_not_be_used()
154
158
$ request ->headers ->set ('X-CSRF-TOKEN ' , 'token ' );
155
159
$ request ->cookies ->set ('laravel_token ' ,
156
160
$ encrypter ->encrypt (JWT ::encode ([
157
- 'sub ' => 1 , 'csrf ' => 'token ' ,
161
+ 'sub ' => 1 ,
162
+ 'aud ' => 1 ,
163
+ 'csrf ' => 'token ' ,
158
164
'expiry ' => Carbon::now ()->subMinutes (10 )->getTimestamp (),
159
165
], str_repeat ('a ' , 16 )))
160
166
);
@@ -180,6 +186,7 @@ public function test_csrf_check_can_be_disabled()
180
186
$ request ->cookies ->set ('laravel_token ' ,
181
187
$ encrypter ->encrypt (JWT ::encode ([
182
188
'sub ' => 1 ,
189
+ 'aud ' => 1 ,
183
190
'expiry ' => Carbon::now ()->addMinutes (10 )->getTimestamp (),
184
191
], str_repeat ('a ' , 16 )), false )
185
192
);
@@ -190,9 +197,111 @@ public function test_csrf_check_can_be_disabled()
190
197
191
198
$ this ->assertEquals ($ expectedUser , $ user );
192
199
}
200
+
201
+ public function test_client_can_be_pulled_via_bearer_token ()
202
+ {
203
+ $ resourceServer = Mockery::mock ('League\OAuth2\Server\ResourceServer ' );
204
+ $ userProvider = Mockery::mock ('Illuminate\Contracts\Auth\UserProvider ' );
205
+ $ tokens = Mockery::mock ('Laravel\Passport\TokenRepository ' );
206
+ $ clients = Mockery::mock ('Laravel\Passport\ClientRepository ' );
207
+ $ encrypter = Mockery::mock ('Illuminate\Contracts\Encryption\Encrypter ' );
208
+
209
+ $ guard = new TokenGuard ($ resourceServer , $ userProvider , $ tokens , $ clients , $ encrypter );
210
+
211
+ $ request = Request::create ('/ ' );
212
+ $ request ->headers ->set ('Authorization ' , 'Bearer token ' );
213
+
214
+ $ resourceServer ->shouldReceive ('validateAuthenticatedRequest ' )->andReturn ($ psr = Mockery::mock ());
215
+ $ psr ->shouldReceive ('getAttribute ' )->with ('oauth_client_id ' )->andReturn (1 );
216
+ $ clients ->shouldReceive ('findActive ' )->with (1 )->andReturn (new TokenGuardTestClient );
217
+
218
+ $ client = $ guard ->client ($ request );
219
+
220
+ $ this ->assertInstanceOf ('TokenGuardTestClient ' , $ client );
221
+ }
222
+
223
+ public function test_no_client_is_returned_when_oauth_throws_exception ()
224
+ {
225
+ $ container = new Container ;
226
+ Container::setInstance ($ container );
227
+ $ container ->instance ('Illuminate\Contracts\Debug\ExceptionHandler ' , $ handler = Mockery::mock ());
228
+ $ handler ->shouldReceive ('report ' )->once ()->with (Mockery::type ('League\OAuth2\Server\Exception\OAuthServerException ' ));
229
+
230
+ $ resourceServer = Mockery::mock ('League\OAuth2\Server\ResourceServer ' );
231
+ $ userProvider = Mockery::mock ('Illuminate\Contracts\Auth\UserProvider ' );
232
+ $ tokens = Mockery::mock ('Laravel\Passport\TokenRepository ' );
233
+ $ clients = Mockery::mock ('Laravel\Passport\ClientRepository ' );
234
+ $ encrypter = Mockery::mock ('Illuminate\Contracts\Encryption\Encrypter ' );
235
+
236
+ $ guard = new TokenGuard ($ resourceServer , $ userProvider , $ tokens , $ clients , $ encrypter );
237
+
238
+ $ request = Request::create ('/ ' );
239
+ $ request ->headers ->set ('Authorization ' , 'Bearer token ' );
240
+
241
+ $ resourceServer ->shouldReceive ('validateAuthenticatedRequest ' )->andThrow (
242
+ new League \OAuth2 \Server \Exception \OAuthServerException ('message ' , 500 , 'error type ' )
243
+ );
244
+
245
+ $ this ->assertNull ($ guard ->client ($ request ));
246
+
247
+ // Assert that `validateAuthenticatedRequest` isn't called twice on failure.
248
+ $ this ->assertNull ($ guard ->client ($ request ));
249
+ }
250
+
251
+ public function test_null_is_returned_if_no_client_is_found ()
252
+ {
253
+ $ resourceServer = Mockery::mock ('League\OAuth2\Server\ResourceServer ' );
254
+ $ userProvider = Mockery::mock ('Illuminate\Contracts\Auth\UserProvider ' );
255
+ $ tokens = Mockery::mock ('Laravel\Passport\TokenRepository ' );
256
+ $ clients = Mockery::mock ('Laravel\Passport\ClientRepository ' );
257
+ $ encrypter = Mockery::mock ('Illuminate\Contracts\Encryption\Encrypter ' );
258
+
259
+ $ guard = new TokenGuard ($ resourceServer , $ userProvider , $ tokens , $ clients , $ encrypter );
260
+
261
+ $ request = Request::create ('/ ' );
262
+ $ request ->headers ->set ('Authorization ' , 'Bearer token ' );
263
+
264
+ $ resourceServer ->shouldReceive ('validateAuthenticatedRequest ' )->andReturn ($ psr = Mockery::mock ());
265
+ $ psr ->shouldReceive ('getAttribute ' )->with ('oauth_client_id ' )->andReturn (1 );
266
+ $ clients ->shouldReceive ('findActive ' )->with (1 )->andReturn (null );
267
+
268
+ $ this ->assertNull ($ guard ->client ($ request ));
269
+ }
270
+
271
+ public function test_clients_may_be_retrieved_from_cookies ()
272
+ {
273
+ $ resourceServer = Mockery::mock ('League\OAuth2\Server\ResourceServer ' );
274
+ $ userProvider = Mockery::mock ('Illuminate\Contracts\Auth\UserProvider ' );
275
+ $ tokens = Mockery::mock ('Laravel\Passport\TokenRepository ' );
276
+ $ clients = Mockery::mock ('Laravel\Passport\ClientRepository ' );
277
+ $ encrypter = new Illuminate \Encryption \Encrypter (str_repeat ('a ' , 16 ));
278
+
279
+ $ guard = new TokenGuard ($ resourceServer , $ userProvider , $ tokens , $ clients , $ encrypter );
280
+
281
+ $ request = Request::create ('/ ' );
282
+ $ request ->headers ->set ('X-CSRF-TOKEN ' , 'token ' );
283
+ $ request ->cookies ->set ('laravel_token ' ,
284
+ $ encrypter ->encrypt (JWT ::encode ([
285
+ 'sub ' => 1 ,
286
+ 'aud ' => 1 ,
287
+ 'csrf ' => 'token ' ,
288
+ 'expiry ' => Carbon::now ()->addMinutes (10 )->getTimestamp (),
289
+ ], str_repeat ('a ' , 16 )), false )
290
+ );
291
+
292
+ $ clients ->shouldReceive ('findActive ' )->with (1 )->andReturn ($ expectedClient = new TokenGuardTestClient );
293
+
294
+ $ client = $ guard ->client ($ request );
295
+
296
+ $ this ->assertEquals ($ expectedClient , $ client );
297
+ }
193
298
}
194
299
195
300
class TokenGuardTestUser
196
301
{
197
302
use Laravel \Passport \HasApiTokens;
198
303
}
304
+
305
+ class TokenGuardTestClient
306
+ {
307
+ }
0 commit comments