franceconnect: adapt to py3 (#36515)
This commit is contained in:
parent
78084aa023
commit
3fefe4a344
|
@ -1,7 +1,7 @@
|
||||||
import base64
|
import base64
|
||||||
import json
|
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 urllib
|
||||||
from django.utils.six.moves.urllib import parse as urlparse
|
from django.utils.six.moves.urllib import parse as urlparse
|
||||||
from quixote import cleanup, get_session_manager
|
from quixote import cleanup, get_session_manager
|
||||||
|
@ -110,7 +110,7 @@ def setup_fc_environment(pub):
|
||||||
|
|
||||||
def get_session(app):
|
def get_session(app):
|
||||||
try:
|
try:
|
||||||
session_id = app.cookies.values()[0]
|
session_id = list(app.cookies.values())[0]
|
||||||
except IndexError:
|
except IndexError:
|
||||||
return None
|
return None
|
||||||
else:
|
else:
|
||||||
|
@ -135,7 +135,7 @@ def test_fc_login_page(caplog):
|
||||||
}
|
}
|
||||||
token_result = {
|
token_result = {
|
||||||
'access_token': 'abcd',
|
'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 = {
|
user_info_result = {
|
||||||
'sub': 'ymca',
|
'sub': 'ymca',
|
||||||
|
@ -196,7 +196,7 @@ def test_fc_login_page(caplog):
|
||||||
qs = urlparse.parse_qs(resp.location.split('?')[1])
|
qs = urlparse.parse_qs(resp.location.split('?')[1])
|
||||||
state = qs['state'][0]
|
state = qs['state'][0]
|
||||||
id_token['nonce'] = qs['nonce'][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, \
|
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:
|
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])
|
qs = urlparse.parse_qs(resp.location.split('?')[1])
|
||||||
state = qs['state'][0]
|
state = qs['state'][0]
|
||||||
id_token['nonce'] = qs['nonce'][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 = {
|
bad_user_info_result = {
|
||||||
'sub': 'ymca2',
|
'sub': 'ymca2',
|
||||||
'given_name': 'John',
|
'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'
|
assert pub.user_class.count() == 1, 'an invalid user (no email) has been created'
|
||||||
session = get_session(app)
|
session = get_session(app)
|
||||||
assert not session
|
assert (not session or not session.user)
|
||||||
|
|
||||||
|
|
||||||
def test_fc_settings():
|
def test_fc_settings():
|
||||||
|
|
|
@ -331,7 +331,7 @@ class FCAuthMethod(AuthMethod):
|
||||||
id_token = result['id_token']
|
id_token = result['id_token']
|
||||||
access_token = result['access_token']
|
access_token = result['access_token']
|
||||||
header, payload, signature = id_token.split('.')
|
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()
|
nonce = hashlib.sha256(force_bytes(session.id)).hexdigest()
|
||||||
if payload['nonce'] != nonce:
|
if payload['nonce'] != nonce:
|
||||||
logger.error('FranceConnect returned nonce did not match')
|
logger.error('FranceConnect returned nonce did not match')
|
||||||
|
|
Loading…
Reference in New Issue