diff --git a/actions/matrixsynapse b/actions/matrixsynapse index 020173f0f..5dc5b1bb4 100755 --- a/actions/matrixsynapse +++ b/actions/matrixsynapse @@ -5,12 +5,14 @@ Configuration helper for Matrix-Synapse server. """ import argparse +import pathlib import yaml from plinth import action_utils -from plinth.modules.matrixsynapse import ORIG_CONF_PATH, STATIC_CONF_PATH, \ - LISTENERS_CONF_PATH, REGISTRATION_CONF_PATH +from plinth.modules.matrixsynapse import (LISTENERS_CONF_PATH, ORIG_CONF_PATH, + REGISTRATION_CONF_PATH, + STATIC_CONF_PATH) STATIC_CONFIG = { 'max_upload_size': @@ -47,6 +49,10 @@ def parse_arguments(): '--domain-name', help='The domain name that will be used by Matrix Synapse') + subparsers.add_parser( + 'move-old-conf', + help='Move old configuration file to backup before reinstall') + subparsers.required = True return parser.parse_args() @@ -110,6 +116,14 @@ def subcommand_public_registration(argument): action_utils.service_restart('matrix-synapse') +def subcommand_move_old_conf(_arguments): + """Move old configuration to backup so it can be restored by reinstall.""" + conf_file = pathlib.Path(ORIG_CONF_PATH) + if conf_file.exists(): + backup_file = conf_file.with_suffix(conf_file.suffix + '.fbx-bak') + conf_file.replace(backup_file) + + def main(): arguments = parse_arguments() sub_command = arguments.subcommand.replace('-', '_') diff --git a/plinth/modules/matrixsynapse/__init__.py b/plinth/modules/matrixsynapse/__init__.py index 19cd93257..97cf017a1 100644 --- a/plinth/modules/matrixsynapse/__init__.py +++ b/plinth/modules/matrixsynapse/__init__.py @@ -18,11 +18,10 @@ from plinth.daemon import Daemon from plinth.modules.apache.components import Webserver from plinth.modules.firewall.components import Firewall from plinth.modules.letsencrypt.components import LetsEncrypt -from plinth.utils import Version from .manifest import backup, clients # noqa, pylint: disable=unused-import -version = 5 +version = 6 managed_services = ['matrix-synapse'] @@ -111,31 +110,29 @@ class MatrixSynapseApp(app_module.App): def setup(helper, old_version=None): """Install and configure the module.""" helper.install(managed_packages) - helper.call('post', actions.superuser_run, 'matrixsynapse', - ['post-install']) - helper.call('post', app.enable) + if old_version and old_version < 6: + helper.call('post', upgrade, helper) + else: + helper.call('post', actions.superuser_run, 'matrixsynapse', + ['post-install']) + + if not old_version: + helper.call('post', app.enable) + app.get_component('letsencrypt-matrixsynapse').setup_certificates() -def force_upgrade(helper, packages): - """Force upgrade matrix-synapse to resolve conffile prompt.""" - if 'matrix-synapse' not in packages: - return False - - # Allow any lower version to upgrade to 1.15.* - package = packages['matrix-synapse'] - if Version(package['new_version']) > Version('1.16~'): - return False - +def upgrade(helper): + """Upgrade matrix-synapse configuration to avoid conffile prompt.""" public_registration_status = get_public_registration_status() - helper.install(['matrix-synapse'], force_configuration='new') + actions.superuser_run('matrixsynapse', ['move-old-conf']) + helper.install(['matrix-synapse'], force_configuration='new', + reinstall=True, force_missing_configuration=True) actions.superuser_run('matrixsynapse', ['post-install']) if public_registration_status: actions.superuser_run('matrixsynapse', ['public-registration', 'enable']) - return True - def setup_domain(domain_name): """Configure a domain name for matrixsynapse."""