Projet

Général

Profil

0002-adapters-factorize-user-linking-33739.patch

Benjamin Dauvergne, 11 juin 2019 16:36

Télécharger (3,11 ko)

Voir les différences:

Subject: [PATCH 2/4] adapters: factorize user linking (#33739)

 mellon/adapters.py | 35 +++++++++++++++++++++--------------
 1 file changed, 21 insertions(+), 14 deletions(-)
mellon/adapters.py
14 14

  
15 15
from . import utils, app_settings, models
16 16

  
17
User = auth.get_user_model()
18

  
17 19

  
18 20
class UserCreationError(Exception):
19 21
    pass
......
108 110
        user.save()
109 111

  
110 112
    def lookup_user(self, idp, saml_attributes):
111
        User = auth.get_user_model()
112 113
        transient_federation_attribute = utils.get_setting(idp, 'TRANSIENT_FEDERATION_ATTRIBUTE')
113 114
        if saml_attributes['name_id_format'] == lasso.SAML2_NAME_IDENTIFIER_FORMAT_TRANSIENT:
114 115
            if (transient_federation_attribute
......
137 138
            return None
138 139

  
139 140
        user = self.create_user(User)
141
        nameid_user = self._link_user(idp, saml_attributes, issuer, name_id, user)
142
        if user != nameid_user:
143
            self.logger.info('looked up user %s with name_id %s from issuer %s',
144
                             nameid_user, name_id, issuer)
145
            user.delete()
146
            return nameid_user
147

  
148
        try:
149
            self.finish_create_user(idp, saml_attributes, nameid_user)
150
        except UserCreationError:
151
            nameid_user.delete()
152
            return None
153
        self.logger.info('created new user %s with name_id %s from issuer %s',
154
                         nameid_user, name_id, issuer)
155
        return nameid_user
156

  
157
    def _link_user(self, idp, saml_attributes, issuer, name_id, user):
140 158
        saml_id, created = models.UserSAMLIdentifier.objects.get_or_create(
141 159
            name_id=name_id, issuer=issuer, defaults={'user': user})
142 160
        if created:
143
            try:
144
                self.finish_create_user(idp, saml_attributes, user)
145
            except UserCreationError:
146
                user.delete()
147
                return None
148
            self.logger.info('created new user %s with name_id %s from issuer %s',
149
                             user, name_id, issuer)
161
            return user
150 162
        else:
151
            user.delete()
152
            user = saml_id.user
153
            self.logger.info('looked up user %s with name_id %s from issuer %s',
154
                             user, name_id, issuer)
155
        return user
163
            return saml_id.user
156 164

  
157 165
    def provision(self, user, idp, saml_attributes):
158 166
        self.provision_attribute(user, idp, saml_attributes)
......
215 223
            user.save()
216 224

  
217 225
    def provision_groups(self, user, idp, saml_attributes):
218
        User = user.__class__
219 226
        group_attribute = utils.get_setting(idp, 'GROUP_ATTRIBUTE')
220 227
        create_group = utils.get_setting(idp, 'CREATE_GROUP')
221 228
        if group_attribute in saml_attributes:
222
-