Skip to content

Commit c9201d7

Browse files
committed
Work on end_session_endpoint
1 parent 8b29c30 commit c9201d7

File tree

4 files changed

+37
-20
lines changed

4 files changed

+37
-20
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<h1>End Session Completed</h1>
2+
3+
<p>You've been logged out.</p>
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<h1>End Session Failed</h1>
2+
3+
<p>You can now close this window.</p>

oidc_provider/tests/cases/test_end_session_endpoint.py

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,12 @@
99
from django.urls import reverse
1010
except ImportError:
1111
from django.core.urlresolvers import reverse
12-
from django.test import TestCase
1312

14-
from oidc_provider.lib.utils.token import (
15-
create_token,
16-
create_id_token,
17-
encode_id_token,
18-
)
19-
from oidc_provider.tests.app.utils import (
20-
create_fake_client,
21-
create_fake_user,
22-
)
2313
import mock
14+
from django.test import TestCase
15+
16+
from oidc_provider.lib.utils.token import create_id_token, create_token, encode_id_token
17+
from oidc_provider.tests.app.utils import create_fake_client, create_fake_user
2418

2519

2620
class EndSessionTestCase(TestCase):
@@ -126,12 +120,17 @@ def test_prompt_view_redirecting_to_client_post_logout_since_user_unauthenticate
126120
self.assertEqual(response.status_code, 302)
127121
self.assertEqual(response.headers["Location"], self.url_logout)
128122

129-
def test_prompt_view_raising_404_since_user_unauthenticated_and_no_client(self):
123+
def test_prompt_view_show_completed_since_user_unauthenticated_and_no_client(self):
130124
self.client.logout()
131125
response = self.client.get(self.url_prompt)
132126
# Since user is unauthenticated and no client information is present, we just show
133-
# not found page.
134-
self.assertEqual(response.status_code, 404)
127+
# a page explaining session is closed already.
128+
self.assertContains(
129+
response,
130+
"You've been logged out.",
131+
status_code=200,
132+
html=True,
133+
)
135134

136135
def test_prompt_view_displaying_logout_decision_form_to_user(self):
137136
query_params = {
@@ -203,13 +202,18 @@ def test_prompt_view_user_logged_out_after_form_not_allowed(self, after_end_sess
203202
self.assertFalse(after_end_session_hook.called)
204203

205204
@mock.patch("oidc_provider.views.after_end_session_hook")
206-
def test_prompt_view_user_not_logged_out_after_form_not_allowed_no_client(
205+
def test_prompt_view_user_still_logged_in_after_form_not_allowed_no_client(
207206
self, after_end_session_hook
208207
):
209208
self.assertIn("_auth_user_id", self.client.session)
210209
response = self.client.post(self.url_prompt) # No data.
211210
# Ensure user is still logged in and 404 NOT FOUND was raised.
212211
self.assertIn("_auth_user_id", self.client.session)
213-
self.assertEqual(response.status_code, 404)
212+
self.assertContains(
213+
response,
214+
"You can now close this window.",
215+
status_code=200,
216+
html=True,
217+
)
214218
# End session hook should not be called.
215219
self.assertFalse(after_end_session_hook.called)

oidc_provider/views.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -409,7 +409,9 @@ def dispatch(self, request, *args, **kwargs):
409409
self.state,
410410
self.client,
411411
)
412-
raise Http404("You have successfully logged out!")
412+
return render(
413+
request, "oidc_provider/end_session_completed.html", {"client": self.client}
414+
)
413415

414416
if self.state:
415417
uri = urlsplit(self.post_logout_redirect_uri)
@@ -451,7 +453,9 @@ def get(self, request, *args, **kwargs):
451453
if self.client and self.client.post_logout_redirect_uris:
452454
return redirect(self.client.post_logout_redirect_uris[0])
453455
else:
454-
raise Http404("You are already logged out!")
456+
return render(
457+
request, "oidc_provider/end_session_completed.html", {"client": self.client}
458+
)
455459

456460
return super(EndSessionPromptView, self).get(request, *args, **kwargs)
457461

@@ -485,9 +489,12 @@ def post(self, request, *args, **kwargs):
485489
# Redirect to post logout uri if client is present.
486490
if next_page:
487491
return redirect(next_page)
488-
raise Http404(
489-
"You have successfully logged out!" if allowed else "You can close this window."
490-
)
492+
elif allowed:
493+
return render(
494+
request, "oidc_provider/end_session_completed.html", {"client": self.client}
495+
)
496+
else:
497+
return render(request, "oidc_provider/end_session_failed.html", {"client": self.client})
491498

492499

493500
class CheckSessionIframeView(View):

0 commit comments

Comments
 (0)