Revision b806a15a snf-astakos-app/astakos/oa2/tests/djangobackend.py

b/snf-astakos-app/astakos/oa2/tests/djangobackend.py
315 315
        self.assertCount(AuthorizationCode, 1)
316 316

  
317 317
        # redirect is valid
318
        redirect1 = self.get_redirect_url(r)
319
        self.assertParam(redirect1, "code")
320
        self.assertNoParam(redirect1, "extra_param")
321
        self.assertHost(redirect1, "server.com")
322
        self.assertPath(redirect1, "/handle_code")
318
        redirect = self.get_redirect_url(r)
319
        self.assertParam(redirect, "code")
320
        self.assertNoParam(redirect, "extra_param")
321
        self.assertHost(redirect, "server.com")
322
        self.assertPath(redirect, "/handle_code")
323

  
324
        code = AuthorizationCode.objects.get(code=redirect.params['code'][0])
325
        #self.assertEqual(code.state, '')
326
        self.assertEqual(code.state, None)
327
        self.assertEqual(code.redirect_uri, self.client1_redirect_uri)
323 328

  
324 329
        params['state'] = 'csrfstate'
325 330
        params['scope'] = 'resource1'
326 331
        r = self.client.authorize_code('client1', urlparams=params)
327
        redirect2 = self.get_redirect_url(r)
328
        self.assertParamEqual(redirect2, "state", 'csrfstate')
332
        redirect = self.get_redirect_url(r)
333
        self.assertParamEqual(redirect, "state", 'csrfstate')
329 334
        self.assertCount(AuthorizationCode, 2)
330 335

  
331
        code1 = AuthorizationCode.objects.get(code=redirect1.params['code'][0])
332
        #self.assertEqual(code1.state, '')
333
        self.assertEqual(code1.state, None)
334
        self.assertEqual(code1.redirect_uri, self.client1_redirect_uri)
335

  
336
        code2 = AuthorizationCode.objects.get(code=redirect2.params['code'][0])
337
        self.assertEqual(code2.state, 'csrfstate')
338
        self.assertEqual(code2.redirect_uri, self.client1_redirect_uri)
336
        code = AuthorizationCode.objects.get(code=redirect.params['code'][0])
337
        self.assertEqual(code.state, 'csrfstate')
338
        self.assertEqual(code.redirect_uri, self.client1_redirect_uri)
339 339

  
340 340
        # valid request: trusted client
341 341
        params = {'redirect_uri': self.client3_redirect_uri,
......
347 347
        self.assertCount(AuthorizationCode, 3)
348 348

  
349 349
        # redirect is valid
350
        redirect3 = self.get_redirect_url(r)
351
        self.assertParam(redirect1, "code")
352
        self.assertNoParam(redirect3, "state")
353
        self.assertNoParam(redirect3, "extra_param")
354
        self.assertHost(redirect3, "server3.com")
355
        self.assertPath(redirect3, "/handle_code")
350
        redirect = self.get_redirect_url(r)
351
        self.assertParam(redirect, "code")
352
        self.assertNoParam(redirect, "state")
353
        self.assertNoParam(redirect, "extra_param")
354
        self.assertHost(redirect, "server3.com")
355
        self.assertPath(redirect, "/handle_code")
356 356

  
357
        code3 = AuthorizationCode.objects.get(code=redirect3.params['code'][0])
358
        self.assertEqual(code3.state, None)
359
        self.assertEqual(code3.redirect_uri, self.client3_redirect_uri)
357
        code = AuthorizationCode.objects.get(code=redirect.params['code'][0])
358
        self.assertEqual(code.state, None)
359
        self.assertEqual(code.redirect_uri, self.client3_redirect_uri)
360 360

  
361 361
        # valid request: trusted client
362 362
        params['state'] = 'csrfstate'
......
366 366
        self.assertCount(AuthorizationCode, 4)
367 367

  
368 368
        # redirect is valid
369
        redirect4 = self.get_redirect_url(r)
370
        self.assertParam(redirect4, "code")
371
        self.assertParamEqual(redirect4, "state", 'csrfstate')
372
        self.assertNoParam(redirect4, "extra_param")
373
        self.assertHost(redirect4, "server3.com")
374
        self.assertPath(redirect4, "/handle_code")
369
        redirect = self.get_redirect_url(r)
370
        self.assertParam(redirect, "code")
371
        self.assertParamEqual(redirect, "state", 'csrfstate')
372
        self.assertNoParam(redirect, "extra_param")
373
        self.assertHost(redirect, "server3.com")
374
        self.assertPath(redirect, "/handle_code")
375 375

  
376
        code4 = AuthorizationCode.objects.get(code=redirect4.params['code'][0])
377
        self.assertEqual(code4.state, 'csrfstate')
378
        self.assertEqual(code4.redirect_uri, self.client3_redirect_uri)
376
        code = AuthorizationCode.objects.get(code=redirect.params['code'][0])
377
        self.assertEqual(code.state, 'csrfstate')
378
        self.assertEqual(code.redirect_uri, self.client3_redirect_uri)
379 379

  
380 380
        # redirect uri startswith the client's registered redirect url
381 381
        params['redirect_uri'] = '%smore' % self.client3_redirect_uri
......
392 392
        self.assertCount(AuthorizationCode, 5)
393 393

  
394 394
        # redirect is valid
395
        redirect5 = self.get_redirect_url(r)
396
        self.assertParam(redirect5, "code")
397
        self.assertParamEqual(redirect5, "state", 'csrfstate')
398
        self.assertNoParam(redirect5, "extra_param")
399
        self.assertHost(redirect5, "server3.com")
400
        self.assertPath(redirect5, urlparse.urlparse(redirect_uri).path)
401

  
402
        code5 = AuthorizationCode.objects.get(code=redirect5.params['code'][0])
403
        self.assertEqual(code5.state, 'csrfstate')
404
        self.assertEqual(code5.redirect_uri,
395
        redirect = self.get_redirect_url(r)
396
        self.assertParam(redirect, "code")
397
        self.assertParamEqual(redirect, "state", 'csrfstate')
398
        self.assertNoParam(redirect, "extra_param")
399
        self.assertHost(redirect, "server3.com")
400
        self.assertPath(redirect, urlparse.urlparse(redirect_uri).path)
401

  
402
        code = AuthorizationCode.objects.get(code=redirect.params['code'][0])
403
        self.assertEqual(code.state, 'csrfstate')
404
        self.assertEqual(code.redirect_uri,
405 405
                         '%s/more' % self.client3_redirect_uri)
406 406

  
407 407
        # too long redirect uri
408
        redirect_uri = '%s/%s' % (self.client3_redirect_uri, 'a'*2000)
408
        redirect_uri = '%s?foo=%s' % (self.client3_redirect_uri, 'a'*10000)
409 409
        params['redirect_uri'] = redirect_uri
410 410
        self.client.set_credentials('client3', 'secret')
411 411
        r = self.client.authorize_code('client3', urlparams=params)
412
        self.assertEqual(r.status_code, 302)
413
        self.assertCount(AuthorizationCode, 6)
414

  
415
        # redirect is valid
416
        redirect6 = self.get_redirect_url(r)
417
        self.assertParam(redirect6, "code")
418
        self.assertParamEqual(redirect6, "state", 'csrfstate')
419
        self.assertNoParam(redirect6, "extra_param")
420
        self.assertHost(redirect6, "server3.com")
421
        self.assertPath(redirect6, urlparse.urlparse(redirect_uri).path)
422

  
423
        code6 = AuthorizationCode.objects.get(code=redirect6.params['code'][0])
424
        self.assertEqual(code6.state, 'csrfstate')
425
        self.assertEqual(code6.redirect_uri, redirect_uri)
412
        self.assertEqual(r.status_code, 400)
426 413

  
427 414
    def test_get_token(self):
428 415
        # invalid method

Also available in: Unified diff