diff --git a/mellon/views.py b/mellon/views.py index 132b298..381ec45 100644 --- a/mellon/views.py +++ b/mellon/views.py @@ -495,7 +495,7 @@ login = transaction.non_atomic_requests(csrf_exempt(LoginView.as_view())) class LogoutView(ProfileMixin, LogMixin, View): - def get(self, request): + def get(self, request, *args, **kwargs): if 'SAMLRequest' in request.GET: return self.idp_logout(request) elif 'SAMLResponse' in request.GET: @@ -581,6 +581,6 @@ class LogoutView(ProfileMixin, LogMixin, View): logout = LogoutView.as_view() -def metadata(request): +def metadata(request, **kwargs): metadata = utils.create_metadata(request) return HttpResponse(metadata, content_type='text/xml') diff --git a/tests/test_sso_slo.py b/tests/test_sso_slo.py index eee41cb..abcf9ed 100644 --- a/tests/test_sso_slo.py +++ b/tests/test_sso_slo.py @@ -192,6 +192,8 @@ def test_sso_slo(db, app, idp, caplog, sp_settings): assert 'created new user' in caplog.text assert 'logged in using SAML' in caplog.text assert urlparse.urlparse(response['Location']).path == '/whatever/' + response = app.get(reverse('mellon_logout')) + assert urlparse.urlparse(response['Location']).path == '/singleLogout' def test_sso(db, app, idp, caplog, sp_settings): @@ -224,6 +226,7 @@ def test_sso_request_denied(db, app, idp, caplog, sp_settings): @pytest.mark.urls('urls_tests_template_base') def test_template_base(db, app, idp, caplog, sp_settings): + response = app.get(reverse('mellon_metadata')) response = app.get(reverse('mellon_login')) url, body, relay_state = idp.process_authn_request_redirect( response['Location'], @@ -232,9 +235,16 @@ def test_template_base(db, app, idp, caplog, sp_settings): response = app.post(reverse('mellon_login'), params={'SAMLResponse': body, 'RelayState': relay_state}) assert 'Theme is ok' in response.text + response = app.get(reverse('mellon_login')) + url, body, relay_state = idp.process_authn_request_redirect(response['Location']) + response = app.post(reverse('mellon_login'), params={'SAMLResponse': body, 'RelayState': relay_state}) + response = app.get(reverse('mellon_logout')) + assert urlparse.urlparse(response['Location']).path == '/singleLogout' + @pytest.mark.urls('urls_tests_template_hook') def test_template_hook(db, app, idp, caplog, sp_settings): + response = app.get(reverse('mellon_metadata')) response = app.get(reverse('mellon_login')) url, body, relay_state = idp.process_authn_request_redirect( response['Location'], @@ -244,6 +254,12 @@ def test_template_hook(db, app, idp, caplog, sp_settings): assert 'Theme is ok' in response.text assert 'HOOK' in response.text + response = app.get(reverse('mellon_login')) + url, body, relay_state = idp.process_authn_request_redirect(response['Location']) + response = app.post(reverse('mellon_login'), params={'SAMLResponse': body, 'RelayState': relay_state}) + response = app.get(reverse('mellon_logout')) + assert urlparse.urlparse(response['Location']).path == '/singleLogout' + def test_no_template_base(db, app, idp, caplog, sp_settings): response = app.get(reverse('mellon_login'))