diff --git a/mellon/adapters.py b/mellon/adapters.py index fa97c68..f23fe68 100644 --- a/mellon/adapters.py +++ b/mellon/adapters.py @@ -87,6 +87,9 @@ class DefaultAdapter(object): log.warning('invalid reference in attribute mapping template %r: %s', tpl, e) else: attribute_set = True + model_field = user._meta.get_field(field) + if hasattr(model_field, 'max_length'): + value = value[:model_field.max_length] setattr(user, field, value) if attribute_set: user.save() diff --git a/tests/test_default_adapter.py b/tests/test_default_adapter.py index e6a6252..5fc9b31 100644 --- a/tests/test_default_adapter.py +++ b/tests/test_default_adapter.py @@ -77,3 +77,16 @@ def test_provision(settings): adapter.provision(user, idp, local_saml_attributes) assert not user.email User.objects.all().delete() + + local_saml_attributes = saml_attributes.copy() + settings.MELLON_ATTRIBUTE_MAPPING = { + 'email': '{attributes[email][0]}', + 'first_name': '{attributes[first_name][0]}', + 'last_name': '{attributes[last_name][0]}', + } + local_saml_attributes['first_name'] = [('y' * 32)] + user = User(username='xx') + user.save() + adapter.provision(user, idp, local_saml_attributes) + assert user.first_name == 'y' * 30 + User.objects.all().delete()