From f4f417cbb60166bcad1fb16145e37ac7a17acb3b Mon Sep 17 00:00:00 2001 From: Benedek Nagy Date: Sat, 22 Mar 2025 18:34:12 +0100 Subject: [PATCH] syncthing: Extend setup process to recover from manual config errors There are configuration items that users of syncthing can accidentally set, resulting in the UI becoming unavailable. Previously, if such a thing happened, the FreedomBox admin would have to ssh into the server and edit the xml manually or reinstall/restore the app. With this patch, it is enough to re-run the setup to make the UI accesible again. - Remove http basic authentication from the settings (gui/user and gui/password. This is unnecessary as FreedomBox already provides authentication. - Make sure these options are properly set: - 'Use HTTPS for GUI' is off - 'GUI Listen Address' is 127.0.0.1:8384 - GUI is enabled There is a forum discussion that inspired these changes: https://discuss.freedombox.org/t/solved-cant-access-syncthing-administration-panel/2137 Tests done: - Fresh install: after the setup, confirm the UI is working properly and the xml is configured with the expected values. - Make the changes to break the Syncthing UI, then re-run setup. Confirm the UI is back online. Signed-off-by: Benedek Nagy [sunil: Initialize conf_changed variable to prevent failures accessing it] Signed-off-by: Sunil Mohan Adapa Reviewed-by: Sunil Mohan Adapa --- plinth/modules/syncthing/privileged.py | 37 +++++++++++++++++++------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/plinth/modules/syncthing/privileged.py b/plinth/modules/syncthing/privileged.py index f6b505c53..6180c353d 100644 --- a/plinth/modules/syncthing/privileged.py +++ b/plinth/modules/syncthing/privileged.py @@ -73,16 +73,35 @@ def setup_config(): # disable authentication missing notification as FreedomBox itself # provides authentication - auth_conf = ('/configuration/options/unackedNotificationID' - '[#text="authenticationUserAndPassword"]') - conf_changed = bool(aug.remove('/files' + conf_file_in_use + auth_conf)) + # also make sure no authentication is required on top of FreedomBox's + configs_to_remove = ( + 'options/unackedNotificationID[#text="authenticationUserAndPassword"]', + 'gui/user/#text', 'gui/password/#text') + conf_changed = False + for config in configs_to_remove: + removed = bool( + aug.remove('/files' + conf_file_in_use + + f'/configuration/{config}')) + if removed: + conf_changed = True - # disable usage reporting notification by declining reporting - # if the user has not made a choice yet - usage_conf = '/configuration/options/urAccepted/#text' - if aug.get('/files' + conf_file_in_use + usage_conf) == '0': - aug.set('/files' + conf_file_in_use + usage_conf, '-1') - conf_changed = True + configs = { + # disable usage reporting notification by declining reporting + # if the user has not made a choice yet + 'options/urAccepted/#text': '-1', + # Set all the values that, misconfigured from the Syncthing UI, + # can make the UI inaccessible. Such misconfigurations can be + # corrected if the user re-runs the setup. + # https://discuss.freedombox.org/t/solved-cant-access-syncthing-administration-panel/2137 + 'gui/#attribute/tls': 'false', + 'gui/#attribute/enabled': 'true', + 'gui/address/#text': '127.0.0.1:8384' + } + for key, value in configs.items(): + config = f'/configuration/{key}' + if aug.get('/files' + conf_file_in_use + config) != value: + aug.set('/files' + conf_file_in_use + config, value) + conf_changed = True aug.save()