config: Rename Default App to Webserver Home Page

Signed-off-by: Joseph Nuthalapati <njoseph@thoughtworks.com>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
This commit is contained in:
Joseph Nuthalapati 2019-02-18 12:22:23 +05:30 committed by James Valleroy
parent a87b0ff596
commit 8bc34f84c3
No known key found for this signature in database
GPG Key ID: 77C0C75E7B650808
8 changed files with 60 additions and 54 deletions

View File

@ -26,7 +26,7 @@ import os
import augeas import augeas
from plinth import action_utils from plinth import action_utils
from plinth.modules.config import (DEFAULT_APP_CONF_FILE_NAME, from plinth.modules.config import (APACHE_HOMEPAGE_CONF_FILE_NAME,
FREEDOMBOX_APACHE_CONFIG) FREEDOMBOX_APACHE_CONFIG)
@ -34,19 +34,20 @@ def parse_arguments():
"""Return parsed command line arguments as dictionary.""" """Return parsed command line arguments as dictionary."""
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') subparsers = parser.add_subparsers(dest='subcommand', help='Sub command')
set_default_app = subparsers.add_parser( set_home_page = subparsers.add_parser(
'set-default-app', 'set-home-page',
help='Set the default app for this FreedomBox instance.') help='Set the home page for this FreedomBox instance.')
set_default_app.add_argument('app', help='name of the default app') set_home_page.add_argument('homepage',
help='path to the webserver home page')
subparsers.add_parser( subparsers.add_parser(
'reset-default-app', 'reset-home-page',
help='Reset the default app configuraton in freedombox.conf') help='Reset the default app configuraton in freedombox.conf')
subparsers.required = True subparsers.required = True
return parser.parse_args() return parser.parse_args()
def subcommand_reset_default_app(_): def subcommand_reset_home_page(_):
aug = augeas.Augeas(flags=augeas.Augeas.NO_LOAD + aug = augeas.Augeas(flags=augeas.Augeas.NO_LOAD +
augeas.Augeas.NO_MODL_AUTOLOAD) augeas.Augeas.NO_MODL_AUTOLOAD)
aug.set('/augeas/load/Httpd/lens', 'Httpd.lns') aug.set('/augeas/load/Httpd/lens', 'Httpd.lns')
@ -63,17 +64,17 @@ def subcommand_reset_default_app(_):
aug.save() aug.save()
def subcommand_set_default_app(arguments): def subcommand_set_home_page(arguments):
"""Set the default app for this FreedomBox.""" """Set the default app for this FreedomBox."""
conf_file_path = os.path.join('/etc/apache2/conf-available', conf_file_path = os.path.join('/etc/apache2/conf-available',
DEFAULT_APP_CONF_FILE_NAME) APACHE_HOMEPAGE_CONF_FILE_NAME)
redirect_rule = 'RedirectMatch "^/$" "/{}"\n'.format(arguments.app) redirect_rule = 'RedirectMatch "^/$" "/{}"\n'.format(arguments.homepage)
with open(conf_file_path, 'w') as conf_file: with open(conf_file_path, 'w') as conf_file:
conf_file.write(redirect_rule) conf_file.write(redirect_rule)
action_utils.webserver_enable('default-app') action_utils.webserver_enable('freedombox-apache-homepage')
def main(): def main():

View File

@ -8,6 +8,8 @@ Header set Strict-Transport-Security "max-age=31536000; includeSubDomains" env=H
## into FreedomBox server. Plinth then acts as a portal to reach all ## into FreedomBox server. Plinth then acts as a portal to reach all
## other services. ## other services.
## ##
## TODO Deprecation: The homepage for Apache server is being set in
## freedombox-apache-homepage.conf. This line will be removed.
RedirectMatch "^/$" "/plinth" RedirectMatch "^/$" "/plinth"
RedirectMatch "^/freedombox" "/plinth" RedirectMatch "^/freedombox" "/plinth"

View File

@ -30,10 +30,10 @@ Scenario: Change domain name
When I change the domain name to mydomain.example When I change the domain name to mydomain.example
Then the domain name should be mydomain.example Then the domain name should be mydomain.example
Scenario: Change default app Scenario: Change webserver home page
Given the syncthing application is installed Given the syncthing application is installed
And the syncthing application is enabled And the syncthing application is enabled
And the default app is syncthing And the home page is syncthing
When I change the default app to plinth When I change the home page to plinth
Then the default app should be plinth Then the home page should be plinth

View File

@ -45,9 +45,9 @@ def downloaded_file_info():
return dict() return dict()
@given(parsers.parse('the default app is {app_name:w}')) @given(parsers.parse('the home page is {app_name:w}'))
def set_default_app(browser, app_name): def set_home_page(browser, app_name):
system.set_default_app(browser, app_name) system.set_home_page(browser, app_name)
@given(parsers.parse('the domain name is set to {domain:S}')) @given(parsers.parse('the domain name is set to {domain:S}'))
@ -65,9 +65,9 @@ def change_domain_name_to(browser, domain):
system.set_domain_name(browser, domain) system.set_domain_name(browser, domain)
@when(parsers.parse('I change the default app to {app_name:w}')) @when(parsers.parse('I change the home page to {app_name:w}'))
def change_default_app_to(browser, app_name): def change_home_page_to(browser, app_name):
system.set_default_app(browser, app_name) system.set_home_page(browser, app_name)
@when('I change the language to <language>') @when('I change the language to <language>')
@ -157,8 +157,8 @@ def snapshot_assert_configuration(browser, free_space, timeline_enabled,
yearly) == system.snapshot_get_configuration(browser) yearly) == system.snapshot_get_configuration(browser)
@then(parsers.parse('the default app should be {app_name:w}')) @then(parsers.parse('the home page should be {app_name:w}'))
def default_app_should_be(browser, app_name): def home_page_should_be(browser, app_name):
assert system.check_home_page_redirect(browser, app_name) assert system.check_home_page_redirect(browser, app_name)

View File

@ -15,9 +15,10 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
from urllib.parse import urlparse
import requests
import tempfile import tempfile
from urllib.parse import urlparse
import requests
from . import application, config from . import application, config
from .interface import default_url, nav_to_module, submit from .interface import default_url, nav_to_module, submit
@ -62,10 +63,10 @@ def set_domain_name(browser, domain_name):
submit(browser) submit(browser)
def set_default_app(browser, app_name): def set_home_page(browser, home_page):
nav_to_module(browser, 'config') nav_to_module(browser, 'config')
drop_down = browser.find_by_id('id_configuration-defaultapp') drop_down = browser.find_by_id('id_configuration-homepage')
drop_down.select(app_name) drop_down.select(home_page)
submit(browser) submit(browser)

View File

@ -39,9 +39,9 @@ depends = ['firewall', 'names']
manual_page = 'Configure' manual_page = 'Configure'
APACHE_CONF_ENABLED_DIR = '/etc/apache2/conf-enabled' APACHE_CONF_ENABLED_DIR = '/etc/apache2/conf-enabled'
DEFAULT_APP_CONF_FILE_NAME = 'default-app.conf' APACHE_HOMEPAGE_CONF_FILE_NAME = 'freedombox-apache-homepage.conf'
DEFAULT_APP_APACHE_CONFIG = os.path.join(APACHE_CONF_ENABLED_DIR, APACHE_HOMEPAGE_CONFIG = os.path.join(APACHE_CONF_ENABLED_DIR,
DEFAULT_APP_CONF_FILE_NAME) APACHE_HOMEPAGE_CONF_FILE_NAME)
FREEDOMBOX_APACHE_CONFIG = os.path.join(APACHE_CONF_ENABLED_DIR, FREEDOMBOX_APACHE_CONFIG = os.path.join(APACHE_CONF_ENABLED_DIR,
'freedombox.conf') 'freedombox.conf')
@ -57,13 +57,13 @@ def get_hostname():
return socket.gethostname() return socket.gethostname()
def get_default_app(): def get_home_page():
"""Get the default application for the domain.""" """Get the default application for the domain."""
aug = augeas.Augeas(flags=augeas.Augeas.NO_LOAD + aug = augeas.Augeas(flags=augeas.Augeas.NO_LOAD +
augeas.Augeas.NO_MODL_AUTOLOAD) augeas.Augeas.NO_MODL_AUTOLOAD)
aug.set('/augeas/load/Httpd/lens', 'Httpd.lns') aug.set('/augeas/load/Httpd/lens', 'Httpd.lns')
conf_file = DEFAULT_APP_APACHE_CONFIG if os.path.exists( conf_file = APACHE_HOMEPAGE_CONFIG if os.path.exists(
DEFAULT_APP_APACHE_CONFIG) else FREEDOMBOX_APACHE_CONFIG APACHE_HOMEPAGE_CONFIG) else FREEDOMBOX_APACHE_CONFIG
aug.set('/augeas/load/Httpd/incl[last() + 1]', conf_file) aug.set('/augeas/load/Httpd/incl[last() + 1]', conf_file)
aug.load() aug.load()
@ -106,18 +106,18 @@ def init():
def setup(helper, old_version=None): def setup(helper, old_version=None):
"""Install and configure the module.""" """Install and configure the module."""
_migrate_default_app_config() _migrate_home_page_config()
def _migrate_default_app_config(): def _migrate_home_page_config():
"""Move the default app configuration to an external file.""" """Move the default app configuration to an external file."""
# Hold the current default app in a variable # Hold the current default app in a variable
default_app_path = get_default_app().replace('_', '/') home_page_path = get_home_page().replace('_', '/')
# Reset the default app to plinth in freedombox.conf # Reset the default app to plinth in freedombox.conf
actions.superuser_run('config', ['reset-default-app']) actions.superuser_run('config', ['reset-home-page'])
# Write the default app setting into the new conf file # Write the default app setting into the new conf file
# This step is run at the end because it reloads the Apache server # This step is run at the end because it reloads the Apache server
actions.superuser_run('config', ['set-default-app', default_app_path]) actions.superuser_run('config', ['set-home-page', home_page_path])

View File

@ -42,11 +42,13 @@ def domain_label_validator(domainname):
raise ValidationError(_('Invalid domain name')) raise ValidationError(_('Invalid domain name'))
def get_default_app_choices(): def get_homepage_choices():
shortcuts = frontpage.get_shortcuts(web_apps_only=True, sort_by='name') shortcuts = frontpage.get_shortcuts(web_apps_only=True, sort_by='name')
apps = [(shortcut['id'], shortcut['name']) for shortcut in shortcuts apps = [(shortcut['id'], shortcut['name']) for shortcut in shortcuts
if shortcut['id']] if shortcut['id']]
return [('plinth', 'FreedomBox Service (Plinth)')] + apps apache_default = ('apache-default', _('Apache Default'))
plinth = ('plinth', _('FreedomBox Service (Plinth)'))
return [apache_default, plinth] + apps
class ConfigurationForm(forms.Form): class ConfigurationForm(forms.Form):
@ -85,15 +87,15 @@ class ConfigurationForm(forms.Form):
ugettext_lazy('Invalid domain name')), domain_label_validator ugettext_lazy('Invalid domain name')), domain_label_validator
], strip=True) ], strip=True)
defaultapp = forms.ChoiceField( homepage = forms.ChoiceField(
label=ugettext_lazy('Default App'), help_text=format_lazy( label=ugettext_lazy('Webserver Home Page'), help_text=format_lazy(
ugettext_lazy( ugettext_lazy(
'Choose the default web application that must be served when ' 'Choose the default page that must be served when '
'someone visits your {box_name} on the web. A typical use ' 'someone visits your {box_name} on the web. A typical use '
'case is to set your blog or wiki as the landing page when ' 'case is to set your blog or wiki as the home page when '
'someone visits the domain name. Note that once the default ' 'someone visits the domain name. Note that once the home '
'app is set to something other than {box_name} Service ' 'page is set to something other than {box_name} Service '
'(Plinth), your users must explicitly type /plinth or ' '(Plinth), your users must explicitly type /plinth or '
'/freedombox to reach {box_name} Service (Plinth).'), '/freedombox to reach {box_name} Service (Plinth).'),
box_name=ugettext_lazy(cfg.box_name)), required=False, box_name=ugettext_lazy(cfg.box_name)), required=False,
choices=get_default_app_choices) choices=get_homepage_choices)

View File

@ -63,7 +63,7 @@ def get_status():
return { return {
'hostname': config.get_hostname(), 'hostname': config.get_hostname(),
'domainname': config.get_domainname(), 'domainname': config.get_domainname(),
'defaultapp': config.get_default_app(), 'homepage': config.get_home_page(),
} }
@ -91,16 +91,16 @@ def _apply_changes(request, old_status, new_status):
else: else:
messages.success(request, _('Domain name set')) messages.success(request, _('Domain name set'))
if old_status['defaultapp'] != new_status['defaultapp']: if old_status['homepage'] != new_status['homepage']:
try: try:
change_default_app(new_status['defaultapp']) change_home_page(new_status['homepage'])
except Exception as exception: except Exception as exception:
messages.error( messages.error(
request, request,
_('Error setting default app: {exception}') _('Error setting webserver home page: {exception}')
.format(exception=exception)) .format(exception=exception))
else: else:
messages.success(request, _('Default app set')) messages.success(request, _('Webserver home page set'))
def change_default_app(app_id): def change_default_app(app_id):
@ -114,7 +114,7 @@ def change_default_app(app_id):
if shortcut['id'] == app_id if shortcut['id'] == app_id
][0] ][0]
actions.superuser_run('config', ['set-default-app', url.strip("/")]) actions.superuser_run('config', ['set-home-page', url])
def set_hostname(hostname): def set_hostname(hostname):