Projet

Général

Profil

0001-add-possibility-to-define-a-hook-to-alter-login-temp.patch

Frédéric Péters, 15 décembre 2019 16:11

Télécharger (3,97 ko)

Voir les différences:

Subject: [PATCH] add possibility to define a hook to alter login template
 context (#38533)

 mellon/views.py            | 15 +++++++++------
 tests/templates/theme.html |  1 +
 tests/test_sso_slo.py      | 12 ++++++++++++
 3 files changed, 22 insertions(+), 6 deletions(-)
mellon/views.py
128 128
    def template_base(self):
129 129
        return self.kwargs.get('template_base', 'base.html')
130 130

  
131
    def render(self, request, template_names, context):
132
        context['template_base'] = self.template_base
133
        if 'context_hook' in self.kwargs:
134
            self.kwargs['context_hook'](context)
135
        return render(request, template_names, context)
136

  
131 137
    def get_idp(self, request):
132 138
        entity_id = request.POST.get('entityID') or request.GET.get('entityID')
133 139
        if not entity_id:
......
184 190
        if error_url:
185 191
            error_url = resolve_url(error_url)
186 192
        next_url = error_url or self.get_next_url(default=resolve_url(settings.LOGIN_REDIRECT_URL))
187
        return render(request, 'mellon/authentication_failed.html',
193
        return self.render(request, 'mellon/authentication_failed.html',
188 194
                      {
189
                          'template_base': self.template_base,
190 195
                          'debug': settings.DEBUG,
191 196
                          'reason': reason,
192 197
                          'status_codes': status_codes,
......
253 258
            else:
254 259
                self.log.warning('user %s (NameID is %r) is inactive, login refused', user,
255 260
                                 attributes['name_id_content'])
256
                return render(request, 'mellon/inactive_user.html', {
257
                    'template_base': self.template_base,
261
                return self.render(request, 'mellon/inactive_user.html', {
258 262
                    'user': user,
259 263
                    'saml_attributes': attributes})
260 264
        else:
261 265
            self.log.warning('no user found for NameID %r', attributes['name_id_content'])
262
            return render(request, 'mellon/user_not_found.html', {
263
                              'template_base': self.template_base,
266
            return self.render(request, 'mellon/user_not_found.html', {
264 267
                              'saml_attributes': attributes
265 268
                          })
266 269
        request.session['lasso_session_dump'] = login.session.dump()
tests/templates/theme.html
1 1
<html>
2 2
 <body>
3 3
   <p>Theme is ok</p>
4
   <p>{{ hook }}</p>
4 5
   {% block content %}
5 6
   {% endblock %}
6 7
 </body>
tests/test_sso_slo.py
233 233
    assert 'Theme is ok' in response.text
234 234

  
235 235

  
236
@pytest.mark.urls('urls_tests_template_hook')
237
def test_template_hook(db, app, idp, caplog, sp_settings):
238
    response = app.get(reverse('mellon_login'))
239
    url, body, relay_state = idp.process_authn_request_redirect(
240
        response['Location'],
241
        auth_result=False,
242
        msg='User is not allowed to login')
243
    response = app.post(reverse('mellon_login'), params={'SAMLResponse': body, 'RelayState': relay_state})
244
    assert 'Theme is ok' in response.text
245
    assert 'HOOK' in response.text
246

  
247

  
236 248
def test_no_template_base(db, app, idp, caplog, sp_settings):
237 249
    response = app.get(reverse('mellon_login'))
238 250
    url, body, relay_state = idp.process_authn_request_redirect(
239
-