Projet

Général

Profil

0001-wip.patch

Valentin Deniaud, 13 juillet 2021 11:37

Télécharger (3,3 ko)

Voir les différences:

Subject: [PATCH] wip

 mellon/templates/mellon/debug_login.html |  7 ++++++
 mellon/urls.py                           |  1 +
 mellon/views.py                          | 29 +++++++++++++++++++++++-
 3 files changed, 36 insertions(+), 1 deletion(-)
 create mode 100644 mellon/templates/mellon/debug_login.html
mellon/templates/mellon/debug_login.html
1
{% load i18n %}
2

  
3
{% block content %}
4
<p>{% trans "SAML artifact:" %} <pre>{{ login.msgBody }}</pre></p>
5
<p>{% trans "SAML response:" %} <pre>{{ login.response.dump }}</pre></p>
6
<p>{% trans "Attributes:" %} <pre>{{ attributes|pprint }}</pre></p>
7
{% endblock %}
mellon/urls.py
8 8

  
9 9
urlpatterns = [
10 10
    url('login/$', views.login, name='mellon_login'),
11
    url('login/debug/$', views.debug_login, name='mellon_debug_login'),
11 12
    url('logout/$', views.logout, name='mellon_logout'),
12 13
    url('metadata/$', views.metadata, name='mellon_metadata'),
13 14
]
mellon/views.py
26 26

  
27 27
import django.http
28 28
from django.views.generic import View
29
from django.http import HttpResponseRedirect, HttpResponse
29
from django.http import HttpResponseRedirect, HttpResponse, HttpResponseForbidden
30 30
from django.contrib import auth
31 31
from django.contrib.auth import get_user_model
32 32
from django.conf import settings
......
142 142

  
143 143

  
144 144
class LoginView(ProfileMixin, LogMixin, View):
145
    allow_redirect_to_debug = True
146

  
147
    def dispatch(self, request, *args, **kwargs):
148
        if request.user.is_superuser and request.session.get('mellon_debug_login') and self.allow_redirect_to_debug:
149
            url = reverse('mellon_debug_login')
150
            url = "%s?%s" % (url, request.META.get('QUERY_STRING', ''))
151
            if request.method == 'POST':
152
                url += '&' + request.POST.urlencode()
153
            return HttpResponseRedirect(url)
154
        return super().dispatch(request, *args, **kwargs)
155

  
145 156
    @property
146 157
    def template_base(self):
147 158
        return self.kwargs.get('template_base', 'base.html')
......
719 730
def metadata(request, **kwargs):
720 731
    metadata = utils.create_metadata(request)
721 732
    return HttpResponse(metadata, content_type='text/xml')
733

  
734

  
735
class DebugLoginView(LoginView):
736
    allow_redirect_to_debug = False
737

  
738
    def dispatch(self, request, *args, **kwargs):
739
        if not request.user.is_superuser:
740
            return HttpResponseForbidden()
741
        request.session['mellon_debug_login'] = True
742
        return super().dispatch(request, *args, **kwargs)
743

  
744
    def authenticate(self, request, login, attributes):
745
        return self.render(request, 'mellon/debug_login.html', {'login': login, 'attributes': attributes})
746

  
747

  
748
debug_login = csrf_exempt(DebugLoginView.as_view())
722
-