authentik.lib.utils.urls
URL-related utils
1"""URL-related utils""" 2 3from urllib.parse import urlparse 4 5from django.http import HttpResponse, QueryDict 6from django.shortcuts import redirect 7from django.urls import NoReverseMatch, reverse 8from structlog.stdlib import get_logger 9 10LOGGER = get_logger() 11 12 13def is_url_absolute(url): 14 """Check if domain is absolute to prevent user from being redirect somewhere else""" 15 return bool(urlparse(url).netloc) 16 17 18def redirect_with_qs(view: str, get_query_set: QueryDict | None = None, **kwargs) -> HttpResponse: 19 """Wrapper to redirect whilst keeping GET Parameters""" 20 try: 21 target = reverse(view, kwargs=kwargs) 22 except NoReverseMatch: 23 if not is_url_absolute(view): 24 return redirect(view) 25 LOGGER.warning("redirect target is not a valid view", view=view) 26 raise 27 if get_query_set: 28 target += "?" + get_query_set.urlencode() 29 return redirect(target) 30 31 32def reverse_with_qs(view: str, query: QueryDict | None = None, **kwargs) -> str: 33 """Reverse a view to it's url but include get params""" 34 url = reverse(view, **kwargs) 35 if query: 36 url += "?" + query.urlencode() 37 return url
LOGGER =
<BoundLoggerLazyProxy(logger=None, wrapper_class=None, processors=None, context_class=None, initial_values={}, logger_factory_args=())>
def
is_url_absolute(url):
14def is_url_absolute(url): 15 """Check if domain is absolute to prevent user from being redirect somewhere else""" 16 return bool(urlparse(url).netloc)
Check if domain is absolute to prevent user from being redirect somewhere else
def
redirect_with_qs( view: str, get_query_set: django.http.request.QueryDict | None = None, **kwargs) -> django.http.response.HttpResponse:
19def redirect_with_qs(view: str, get_query_set: QueryDict | None = None, **kwargs) -> HttpResponse: 20 """Wrapper to redirect whilst keeping GET Parameters""" 21 try: 22 target = reverse(view, kwargs=kwargs) 23 except NoReverseMatch: 24 if not is_url_absolute(view): 25 return redirect(view) 26 LOGGER.warning("redirect target is not a valid view", view=view) 27 raise 28 if get_query_set: 29 target += "?" + get_query_set.urlencode() 30 return redirect(target)
Wrapper to redirect whilst keeping GET Parameters
def
reverse_with_qs( view: str, query: django.http.request.QueryDict | None = None, **kwargs) -> str:
33def reverse_with_qs(view: str, query: QueryDict | None = None, **kwargs) -> str: 34 """Reverse a view to it's url but include get params""" 35 url = reverse(view, **kwargs) 36 if query: 37 url += "?" + query.urlencode() 38 return url
Reverse a view to it's url but include get params