Projet

Général

Profil

0001-misc-handle-missing-title-or-birthdate-profile-attri.patch

Frédéric Péters, 16 février 2023 13:48

Télécharger (4,1 ko)

Voir les différences:

Subject: [PATCH] misc: handle missing title or birthdate profile attributes
 (#74596)

 src/authentic2_auth_fedict/adapters.py | 16 +++++++---
 tests/test_all.py                      | 44 ++++++++++++++++++++++++++
 2 files changed, 55 insertions(+), 5 deletions(-)
src/authentic2_auth_fedict/adapters.py
185 185
                else:
186 186
                    birthdate = ''
187 187
            try:
188
                Attribute.objects.get(name='birthdate').set_value(user, birthdate, verified=True)
189
            except AttributeError:  # native authentic date field
190
                birthdate = datetime.datetime.strptime(birthdate, '%d/%m/%Y').date()
191
                Attribute.objects.get(name='birthdate').set_value(user, birthdate, verified=True)
188
                try:
189
                    Attribute.objects.get(name='birthdate').set_value(user, birthdate, verified=True)
190
                except AttributeError:  # native authentic date field
191
                    birthdate = datetime.datetime.strptime(birthdate, '%d/%m/%Y').date()
192
                    Attribute.objects.get(name='birthdate').set_value(user, birthdate, verified=True)
193
            except Attribute.DoesNotExist:
194
                pass
192 195
            if int(nrn[6:9]) % 2:
193 196
                title = 'Monsieur'
194 197
            else:
195 198
                title = 'Madame'
196
            Attribute.objects.get(name='title').set_value(user, title, verified=True)
199
            try:
200
                Attribute.objects.get(name='title').set_value(user, title, verified=True)
201
            except Attribute.DoesNotExist:
202
                pass
197 203

  
198 204
        if saml_attributes.get('givenName'):
199 205
            Attribute.objects.get(name='first_name').set_value(
tests/test_all.py
250 250
    assert backend_user.last_name == 'Bar'
251 251

  
252 252

  
253
def test_missing_title_attribute(app, settings, issuer, user):
254
    Attribute.objects.filter(kind='title').delete()
255
    # email & title verified
256
    user.email = 'john.doe@verified.publik.love'
257
    user.email_verified = True
258
    user.first_name = 'Johnny'
259
    user.last_name = 'Smith'
260
    user.save()
261
    UserSAMLIdentifier.objects.create(
262
        user=user,
263
        name_id='c54db0a8ddc24a02a2d057f857d3b102',
264
        issuer=Issuer.objects.first(),
265
    )
266

  
267
    backend = FedictBackend()
268
    request = factory.get(path='/accounts/')
269
    request_user = User.objects.create(
270
        first_name='Foo',
271
        last_name='Bar',
272
        email='foo.bar@nowhere.null',
273
    )
274
    request.user = request_user
275
    saml_attributes = {
276
        'givenName': ['Doe'],
277
        'surname': ['John'],
278
        'last_name': ['Doe'],
279
        'first_name': ['John'],
280
        'username': ['john.doe'],
281
        'urn:be:fedict:iam:attr:fedid': ['c54db0a8ddc24a02a2d057f857d3b102'],
282
        'egovNRN': ['85073003328'],
283
        'is_superuser': ['false'],
284
        'issuer': 'https://idp.com/',
285
        'name_id_content': 'c54db0a8ddc24a02a2d057f857d3b102',
286
        'name_id_format': 'urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified',
287
        'name_id_name_qualifier': 'https://idp.com/idp/saml2/metadata',
288
        'name_id_content_orig': 'c54db0a8ddc24a02a2d057f857d3b102',
289
    }
290
    credentials = {'saml_attributes': saml_attributes}
291
    SessionMiddleware().process_request(request)
292
    MessageMiddleware().process_request(request)
293
    backend_user = backend.authenticate(request, **credentials)
294
    assert backend_user == request_user
295

  
296

  
253 297
def test_provision_old_account_deleted(app, settings, issuer, user):
254 298
    backend = FedictBackend()
255 299
    request = factory.get(path='/accounts/')
256
-