Projet

Général

Profil

0001-authenticators-forbid-disabling-all-authenticators-6.patch

Valentin Deniaud, 24 mai 2022 15:45

Télécharger (3,08 ko)

Voir les différences:

Subject: [PATCH] authenticators: forbid disabling all authenticators (#65642)

 .../authenticators/authenticator_detail.html         |  2 ++
 src/authentic2/apps/authenticators/views.py          |  7 +++++++
 tests/test_manager_authenticators.py                 | 12 +++++++++++-
 3 files changed, 20 insertions(+), 1 deletion(-)
src/authentic2/apps/authenticators/templates/authentic2/authenticators/authenticator_detail.html
6 6
  <span class="actions">
7 7
    <a class="extra-actions-menu-opener"></a>
8 8

  
9
    {% if can_be_toggled %}
9 10
    <a href="{% url 'a2-manager-authenticator-toggle' pk=object.pk %}">{{ object.enabled|yesno:_("Disable,Enable") }}</a>
11
    {% endif %}
10 12
    <a href="{% url 'a2-manager-authenticator-edit' pk=object.pk %}">{% trans "Edit" %}</a>
11 13
    <ul class="extra-actions-menu">
12 14
      {% if not object.internal %}
src/authentic2/apps/authenticators/views.py
58 58
    def title(self):
59 59
        return str(self.object)
60 60

  
61
    def get_context_data(self, **kwargs):
62
        ctx = super().get_context_data(**kwargs)
63
        ctx['can_be_toggled'] = (
64
            not self.object.enabled or BaseAuthenticator.objects.filter(enabled=True).count() > 1
65
        )
66
        return ctx
67

  
61 68

  
62 69
detail = AuthenticatorDetailView.as_view()
63 70

  
tests/test_manager_authenticators.py
73 73
            "Show condition: &#x27;backoffice&#x27; in login_hint or remotre_addr == &#x27;1.2.3.4&#x27;"
74 74
            in resp.text
75 75
        )
76

  
77
    # only one authenticator, it cannot be disabled
78
    assert 'Disable' not in resp.text
79

  
80
    # add one more
81
    OIDCProvider.objects.create(slug='test', enabled=True)
82

  
83
    resp = app.get('/manage/authenticators/')
84
    resp = resp.click('Configure', index=0)
85

  
76 86
    resp = resp.click('Disable').follow()
77 87
    assert 'Authenticator has been disabled.' in resp.text
78 88

  
79 89
    resp = app.get('/manage/authenticators/')
80 90
    assert 'class="section disabled"' in resp.text
81 91

  
82
    resp = resp.click('Configure')
92
    resp = resp.click('Configure', index=1)
83 93
    resp = resp.click('Enable').follow()
84 94
    assert 'Authenticator has been enabled.' in resp.text
85 95

  
86
-