From 22f8c50360074a60cbd39eecc52828bbc96cec26 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Fri, 24 Apr 2020 12:48:00 +0200 Subject: [PATCH 3/7] misc: pass SAML identifier model on login (#41949) --- mellon/adapters.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git mellon/adapters.py mellon/adapters.py index 3ff85c5..f3d8c02 100644 --- mellon/adapters.py +++ 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) @@ -401,9 +403,12 @@ class DefaultAdapter(object): def _link_user(self, idp, saml_attributes, issuer, name_id, user): saml_id, created = models.UserSAMLIdentifier.objects.get_or_create( name_id=name_id, issuer=issuer, defaults={'user': user}) + assert user is saml_id.user + user.saml_identifier = saml_id if created: return user else: + return saml_id.user def provision(self, user, idp, saml_attributes): -- 2.26.0