mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-01-28 08:03:36 +00:00
52 lines
1.7 KiB
Python
52 lines
1.7 KiB
Python
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
"""
|
|
Django middleware to redirect to firstboot wizard if it has not be run
|
|
yet.
|
|
"""
|
|
|
|
import logging
|
|
|
|
from django.conf import settings
|
|
from django.http.response import HttpResponseRedirect
|
|
from django.urls import reverse
|
|
from django.utils.deprecation import MiddlewareMixin
|
|
|
|
from plinth.modules import first_boot
|
|
|
|
LOGGER = logging.getLogger(__name__)
|
|
|
|
|
|
class FirstBootMiddleware(MiddlewareMixin):
|
|
"""Forward to firstboot page if firstboot isn't finished yet."""
|
|
@staticmethod
|
|
def process_request(request):
|
|
"""Handle a request as Django middleware request handler."""
|
|
# Don't interfere with login page
|
|
user_requests_login = request.path.startswith(
|
|
reverse(settings.LOGIN_URL))
|
|
if user_requests_login:
|
|
return
|
|
|
|
# Don't interfere with help pages
|
|
user_requests_help = request.path.startswith(reverse('help:index'))
|
|
if user_requests_help:
|
|
return
|
|
|
|
firstboot_completed = first_boot.is_completed()
|
|
user_requests_firstboot = first_boot.is_firstboot_url(request.path)
|
|
|
|
# Redirect to first boot if requesting normal page and first
|
|
# boot is not complete.
|
|
if not firstboot_completed and not user_requests_firstboot:
|
|
next_step = first_boot.next_step_or_none()
|
|
if next_step:
|
|
return HttpResponseRedirect(reverse(next_step))
|
|
else:
|
|
# No more steps in first boot
|
|
first_boot.set_completed()
|
|
|
|
# Redirect to index page if request firstboot after it is
|
|
# finished.
|
|
if firstboot_completed and user_requests_firstboot:
|
|
return HttpResponseRedirect(reverse('index'))
|