From d1d3eae3db840d7ae41b536a3e671dc50335760d Mon Sep 17 00:00:00 2001 From: Joseph Nuthalapati Date: Fri, 1 Mar 2019 16:06:46 +0530 Subject: [PATCH] config: Reset home page setting in freedombox.conf during migration While moving the home page configuration to a new file, also reset the home page path in freedombox.conf to its default setting of /plinth. Signed-off-by: Joseph Nuthalapati Reviewed-by: Sunil Mohan Adapa --- actions/config | 33 +++++++++++++++++++++++++++++++ plinth/modules/config/__init__.py | 12 +++++++---- 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/actions/config b/actions/config index 55cbc2efe..fdbab17c4 100755 --- a/actions/config +++ b/actions/config @@ -23,6 +23,8 @@ Configuration helper for FreedomBox general configuration. import argparse import os +import augeas + from plinth import action_utils from plinth.modules.config import APACHE_HOMEPAGE_CONF_FILE_NAME @@ -31,12 +33,19 @@ def parse_arguments(): """Return parsed command line arguments as dictionary.""" parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') + set_home_page = subparsers.add_parser( 'set-home-page', help='Set the home page for this FreedomBox instance.') set_home_page.add_argument('homepage', help='path to the webserver home page') + reset_home_page = subparsers.add_parser( + 'reset-home-page', help='Reset the homepage of the Apache server.') + reset_home_page.add_argument( + '--config', default=APACHE_HOMEPAGE_CONF_FILE_NAME, + help='(optional) path to the Apache config file') + subparsers.required = True return parser.parse_args() @@ -54,6 +63,30 @@ def subcommand_set_home_page(arguments): action_utils.webserver_enable('freedombox-apache-homepage') +def subcommand_reset_home_page(arguments): + """Sets the Apache web server's home page to the default - /plinth + + The config file path can be optionally passed as an argument. + """ + config_file = arguments.config + default_path = 'plinth' + + aug = augeas.Augeas( + flags=augeas.Augeas.NO_LOAD + augeas.Augeas.NO_MODL_AUTOLOAD) + aug.set('/augeas/load/Httpd/lens', 'Httpd.lns') + aug.set('/augeas/load/Httpd/incl[last() + 1]', config_file) + aug.load() + + aug.defvar('conf', '/files' + config_file) + + for match in aug.match('/files' + config_file + + '/directive["RedirectMatch"]'): + if aug.get(match + "/arg[1]") == '''"^/$"''': + aug.set(match + "/arg[2]", '"/{}"'.format(default_path)) + + aug.save() + + def main(): """Parse arguments and perform all duties.""" arguments = parse_arguments() diff --git a/plinth/modules/config/__init__.py b/plinth/modules/config/__init__.py index 8b37e0499..f7ccaa70a 100644 --- a/plinth/modules/config/__init__.py +++ b/plinth/modules/config/__init__.py @@ -59,8 +59,8 @@ def get_hostname(): def get_home_page(): """Get the default application for the domain.""" - aug = augeas.Augeas(flags=augeas.Augeas.NO_LOAD + - augeas.Augeas.NO_MODL_AUTOLOAD) + aug = augeas.Augeas( + flags=augeas.Augeas.NO_LOAD + augeas.Augeas.NO_MODL_AUTOLOAD) aug.set('/augeas/load/Httpd/lens', 'Httpd.lns') conf_file = APACHE_HOMEPAGE_CONFIG if os.path.exists( APACHE_HOMEPAGE_CONFIG) else FREEDOMBOX_APACHE_CONFIG @@ -120,9 +120,13 @@ def setup(helper, old_version=None): def _migrate_home_page_config(): """Move the home page configuration to an external file.""" - # Hold the current default app in a variable + # Hold the current home page path in a variable home_page_path = get_home_page().replace('_', '/') - # Write the default app setting into the new conf file + # Reset the home page to plinth in freedombox.conf + actions.superuser_run( + 'config', ['reset-home-page', '--config', FREEDOMBOX_APACHE_CONFIG]) + + # Write the home page setting into the new conf file # This step is run at the end because it reloads the Apache server actions.superuser_run('config', ['set-home-page', home_page_path])