mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-08-19 16:04:38 +02:00
Redirect logic from home
This commit is contained in:
parent
1fd58d6d84
commit
c352869f6b
1 changed files with 25 additions and 5 deletions
|
@ -1,8 +1,8 @@
|
||||||
"""
|
"""
|
||||||
Contains middleware used in settings.py
|
Contains middleware used in settings.py
|
||||||
"""
|
"""
|
||||||
|
from urllib.parse import urlparse, urlunparse, parse_qs, urlencode
|
||||||
from django.urls import reverse
|
from django.urls import reverse, resolve
|
||||||
from django.http import HttpResponseRedirect
|
from django.http import HttpResponseRedirect
|
||||||
|
|
||||||
class CheckUserProfileMiddleware:
|
class CheckUserProfileMiddleware:
|
||||||
|
@ -20,6 +20,8 @@ class CheckUserProfileMiddleware:
|
||||||
return response
|
return response
|
||||||
|
|
||||||
def process_view(self, request, view_func, view_args, view_kwargs):
|
def process_view(self, request, view_func, view_args, view_kwargs):
|
||||||
|
|
||||||
|
|
||||||
# Check if setup is not finished
|
# Check if setup is not finished
|
||||||
finished_setup = hasattr(request.user, "finished_setup") and request.user.finished_setup
|
finished_setup = hasattr(request.user, "finished_setup") and request.user.finished_setup
|
||||||
if request.user.is_authenticated and not finished_setup:
|
if request.user.is_authenticated and not finished_setup:
|
||||||
|
@ -33,13 +35,31 @@ class CheckUserProfileMiddleware:
|
||||||
setup_page,
|
setup_page,
|
||||||
logout_page,
|
logout_page,
|
||||||
]
|
]
|
||||||
|
custom_redirect = None
|
||||||
|
|
||||||
|
# In some cases, we don't want to redirect to home.
|
||||||
|
# This handles that.
|
||||||
|
if request.path == "/request/":
|
||||||
|
# This can be generalized if need be, but for now lets keep this easy to read.
|
||||||
|
custom_redirect = "domain-request:"
|
||||||
|
|
||||||
# Don't redirect on excluded pages (such as the setup page itself)
|
# Don't redirect on excluded pages (such as the setup page itself)
|
||||||
if not any(request.path.startswith(page) for page in excluded_pages):
|
if not any(request.path.startswith(page) for page in excluded_pages):
|
||||||
# Preserve the original query parameters
|
# Preserve the original query parameters, and coerce them into a dict
|
||||||
query_params = request.GET.urlencode()
|
query_params = parse_qs(request.META['QUERY_STRING'])
|
||||||
|
|
||||||
|
if custom_redirect is not None:
|
||||||
|
# Set the redirect value to our redirect location
|
||||||
|
query_params["redirect"] = custom_redirect
|
||||||
|
|
||||||
if query_params:
|
if query_params:
|
||||||
setup_page += f"?{query_params}"
|
# Split the URL into parts
|
||||||
|
setup_page_parts = list(urlparse(setup_page))
|
||||||
|
# Modify the query param bit
|
||||||
|
setup_page_parts[4] = urlencode(query_params)
|
||||||
|
# Reassemble the URL
|
||||||
|
setup_page = urlunparse(setup_page_parts)
|
||||||
|
|
||||||
|
|
||||||
# Redirect to the setup page
|
# Redirect to the setup page
|
||||||
return HttpResponseRedirect(setup_page)
|
return HttpResponseRedirect(setup_page)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue