misc: cache SAML identifier model on logged user (#41949)

This commit is contained in:
Benjamin Dauvergne 2020-04-24 12:48:00 +02:00
parent 7b5ad08ad8
commit 2c6a051b4a
1 changed files with 8 additions and 4 deletions

View File

@ -306,12 +306,14 @@ class DefaultAdapter(object):
name_id = saml_attributes['name_id_content']
issuer = saml_attributes['issuer']
try:
user = self.get_users_queryset(idp, saml_attributes).get(
saml_identifiers__name_id=name_id,
saml_identifiers__issuer=issuer)
saml_identifier = models.UserSAMLIdentifier.objects.select_related('user').get(
name_id=name_id,
issuer=issuer)
user = saml_identifier.user
user.saml_identifier = saml_identifier
logger.info('looked up user %s with name_id %s from issuer %s', user, name_id, issuer)
return user
except User.DoesNotExist:
except models.UserSAMLIdentifier.DoesNotExist:
pass
user = self.lookup_by_attributes(idp, saml_attributes)
@ -402,8 +404,10 @@ class DefaultAdapter(object):
saml_id, created = models.UserSAMLIdentifier.objects.get_or_create(
name_id=name_id, issuer=issuer, defaults={'user': user})
if created:
user.saml_identifier = saml_id
return user
else:
saml_id.user.saml_identifier = saml_id
return saml_id.user
def provision(self, user, idp, saml_attributes):