From dda4b930e0e2f19a073dee090d5b84d7d0bfe5ff Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa Date: Sun, 17 Aug 2014 19:20:44 +0530 Subject: [PATCH] Fix infinite redirection in first boot --- modules/first_boot/middleware.py | 42 +++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/modules/first_boot/middleware.py b/modules/first_boot/middleware.py index 3d354b1ea..17ae7c734 100644 --- a/modules/first_boot/middleware.py +++ b/modules/first_boot/middleware.py @@ -1,19 +1,49 @@ -import logging +# +# This file is part of Plinth. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +""" +Django middleware to redirect to firstboot wizard if it has not be run +yet. +""" + from django.core.urlresolvers import reverse from django.http.response import HttpResponseRedirect +import logging -from withsqlite.withsqlite import sqlite_db import cfg +from withsqlite.withsqlite import sqlite_db LOGGER = logging.getLogger(__name__) -class FirstBootMiddleware: - """ Forward to firstboot page if firstboot isn't finished yet """ - def process_request(self, request): +class FirstBootMiddleware(object): + """Forward to firstboot page if firstboot isn't finished yet.""" + + @staticmethod + def process_request(request): + """Handle a request as Django middleware request handler.""" + # Prevent redirecting to first boot wizard in a loop by + # checking if we are already in first boot wizard. + if request.path.startswith(reverse('first_boot:index')): + return + with sqlite_db(cfg.store_file, table='firstboot') as database: - if not 'state' in database: + if 'state' not in database: # Permanent redirect causes the browser to cache the redirect, # preventing the user from navigating to /plinth until the # browser is restarted.