Projet

Général

Profil

0003-auth_fc-only-check-required-attributes-on-user-regis.patch

Benjamin Dauvergne, 26 juillet 2021 16:54

Télécharger (4,15 ko)

Voir les différences:

Subject: [PATCH 3/3] auth_fc: only check required attributes on user
 registration (#55836)

 src/authentic2_auth_fc/views.py | 20 +++++++++++++-------
 tests/auth_fc/test_auth_fc.py   |  6 ++++--
 2 files changed, 17 insertions(+), 9 deletions(-)
src/authentic2_auth_fc/views.py
328 328
        user = utils_misc.authenticate(request, sub=self.sub, user_info=self.user_info, token=self.token)
329 329

  
330 330
        if not user:
331
            user = self.create_account(request, sub=self.sub, token=self.token, user_info=self.user_info)
331
            user, created = self.create_account(
332
                request, sub=self.sub, token=self.token, user_info=self.user_info
333
            )
334
        else:
335
            created = False
332 336

  
333 337
        if not user:
334 338
            return self.redirect()
335 339

  
336
        return self.finish_login(request, user, self.user_info)
340
        return self.finish_login(request, user, self.user_info, created)
337 341

  
338
    def finish_login(self, request, user, user_info):
342
    def finish_login(self, request, user, user_info, created):
339 343
        self.update_user_info(user, user_info)
340 344
        utils_views.check_cookie_works(request)
341 345
        utils_misc.login(request, user, 'france-connect', service=self.service)
......
348 352
        request.session.set_expiry(0)
349 353

  
350 354
        # redirect to account edit page if any required attribute is not filled
351
        missing = self.missing_required_attributes(user)
355
        # only on user registration
356
        missing = created and self.missing_required_attributes(user)
352 357
        if missing:
353 358
            messages.warning(
354 359
                request,
......
393 398
                    )
394 399
                    % email,
395 400
                )
396
                return None
401
                return None, False
397 402
            if not created and user.fc_accounts.exists():
398 403
                messages.warning(
399 404
                    request,
......
430 435
            # let's try again
431 436
            if created:
432 437
                user.delete()
433
            return utils_misc.authenticate(request, sub=sub, token=token, user_info=user_info)
438
            return utils_misc.authenticate(request, sub=sub, token=token, user_info=user_info), False
434 439
        except Exception:
435 440
            # if anything unexpected happen and user was created, delete it and re-raise
436 441
            if created:
......
444 449
                logger.info('auth_fc: existing account "%s" linked to FranceConnect sub "%s"', user, sub)
445 450
                hooks.call_hooks('event', name='fc-link', user=user, sub=sub, request=request)
446 451

  
447
        return utils_misc.authenticate(request, sub=sub, user_info=user_info, token=token)
452
        authenticated_user = utils_misc.authenticate(request, sub=sub, user_info=user_info, token=token)
453
        return authenticated_user, created
448 454

  
449 455
    def uniqueness_check_failed(self, request):
450 456
        # currently logged :
tests/auth_fc/test_auth_fc.py
256 256

  
257 257

  
258 258
def test_login_with_missing_required_attributes(settings, app, franceconnect):
259
    Attribute.objects.create(label='Title', name='title', required=True, kind='title')
260
    Attribute.objects.create(label='Phone', name='phone', required=True, kind='phone_number')
259
    Attribute.objects.create(label='Title', name='title', required=True, user_editable=True, kind='title')
260
    Attribute.objects.create(
261
        label='Phone', name='phone', required=True, user_editable=True, kind='phone_number'
262
    )
261 263

  
262 264
    assert User.objects.count() == 0
263 265
    assert models.FcAccount.objects.count() == 0
264
-