1818from django .conf import settings
1919from django .contrib import auth
2020from django .contrib .auth .backends import ModelBackend
21- from django .core .exceptions import (
22- MultipleObjectsReturned , ImproperlyConfigured ,
23- )
24-
25- from djangosaml2 .signals import pre_user_save
21+ from django .core .exceptions import (ImproperlyConfigured ,
22+ MultipleObjectsReturned )
2623
24+ from .signals import pre_user_save
2725
2826logger = logging .getLogger ('djangosaml2' )
2927
3028
3129def get_model (model_path ):
30+ from django .apps import apps
3231 try :
33- from django .apps import apps
3432 return apps .get_model (model_path )
35- except ImportError :
36- # Django < 1.7 (cannot use the new app loader)
37- from django .db .models import get_model as django_get_model
38- try :
39- app_label , model_name = model_path .split ('.' )
40- except ValueError :
41- raise ImproperlyConfigured ("SAML_USER_MODEL must be of the form "
42- "'app_label.model_name'" )
43- user_model = django_get_model (app_label , model_name )
44- if user_model is None :
45- raise ImproperlyConfigured ("SAML_USER_MODEL refers to model '%s' "
46- "that has not been installed" % model_path )
47- return user_model
33+ except LookupError :
34+ raise ImproperlyConfigured ("SAML_USER_MODEL refers to model '%s' that has not been installed" % model_path )
35+ except ValueError :
36+ raise ImproperlyConfigured ("SAML_USER_MODEL must be of the form 'app_label.model_name'" )
4837
4938
5039def get_saml_user_model ():
51- try :
52- # djangosaml2 custom user model
40+ if hasattr (settings , 'SAML_USER_MODEL' ):
5341 return get_model (settings .SAML_USER_MODEL )
54- except AttributeError :
55- try :
56- # Django 1.5 Custom user model
57- return auth .get_user_model ()
58- except AttributeError :
59- return auth .models .User
42+ return auth .get_user_model ()
6043
6144
6245class Saml2Backend (ModelBackend ):
@@ -89,7 +72,9 @@ def authenticate(self, request, session_info=None, attribute_mapping=None,
8972 else :
9073 logger .error ('The nameid is not available. Cannot find user without a nameid.' )
9174 else :
92- saml_user = self .get_attribute_value (django_user_main_attribute , attributes , attribute_mapping )
75+ saml_user = self .get_attribute_value (django_user_main_attribute ,
76+ attributes ,
77+ attribute_mapping )
9378
9479 if saml_user is None :
9580 logger .error ('Could not find saml_user value' )
@@ -111,7 +96,11 @@ def get_attribute_value(self, django_field, attributes, attribute_mapping):
11196 logger .debug ('attribute_mapping: %s' , attribute_mapping )
11297 for saml_attr , django_fields in attribute_mapping .items ():
11398 if django_field in django_fields and saml_attr in attributes :
114- saml_user = attributes [saml_attr ][0 ]
99+ saml_user = attributes .get (saml_attr , [None ])[0 ]
100+ if not saml_user :
101+ logger .error ('attributes[saml_attr] attribute '
102+ 'value is missing. Probably the user '
103+ 'session is expired.' )
115104 return saml_user
116105
117106 def is_authorized (self , attributes , attribute_mapping ):
0 commit comments