Projet

Général

Profil

0001-idp_oidc-profile-selection-error-when-prompt-none-72.patch

Paul Marillonnet, 16 décembre 2022 11:01

Télécharger (3,99 ko)

Voir les différences:

Subject: [PATCH] idp_oidc: profile selection error when prompt=none (#72507)

 src/authentic2_idp_oidc/views.py |  9 +++++++
 tests/idp_oidc/test_misc.py      | 45 ++++++++++++++++++++++++++++++++
 2 files changed, 54 insertions(+)
src/authentic2_idp_oidc/views.py
169 169
    show_message = False
170 170

  
171 171

  
172
class SelectAccountRequired(OIDCException):
173
    error_code = 'select_account_required'
174
    show_message = False
175

  
176

  
172 177
class AccessDenied(OIDCException):
173 178
    error_code = 'access_denied'
174 179
    show_message = False
......
403 408
            needs_scope_validation = True
404 409
        if needs_scope_validation or (user_has_selectable_profiles and client.activate_user_profiles):
405 410
            if 'none' in prompt:
411
                if user_has_selectable_profiles and client.activate_user_profiles:
412
                    raise SelectAccountRequired(
413
                        _('User profile selection is required but prompt parameter is "none"')
414
                    )
406 415
                raise ConsentRequired(_('Consent is required but prompt parameter is "none"'))
407 416
            if request.method == 'POST':
408 417
                if request.POST.get('profile-validation', ''):
tests/idp_oidc/test_misc.py
37 37

  
38 38
from authentic2.a2_rbac.models import OrganizationalUnit, Role
39 39
from authentic2.a2_rbac.utils import get_default_ou
40
from authentic2.custom_user.models import Profile, ProfileType
40 41
from authentic2.models import Attribute, AuthorizedRole
41 42
from authentic2.utils.misc import good_next_url, make_url
42 43
from authentic2_auth_oidc.utils import parse_timestamp
......
751 752
            response, 'consent_required', 'Consent is required but prompt parameter is "none"', message=False
752 753
        )
753 754

  
755
        # prompt is none, but account selection is required
756
        oidc_client.activate_user_profiles = True
757
        oidc_client.save()
758
        profile_type_manager = ProfileType.objects.create(
759
            name='One Manager Type',
760
            slug='one-manager-type',
761
        )
762
        profile_type_delegate = ProfileType.objects.create(
763
            name='One Delegate Type',
764
            slug='one-delegate-type',
765
        )
766
        profile_manager = Profile.objects.create(
767
            user=simple_user,
768
            profile_type=profile_type_manager,
769
            identifier='Entity 789',
770
            email='manager@example789.org',
771
        )
772
        profile_delegate = Profile.objects.create(
773
            user=simple_user,
774
            profile_type=profile_type_delegate,
775
            identifier='Entity 1011',
776
            email='delegate@example1011.org',
777
        )
778
        response = app.get(
779
            make_url(
780
                'oidc-authorize',
781
                params={
782
                    'client_id': oidc_client.client_id,
783
                    'redirect_uri': redirect_uri,
784
                    'response_type': response_type,
785
                    'scope': 'openid',
786
                    'prompt': 'none',
787
                },
788
            )
789
        )
790
        assert_authorize_error(
791
            response,
792
            'select_account_required',
793
            'User profile selection is required but prompt parameter is "none"',
794
            message=False,
795
        )
796
        profile_manager.delete()
797
        profile_delegate.delete()
798

  
754 799
        # user do not consent
755 800
        response = app.get(
756 801
            make_url(
757
-