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.auth.models import Group
from django.utils import six
from django.utils.encoding import force_text
from . import utils, app_settings, models
@ -83,7 +84,7 @@ class DefaultAdapter(object):
realm = utils.get_setting(idp, 'REALM')
username_template = utils.get_setting(idp, 'USERNAME_TEMPLATE')
try:
username = six.u(username_template).format(
username = force_text(username_template).format(
realm=realm, attributes=saml_attributes, idp=idp)[:30]
except ValueError:
self.logger.error(u'invalid username template %r', username_template)
@ -161,7 +162,7 @@ class DefaultAdapter(object):
attribute_set = False
for field, tpl in attribute_mapping.items():
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:
self.logger.warning(u'invalid attribute mapping template %r', tpl)
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.utils.http import urlencode
from django.utils import six
from django.utils.encoding import force_text
from django.contrib.auth import REDIRECT_FIELD_NAME
from django.db import transaction
from django.utils.translation import ugettext as _
@ -167,16 +168,16 @@ class LoginView(ProfileMixin, LogMixin, View):
attributes['issuer'] = login.remoteProviderId
if 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)
attributes.update({
'name_id_content': lasso_decode(name_id.content),
'name_id_format': name_id_format
})
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:
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]
if 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):
settings.MELLON_IDENTITY_PROVIDERS = [idp]
settings.MELLON_ATTRIBUTE_MAPPING = {
'email': '{attributes[email][0]}',
'first_name': '{attributes[first_name][0]}',
'last_name': '{attributes[last_name][0]}',
'email': u'{attributes[email][0]}',
'first_name': u'{attributes[first_name][0]}',
'last_name': u'{attributes[last_name][0]}',
}
user = SAMLBackend().authenticate(saml_attributes=saml_attributes)
assert user.username == 'x' * 30