use force_text for python2/3 compatibility (#24139)

This commit is contained in:
Frédéric Péters 2018-05-29 12:21:13 +02:00
parent 9498e35cf4
commit edb09ed8fd
3 changed files with 10 additions and 8 deletions

View File

@ -10,6 +10,7 @@ from django.core.exceptions import PermissionDenied
from django.contrib import auth from django.contrib import auth
from django.contrib.auth.models import Group from django.contrib.auth.models import Group
from django.utils import six from django.utils import six
from django.utils.encoding import force_text
from . import utils, app_settings, models from . import utils, app_settings, models
@ -83,7 +84,7 @@ class DefaultAdapter(object):
realm = utils.get_setting(idp, 'REALM') realm = utils.get_setting(idp, 'REALM')
username_template = utils.get_setting(idp, 'USERNAME_TEMPLATE') username_template = utils.get_setting(idp, 'USERNAME_TEMPLATE')
try: try:
username = six.u(username_template).format( username = force_text(username_template).format(
realm=realm, attributes=saml_attributes, idp=idp)[:30] realm=realm, attributes=saml_attributes, idp=idp)[:30]
except ValueError: except ValueError:
self.logger.error(u'invalid username template %r', username_template) self.logger.error(u'invalid username template %r', username_template)
@ -161,7 +162,7 @@ class DefaultAdapter(object):
attribute_set = False attribute_set = False
for field, tpl in attribute_mapping.items(): for field, tpl in attribute_mapping.items():
try: try:
value = six.u(tpl).format(realm=realm, attributes=saml_attributes, idp=idp) value = force_text(tpl).format(realm=realm, attributes=saml_attributes, idp=idp)
except ValueError: except ValueError:
self.logger.warning(u'invalid attribute mapping template %r', tpl) self.logger.warning(u'invalid attribute mapping template %r', tpl)
except (AttributeError, KeyError, IndexError, ValueError) as e: except (AttributeError, KeyError, IndexError, ValueError) as e:

View File

@ -14,6 +14,7 @@ from django.views.decorators.csrf import csrf_exempt
from django.shortcuts import render, resolve_url from django.shortcuts import render, resolve_url
from django.utils.http import urlencode from django.utils.http import urlencode
from django.utils import six from django.utils import six
from django.utils.encoding import force_text
from django.contrib.auth import REDIRECT_FIELD_NAME from django.contrib.auth import REDIRECT_FIELD_NAME
from django.db import transaction from django.db import transaction
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
@ -167,16 +168,16 @@ class LoginView(ProfileMixin, LogMixin, View):
attributes['issuer'] = login.remoteProviderId attributes['issuer'] = login.remoteProviderId
if login.nameIdentifier: if login.nameIdentifier:
name_id = login.nameIdentifier name_id = login.nameIdentifier
name_id_format = six.u(name_id.format name_id_format = force_text(name_id.format
or lasso.SAML2_NAME_IDENTIFIER_FORMAT_UNSPECIFIED) or lasso.SAML2_NAME_IDENTIFIER_FORMAT_UNSPECIFIED)
attributes.update({ attributes.update({
'name_id_content': lasso_decode(name_id.content), 'name_id_content': lasso_decode(name_id.content),
'name_id_format': name_id_format 'name_id_format': name_id_format
}) })
if name_id.nameQualifier: if name_id.nameQualifier:
attributes['name_id_name_qualifier'] = six.u(name_id.nameQualifier) attributes['name_id_name_qualifier'] = force_text(name_id.nameQualifier)
if name_id.spNameQualifier: if name_id.spNameQualifier:
attributes['name_id_sp_name_qualifier'] = six.u(name_id.spNameQualifier) attributes['name_id_sp_name_qualifier'] = force_text(name_id.spNameQualifier)
authn_statement = login.assertion.authnStatement[0] authn_statement = login.assertion.authnStatement[0]
if authn_statement.authnInstant: if authn_statement.authnInstant:
attributes['authn_instant'] = utils.iso8601_to_datetime(authn_statement.authnInstant) attributes['authn_instant'] = utils.iso8601_to_datetime(authn_statement.authnInstant)

View File

@ -77,9 +77,9 @@ def test_lookup_user_transaction(transactional_db, concurrency):
def test_provision_user_attributes(settings, django_user_model, caplog): def test_provision_user_attributes(settings, django_user_model, caplog):
settings.MELLON_IDENTITY_PROVIDERS = [idp] settings.MELLON_IDENTITY_PROVIDERS = [idp]
settings.MELLON_ATTRIBUTE_MAPPING = { settings.MELLON_ATTRIBUTE_MAPPING = {
'email': '{attributes[email][0]}', 'email': u'{attributes[email][0]}',
'first_name': '{attributes[first_name][0]}', 'first_name': u'{attributes[first_name][0]}',
'last_name': '{attributes[last_name][0]}', 'last_name': u'{attributes[last_name][0]}',
} }
user = SAMLBackend().authenticate(saml_attributes=saml_attributes) user = SAMLBackend().authenticate(saml_attributes=saml_attributes)
assert user.username == 'x' * 30 assert user.username == 'x' * 30