diff --git a/tests/test_fc_auth.py b/tests/test_fc_auth.py index 061ad8028..e3d0336f6 100644 --- a/tests/test_fc_auth.py +++ b/tests/test_fc_auth.py @@ -1,7 +1,7 @@ import base64 import json -from django.utils.encoding import force_bytes +from django.utils.encoding import force_bytes, force_text from django.utils.six.moves.urllib import parse as urllib from django.utils.six.moves.urllib import parse as urlparse from quixote import cleanup, get_session_manager @@ -110,7 +110,7 @@ def setup_fc_environment(pub): def get_session(app): try: - session_id = app.cookies.values()[0] + session_id = list(app.cookies.values())[0] except IndexError: return None else: @@ -135,7 +135,7 @@ def test_fc_login_page(caplog): } token_result = { 'access_token': 'abcd', - 'id_token': '.%s.' % base64url_encode(json.dumps(id_token)), + 'id_token': '.%s.' % force_text(base64url_encode(json.dumps(id_token))), } user_info_result = { 'sub': 'ymca', @@ -196,7 +196,7 @@ def test_fc_login_page(caplog): qs = urlparse.parse_qs(resp.location.split('?')[1]) state = qs['state'][0] id_token['nonce'] = qs['nonce'][0] - token_result['id_token'] = '.%s.' % base64url_encode(json.dumps(id_token)) + token_result['id_token'] = '.%s.' % force_text(base64url_encode(json.dumps(id_token))) with mock.patch('wcs.qommon.ident.franceconnect.http_post_request') as http_post_request, \ mock.patch('wcs.qommon.ident.franceconnect.http_get_page') as http_get_page: @@ -239,7 +239,7 @@ def test_fc_login_page(caplog): qs = urlparse.parse_qs(resp.location.split('?')[1]) state = qs['state'][0] id_token['nonce'] = qs['nonce'][0] - token_result['id_token'] = '.%s.' % base64url_encode(json.dumps(id_token)) + token_result['id_token'] = '.%s.' % force_text(base64url_encode(json.dumps(id_token))) bad_user_info_result = { 'sub': 'ymca2', 'given_name': 'John', @@ -255,7 +255,7 @@ def test_fc_login_page(caplog): })) assert pub.user_class.count() == 1, 'an invalid user (no email) has been created' session = get_session(app) - assert not session + assert (not session or not session.user) def test_fc_settings(): diff --git a/wcs/qommon/ident/franceconnect.py b/wcs/qommon/ident/franceconnect.py index bb8c99a0e..026dfc1c0 100644 --- a/wcs/qommon/ident/franceconnect.py +++ b/wcs/qommon/ident/franceconnect.py @@ -331,7 +331,7 @@ class FCAuthMethod(AuthMethod): id_token = result['id_token'] access_token = result['access_token'] header, payload, signature = id_token.split('.') - payload = json_loads(base64url_decode(payload)) + payload = json_loads(base64url_decode(force_bytes(payload))) nonce = hashlib.sha256(force_bytes(session.id)).hexdigest() if payload['nonce'] != nonce: logger.error('FranceConnect returned nonce did not match')