Sunil Mohan Adapa 9009cdafd6
config, names: Move domain name configuration to names app
Tests:

- Config app description is as expected.
- Config form does not show domain name field anymore.
  - Submitting the form with changes works.
- Names app has correct link for configuring static domain name. Clicking it
  takes to page for setting domain name.
- On startup, static domian name signal is sent properly if set. Otherwise no
  signal is send.
- Change domain name form shows correct value for current domain name.
- Change domain name form sets the value for domain name properly.
  - Page title is correct.
  - Validations works.
  - Add/remove domain name signals are sent properly.
  - Success message as shown expected
  - /etc/hosts is updated as expected.
- Unit tests work.
- Functional tests on ejabberd, letsencrypt, matrix, email, jsxc, openvpn
- After freshly starting the service. Visiting names app shows correct list of
  domains.
- ejabberd:
  - Installs works as expected. Currently set domain_name is setup properly.
    Copy certificate happens on proper domain.
  - Changing the domain sets the domain properly in ejabberd configuration.
  - Ejabberd app page shows link to name services instead of config app.
    Clicking works as expected.
- letsencrypt:
  - When no domains are configured, the link to 'Configure domains' is to the
    names app.
- matrix-synapse:
  - Domain name is properly shown in the status.
- email:
  - Primary domain name is shows properly in the app page.
  - Setting new primary domain works.
  - When installing, domain set as static domain name is prioritized as primary
    domain.
- jsxc:
  - Show the current static domain name in the domain field. BOSH server is
    available.
- openvpn:
  - Show the current static domain in profile is set otherwise show the current
    hostname.
  - If domain name is not set, downloaded OpenVPN profile shows hostname.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Veiko Aasa <veiko17@disroot.org>
2024-09-19 13:43:32 +03:00

78 lines
2.4 KiB
Python

# SPDX-License-Identifier: AGPL-3.0-or-later
"""Configure miscellaneous system settings."""
import os
import pathlib
import augeas
from plinth import action_utils
from plinth.actions import privileged
APACHE_CONF_ENABLED_DIR = '/etc/apache2/conf-enabled'
APACHE_HOMEPAGE_CONF_FILE_NAME = 'freedombox-apache-homepage.conf'
APACHE_HOMEPAGE_CONFIG = os.path.join(APACHE_CONF_ENABLED_DIR,
APACHE_HOMEPAGE_CONF_FILE_NAME)
JOURNALD_FILE = pathlib.Path('/etc/systemd/journald.conf.d/50-freedombox.conf')
def load_augeas():
"""Initialize Augeas."""
aug = augeas.Augeas(flags=augeas.Augeas.NO_LOAD +
augeas.Augeas.NO_MODL_AUTOLOAD)
aug.transform('Puppet', str(JOURNALD_FILE))
aug.set('/augeas/context', '/files' + str(JOURNALD_FILE))
aug.load()
return aug
def get_logging_mode() -> str:
"""Return the logging mode as none, volatile or persistent."""
aug = load_augeas()
storage = aug.get('Journal/Storage')
if storage in ('volatile', 'persistent', 'none'):
return storage
# journald's default is 'auto'. On Debian systems, 'auto' is same
# 'persistent' because /var/log/journal exists by default.
return 'persistent'
@privileged
def set_logging_mode(mode: str):
"""Set the current logging mode."""
if mode not in ('volatile', 'persistent', 'none'):
raise ValueError('Invalid mode')
aug = load_augeas()
aug.set('Journal/Storage', mode)
if mode == 'volatile':
aug.set('Journal/MaxFileSec', '6h')
aug.set('Journal/MaxRetentionSec', '2day')
else:
aug.remove('Journal/MaxFileSec')
aug.remove('Journal/MaxRetentionSec')
aug.remove('Journal/RuntimeMaxUse')
JOURNALD_FILE.parent.mkdir(exist_ok=True)
aug.save()
# systemd-journald is socket activated, it may not be running and it does
# not support reload.
action_utils.service_try_restart('systemd-journald')
@privileged
def set_home_page(homepage: str):
"""Set the default app for this FreedomBox."""
conf_file_path = os.path.join('/etc/apache2/conf-available',
APACHE_HOMEPAGE_CONF_FILE_NAME)
redirect_rule = 'RedirectMatch "^/$" "{}"\n'.format(homepage)
with open(conf_file_path, 'w', encoding='utf-8') as conf_file:
conf_file.write(redirect_rule)
action_utils.webserver_enable('freedombox-apache-homepage')