From 2c6a051b4a16ca174da67eab4a3535faebbfc2be Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Fri, 24 Apr 2020 12:48:00 +0200 Subject: [PATCH] misc: cache SAML identifier model on logged user (#41949) --- mellon/adapters.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/mellon/adapters.py b/mellon/adapters.py index 3ff85c5..7a970a8 100644 --- a/mellon/adapters.py +++ b/mellon/adapters.py @@ -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):