|
24 | 24 | from django.conf import settings
|
25 | 25 | from django.contrib import auth
|
26 | 26 | from django.contrib.auth.decorators import login_required
|
27 |
| -from django.contrib.auth.views import logout as django_logout |
| 27 | +try: |
| 28 | + from django.contrib.auth.views import LogoutView |
| 29 | + django_logout = LogoutView.as_view() |
| 30 | +except ImportError: |
| 31 | + from django.contrib.auth.views import logout as django_logout |
28 | 32 | from django.core.exceptions import PermissionDenied, SuspiciousOperation
|
29 | 33 | from django.http import Http404, HttpResponse
|
30 | 34 | from django.http import HttpResponseRedirect # 30x
|
31 |
| -from django.http import HttpResponseBadRequest, HttpResponseForbidden # 40x |
| 35 | +from django.http import HttpResponseBadRequest # 40x |
32 | 36 | from django.http import HttpResponseServerError # 50x
|
33 | 37 | from django.views.decorators.http import require_POST
|
34 | 38 | from django.shortcuts import render
|
35 | 39 | from django.template import TemplateDoesNotExist
|
36 |
| -from django.utils.http import is_safe_url |
37 | 40 | from django.utils.six import text_type, binary_type
|
38 | 41 | from django.views.decorators.csrf import csrf_exempt
|
39 | 42 |
|
|
51 | 54 | from djangosaml2.conf import get_config
|
52 | 55 | from djangosaml2.overrides import Saml2Client
|
53 | 56 | from djangosaml2.signals import post_authenticated
|
54 |
| -from djangosaml2.utils import fail_acs_response, get_custom_setting, available_idps, get_location, get_idp_sso_supported_bindings |
| 57 | +from djangosaml2.utils import ( |
| 58 | + available_idps, fail_acs_response, get_custom_setting, |
| 59 | + get_idp_sso_supported_bindings, get_location, is_safe_url_compat, |
| 60 | +) |
55 | 61 |
|
56 | 62 |
|
57 | 63 | logger = logging.getLogger('djangosaml2')
|
@@ -106,7 +112,7 @@ def login(request,
|
106 | 112 | came_from = settings.LOGIN_REDIRECT_URL
|
107 | 113 |
|
108 | 114 | # Ensure the user-originating redirection url is safe.
|
109 |
| - if not is_safe_url(url=came_from, host=request.get_host()): |
| 115 | + if not is_safe_url_compat(url=came_from, allowed_hosts={request.get_host()}): |
110 | 116 | came_from = settings.LOGIN_REDIRECT_URL
|
111 | 117 |
|
112 | 118 | # if the user is already authenticated that maybe because of two reasons:
|
@@ -315,7 +321,7 @@ def assertion_consumer_service(request,
|
315 | 321 | if not relay_state:
|
316 | 322 | logger.warning('The RelayState parameter exists but is empty')
|
317 | 323 | relay_state = default_relay_state
|
318 |
| - if not is_safe_url(url=relay_state, host=request.get_host()): |
| 324 | + if not is_safe_url_compat(url=relay_state, allowed_hosts={request.get_host()}): |
319 | 325 | relay_state = settings.LOGIN_REDIRECT_URL
|
320 | 326 | logger.debug('Redirecting to the RelayState: %s', relay_state)
|
321 | 327 | return HttpResponseRedirect(relay_state)
|
@@ -451,7 +457,7 @@ def finish_logout(request, response, next_page=None):
|
451 | 457 | if response and response.status_ok():
|
452 | 458 | if next_page is None and hasattr(settings, 'LOGOUT_REDIRECT_URL'):
|
453 | 459 | next_page = settings.LOGOUT_REDIRECT_URL
|
454 |
| - logger.debug('Performing django_logout with a next_page of %s', |
| 460 | + logger.debug('Performing django logout with a next_page of %s', |
455 | 461 | next_page)
|
456 | 462 | return django_logout(request, next_page=next_page)
|
457 | 463 | else:
|
|
0 commit comments