From b6085fef8d2bdeb2de85d1e22f470fbf10995355 Mon Sep 17 00:00:00 2001 From: Tagadda <36127788+Tagadda@users.noreply.github.com> Date: Sat, 29 Jan 2022 22:59:28 +0000 Subject: [PATCH 01/34] wip --- locales/en.json | 22 +-- share/actionsmap.yml | 24 ++- share/config_settings.toml | 125 ++++++++++++ src/settings.py | 378 +++++++++++-------------------------- src/utils/config.py | 5 + src/utils/legacy.py | 25 +++ 6 files changed, 294 insertions(+), 285 deletions(-) create mode 100644 share/config_settings.toml diff --git a/locales/en.json b/locales/en.json index 2b2f10179..e50e0f7d9 100644 --- a/locales/en.json +++ b/locales/en.json @@ -374,26 +374,26 @@ "global_settings_cant_write_settings": "Could not save settings file, reason: {reason}", "global_settings_key_doesnt_exists": "The key '{settings_key}' does not exist in the global settings, you can see all the available keys by running 'yunohost settings list'", "global_settings_reset_success": "Previous settings now backed up to {path}", + "global_settings_setting_admin_strength": "Admin password strength", "global_settings_setting_backup_compress_tar_archives": "When creating new backups, compress the archives (.tar.gz) instead of uncompressed archives (.tar). N.B. : enabling this option means create lighter backup archives, but the initial backup procedure will be significantly longer and heavy on CPU.", + "global_settings_setting_nginx_compatibility": "Compatibility vs. security tradeoff for the web server NGINX. Affects the ciphers (and other security-related aspects)", + "global_settings_setting_nginx_redirect_to_https": "Redirect HTTP requests to HTTPs by default (DO NOT TURN OFF unless you really know what you're doing!)", "global_settings_setting_pop3_enabled": "Enable the POP3 protocol for the mail server", + "global_settings_setting_postfix_compatibility": "Compatibility vs. security tradeoff for the Postfix server. Affects the ciphers (and other security-related aspects)", "global_settings_setting_security_experimental_enabled": "Enable experimental security features (don't enable this if you don't know what you're doing!)", - "global_settings_setting_security_nginx_compatibility": "Compatibility vs. security tradeoff for the web server NGINX. Affects the ciphers (and other security-related aspects)", - "global_settings_setting_security_nginx_redirect_to_https": "Redirect HTTP requests to HTTPs by default (DO NOT TURN OFF unless you really know what you're doing!)", - "global_settings_setting_security_password_admin_strength": "Admin password strength", - "global_settings_setting_security_password_user_strength": "User password strength", - "global_settings_setting_security_postfix_compatibility": "Compatibility vs. security tradeoff for the Postfix server. Affects the ciphers (and other security-related aspects)", - "global_settings_setting_security_ssh_compatibility": "Compatibility vs. security tradeoff for the SSH server. Affects the ciphers (and other security-related aspects)", - "global_settings_setting_security_ssh_password_authentication": "Allow password authentication for SSH", - "global_settings_setting_security_ssh_port": "SSH port", - "global_settings_setting_security_webadmin_allowlist": "IP adresses allowed to access the webadmin. Comma-separated.", - "global_settings_setting_security_webadmin_allowlist_enabled": "Allow only some IPs to access the webadmin.", - "global_settings_setting_service_ssh_allow_deprecated_dsa_hostkey": "Allow the use of (deprecated) DSA hostkey for the SSH daemon configuration", "global_settings_setting_smtp_allow_ipv6": "Allow the use of IPv6 to receive and send mail", "global_settings_setting_smtp_relay_host": "SMTP relay host to use in order to send mail instead of this yunohost instance. Useful if you are in one of this situation: your 25 port is blocked by your ISP or VPS provider, you have a residential IP listed on DUHL, you are not able to configure reverse DNS or this server is not directly exposed on the internet and you want use an other one to send mails.", "global_settings_setting_smtp_relay_password": "SMTP relay host password", "global_settings_setting_smtp_relay_port": "SMTP relay port", "global_settings_setting_smtp_relay_user": "SMTP relay user account", + "global_settings_setting_ssh_allow_deprecated_dsa_hostkey": "Allow the use of (deprecated) DSA hostkey for the SSH daemon configuration", + "global_settings_setting_ssh_compatibility": "Compatibility vs. security tradeoff for the SSH server. Affects the ciphers (and other security-related aspects)", + "global_settings_setting_ssh_password_authentication": "Allow password authentication for SSH", + "global_settings_setting_ssh_port": "SSH port", "global_settings_setting_ssowat_panel_overlay_enabled": "Enable SSOwat panel overlay", + "global_settings_setting_user_strength": "User password strength", + "global_settings_setting_webadmin_allowlist": "IP adresses allowed to access the webadmin. Comma-separated.", + "global_settings_setting_webadmin_allowlist_enabled": "Allow only some IPs to access the webadmin.", "global_settings_unknown_setting_from_settings_file": "Unknown key in settings: '{setting_key}', discard it and save it in /etc/yunohost/settings-unknown.json", "global_settings_unknown_type": "Unexpected situation, the setting {setting} appears to have the type {unknown_type} but it is not a type supported by the system.", "good_practices_about_admin_password": "You are now about to define a new administration password. The password should be at least 8 characters long—though it is good practice to use a longer password (i.e. a passphrase) and/or to use a variation of characters (uppercase, lowercase, digits and special characters).", diff --git a/share/actionsmap.yml b/share/actionsmap.yml index 89c6e914d..d4cf2d590 100644 --- a/share/actionsmap.yml +++ b/share/actionsmap.yml @@ -1093,6 +1093,11 @@ settings: list: action_help: list all entries of the settings api: GET /settings + arguments: + -f: + full: --full + help: Display all details (meant to be used by the API) + action: store_true ### settings_get() get: @@ -1101,22 +1106,29 @@ settings: arguments: key: help: Settings key - --full: - help: Show more details + -f: + full: --full + help: Display all details (meant to be used by the API) + action: store_true + -e: + full: --export + help: Only export key/values, meant to be reimported using "config set --args-file" action: store_true ### settings_set() set: action_help: set an entry value in the settings - api: POST /settings/ + api: PUT /settings arguments: key: - help: Settings key + help: The question or form key + nargs: '?' -v: full: --value help: new value - extra: - required: True + -a: + full: --args + help: Serialized arguments for new configuration (i.e. "mail_in=0&mail_out=0") ### settings_reset_all() reset-all: diff --git a/share/config_settings.toml b/share/config_settings.toml new file mode 100644 index 000000000..61f0a5725 --- /dev/null +++ b/share/config_settings.toml @@ -0,0 +1,125 @@ +version = "1.0" +i18n = "global_settings" + +[security] +name = "Security" + [security.password] + name = "Passwords" + [security.password.admin_strength] + type = "number" + default = 1 + + [security.password.user_strength] + type = "number" + default = 1 + + [security.ssh] + name = "SSH" + [security.ssh.ssh_compatibility] + type = "select" + default = "modern" + choices = ["intermediate", "modern"] + + [security.ssh.ssh_port] + type = "number" + default = 22 + + [security.ssh.ssh_password_authentication] + type = "boolean" + default = "false" + + [security.ssh.ssh_allow_deprecated_dsa_hostkey] + type = "boolean" + default = "false" + + [security.nginx] + name = "NGINX" + [security.nginx.nginx_redirect_to_https] + type = "boolean" + default = "true" + + [security.nginx.nginx_compatibility] + type = "select" + default = "intermediate" + choices = ["intermediate", "modern"] + + [security.postfix] + name = "Postfix" + [security.postfix.postfix_compatibility] + type = "select" + default = "intermediate" + choices = ["intermediate", "modern"] + + [security.webadmin] + name = "Webadmin" + [security.webadmin.webadmin_allowlist_enabled] + type = "boolean" + default = "false" + + [security.webadmin.webadmin_allowlist] + type = "tags" + visible = "webadmin_allowlist_enabled" + optional = true + default = "" + + [security.experimental] + name = "Experimental" + [security.experimental.security_experimental_enabled] + type = "boolean" + default = "false" + + +[email] +name = "Email" + [email.pop3] + name = "POP3" + [email.pop3.pop3_enabled] + type = "boolean" + default = "false" + + [email.smtp] + name = "SMTP" + [email.smtp.smtp_allow_ipv6] + type = "boolean" + default = "true" + + [email.smtp.smtp_relay_enabled] + type = "boolean" + default = "false" + + [email.smtp.smtp_relay_host] + type = "string" + default = "" + optional = true + visible="smtp_relay_enabled" + + [email.smtp.smtp_relay_port] + type = "number" + default = 587 + visible="smtp_relay_enabled" + + [email.smtp.smtp_relay_user] + type = "string" + default = "" + optional = true + visible="smtp_relay_enabled" + + [email.smtp.smtp_relay_password] + type = "password" + default = "" + optional = true + visible="smtp_relay_enabled" + +[misc] +name = "Other" + [misc.ssowat] + name = "SSOwat" + [misc.ssowat.ssowat_panel_overlay_enabled] + type = "boolean" + default = "true" + + [misc.backup] + name = "Backup" + [misc.backup.backup_compress_tar_archives] + type = "boolean" + default = "false" diff --git a/src/settings.py b/src/settings.py index cec416550..0701cd906 100644 --- a/src/settings.py +++ b/src/settings.py @@ -7,14 +7,17 @@ from collections import OrderedDict from moulinette import m18n from yunohost.utils.error import YunohostError, YunohostValidationError +from yunohost.utils.config import ConfigPanel, Question from moulinette.utils.log import getActionLogger from yunohost.regenconf import regen_conf from yunohost.firewall import firewall_reload +from yunohost.log import is_unit_operation +from yunohost.utils.legacy import translate_legacy_settings_to_configpanel_settings logger = getActionLogger("yunohost.settings") -SETTINGS_PATH = "/etc/yunohost/settings.json" -SETTINGS_PATH_OTHER_LOCATION = "/etc/yunohost/settings-%s.json" +SETTINGS_PATH = "/etc/yunohost/settings.yaml" +SETTINGS_PATH_OTHER_LOCATION = "/etc/yunohost/settings-%s.yaml" def is_boolean(value): @@ -59,71 +62,7 @@ def is_boolean(value): # * string # * enum (in the form of a python list) -DEFAULTS = OrderedDict( - [ - # Password Validation - # -1 disabled, 0 alert if listed, 1 8-letter, 2 normal, 3 strong, 4 strongest - ("security.password.admin.strength", {"type": "int", "default": 1}), - ("security.password.user.strength", {"type": "int", "default": 1}), - ( - "service.ssh.allow_deprecated_dsa_hostkey", - {"type": "bool", "default": False}, - ), - ( - "security.ssh.compatibility", - { - "type": "enum", - "default": "modern", - "choices": ["intermediate", "modern"], - }, - ), - ( - "security.ssh.port", - {"type": "int", "default": 22}, - ), - ( - "security.ssh.password_authentication", - {"type": "bool", "default": True}, - ), - ( - "security.nginx.redirect_to_https", - { - "type": "bool", - "default": True, - }, - ), - ( - "security.nginx.compatibility", - { - "type": "enum", - "default": "intermediate", - "choices": ["intermediate", "modern"], - }, - ), - ( - "security.postfix.compatibility", - { - "type": "enum", - "default": "intermediate", - "choices": ["intermediate", "modern"], - }, - ), - ("pop3.enabled", {"type": "bool", "default": False}), - ("smtp.allow_ipv6", {"type": "bool", "default": True}), - ("smtp.relay.host", {"type": "string", "default": ""}), - ("smtp.relay.port", {"type": "int", "default": 587}), - ("smtp.relay.user", {"type": "string", "default": ""}), - ("smtp.relay.password", {"type": "string", "default": ""}), - ("backup.compress_tar_archives", {"type": "bool", "default": False}), - ("ssowat.panel_overlay.enabled", {"type": "bool", "default": True}), - ("security.webadmin.allowlist.enabled", {"type": "bool", "default": False}), - ("security.webadmin.allowlist", {"type": "string", "default": ""}), - ("security.experimental.enabled", {"type": "bool", "default": False}), - ] -) - - -def settings_get(key, full=False): +def settings_get(key="", full=False, export=False): """ Get an entry value in the settings @@ -131,28 +70,42 @@ def settings_get(key, full=False): key -- Settings key """ - settings = _get_settings() - - if key not in settings: + if full and export: raise YunohostValidationError( - "global_settings_key_doesnt_exists", settings_key=key + "You can't use --full and --export together.", raw_msg=True ) if full: - return settings[key] + mode = "full" + elif export: + mode = "export" + else: + mode = "classic" - return settings[key]["value"] + if mode == "classic" and key == "": + raise YunohostValidationError( + "Missing key" + ) + + settings = SettingsConfigPanel() + key = translate_legacy_settings_to_configpanel_settings(key) + return settings.get(key, mode) -def settings_list(): +def settings_list(full=False, export=True): """ List all entries of the settings """ - return _get_settings() + + if full: + export = False + + return settings_get(full=full, export=export) -def settings_set(key, value): +@is_unit_operation() +def settings_set(operation_logger, key=None, value=None, args=None, args_file=None): """ Set an entry value in the settings @@ -161,78 +114,14 @@ def settings_set(key, value): value -- New value """ - settings = _get_settings() - - if key not in settings: - raise YunohostValidationError( - "global_settings_key_doesnt_exists", settings_key=key - ) - - key_type = settings[key]["type"] - - if key_type == "bool": - boolean_value = is_boolean(value) - if boolean_value[0]: - value = boolean_value[1] - else: - raise YunohostValidationError( - "global_settings_bad_type_for_setting", - setting=key, - received_type=type(value).__name__, - expected_type=key_type, - ) - elif key_type == "int": - if not isinstance(value, int) or isinstance(value, bool): - if isinstance(value, str): - try: - value = int(value) - except Exception: - raise YunohostValidationError( - "global_settings_bad_type_for_setting", - setting=key, - received_type=type(value).__name__, - expected_type=key_type, - ) - else: - raise YunohostValidationError( - "global_settings_bad_type_for_setting", - setting=key, - received_type=type(value).__name__, - expected_type=key_type, - ) - elif key_type == "string": - if not isinstance(value, str): - raise YunohostValidationError( - "global_settings_bad_type_for_setting", - setting=key, - received_type=type(value).__name__, - expected_type=key_type, - ) - elif key_type == "enum": - if value not in settings[key]["choices"]: - raise YunohostValidationError( - "global_settings_bad_choice_for_enum", - setting=key, - choice=str(value), - available_choices=", ".join(settings[key]["choices"]), - ) - else: - raise YunohostValidationError( - "global_settings_unknown_type", setting=key, unknown_type=key_type - ) - - old_value = settings[key].get("value") - settings[key]["value"] = value - _save_settings(settings) - - try: - trigger_post_change_hook(key, old_value, value) - except Exception as e: - logger.error(f"Post-change hook for setting {key} failed : {e}") - raise + Question.operation_logger = operation_logger + settings = SettingsConfigPanel() + key = translate_legacy_settings_to_configpanel_settings(key) + return settings.set(key, value, args, args_file, operation_logger=operation_logger) -def settings_reset(key): +@is_unit_operation() +def settings_reset(operation_logger, key): """ Set an entry value to its default one @@ -240,18 +129,14 @@ def settings_reset(key): key -- Settings key """ - settings = _get_settings() - if key not in settings: - raise YunohostValidationError( - "global_settings_key_doesnt_exists", settings_key=key - ) - - settings[key]["value"] = settings[key]["default"] - _save_settings(settings) + settings = SettingsConfigPanel() + key = translate_legacy_settings_to_configpanel_settings(key) + return settings.reset(key, operation_logger=operation_logger) -def settings_reset_all(): +@is_unit_operation() +def settings_reset_all(operation_logger): """ Reset all settings to their default value @@ -259,110 +144,72 @@ def settings_reset_all(): yes -- Yes I'm sure I want to do that """ - settings = _get_settings() - - # For now on, we backup the previous settings in case of but we don't have - # any mecanism to take advantage of those backups. It could be a nice - # addition but we'll see if this is a common need. - # Another solution would be to use etckeeper and integrate those - # modification inside of it and take advantage of its git history - old_settings_backup_path = ( - SETTINGS_PATH_OTHER_LOCATION % datetime.utcnow().strftime("%F_%X") - ) - _save_settings(settings, location=old_settings_backup_path) - - for value in settings.values(): - value["value"] = value["default"] - - _save_settings(settings) - - return { - "old_settings_backup_path": old_settings_backup_path, - "message": m18n.n( - "global_settings_reset_success", path=old_settings_backup_path - ), - } + settings = SettingsConfigPanel() + return settings.reset(operation_logger=operation_logger) def _get_setting_description(key): - return m18n.n(f"global_settings_setting_{key}".replace(".", "_")) + return m18n.n(f"global_settings_setting_{key.split('.')[-1]}") -def _get_settings(): +class SettingsConfigPanel(ConfigPanel): + entity_type = "settings" + save_path_tpl = SETTINGS_PATH + save_mode = "diff" - settings = {} + def __init__( + self, config_path=None, save_path=None, creation=False + ): + super().__init__("settings") - for key, value in DEFAULTS.copy().items(): - settings[key] = value - settings[key]["value"] = value["default"] - settings[key]["description"] = _get_setting_description(key) + def _apply(self): + super()._apply() - if not os.path.exists(SETTINGS_PATH): - return settings + settings = { k: v for k, v in self.future_values.items() if self.values.get(k) != v } + for setting_name, value in settings.items(): + try: + trigger_post_change_hook(setting_name, self.values.get(setting_name), value) + except Exception as e: + logger.error(f"Post-change hook for setting failed : {e}") + raise - # we have a very strict policy on only allowing settings that we know in - # the OrderedDict DEFAULTS - # For various reason, while reading the local settings we might encounter - # settings that aren't in DEFAULTS, those can come from settings key that - # we have removed, errors or the user trying to modify - # /etc/yunohost/settings.json - # To avoid to simply overwrite them, we store them in - # /etc/yunohost/settings-unknown.json in case of - unknown_settings = {} - unknown_settings_path = SETTINGS_PATH_OTHER_LOCATION % "unknown" + def reset(self, key = "", operation_logger=None): + self.filter_key = key + + # Read config panel toml + self._get_config_panel() + + if not self.config: + raise YunohostValidationError("config_no_panel") + + # Replace all values with default values + self.values = self._get_default_values() + + Question.operation_logger = operation_logger + + if operation_logger: + operation_logger.start() - if os.path.exists(unknown_settings_path): try: - unknown_settings = json.load(open(unknown_settings_path, "r")) - except Exception as e: - logger.warning(f"Error while loading unknown settings {e}") + self._apply() + except YunohostError: + raise + # Script got manually interrupted ... + # N.B. : KeyboardInterrupt does not inherit from Exception + except (KeyboardInterrupt, EOFError): + error = m18n.n("operation_interrupted") + logger.error(m18n.n("config_apply_failed", error=error)) + raise + # Something wrong happened in Yunohost's code (most probably hook_exec) + except Exception: + import traceback - try: - with open(SETTINGS_PATH) as settings_fd: - local_settings = json.load(settings_fd) + error = m18n.n("unexpected_error", error="\n" + traceback.format_exc()) + logger.error(m18n.n("config_apply_failed", error=error)) + raise - for key, value in local_settings.items(): - if key in settings: - settings[key] = value - settings[key]["description"] = _get_setting_description(key) - else: - logger.warning( - m18n.n( - "global_settings_unknown_setting_from_settings_file", - setting_key=key, - ) - ) - unknown_settings[key] = value - except Exception as e: - raise YunohostValidationError("global_settings_cant_open_settings", reason=e) - - if unknown_settings: - try: - _save_settings(unknown_settings, location=unknown_settings_path) - _save_settings(settings) - except Exception as e: - logger.warning(f"Failed to save unknown settings (because {e}), aborting.") - - return settings - - -def _save_settings(settings, location=SETTINGS_PATH): - settings_without_description = {} - for key, value in settings.items(): - settings_without_description[key] = value - if "description" in value: - del settings_without_description[key]["description"] - - try: - result = json.dumps(settings_without_description, indent=4) - except Exception as e: - raise YunohostError("global_settings_cant_serialize_settings", reason=e) - - try: - with open(location, "w") as settings_fd: - settings_fd.write(result) - except Exception as e: - raise YunohostError("global_settings_cant_write_settings", reason=e) + logger.success("Config updated as expected") + operation_logger.success() # Meant to be a dict of setting_name -> function to call @@ -370,13 +217,8 @@ post_change_hooks = {} def post_change_hook(setting_name): + # TODO: Check that setting_name exists def decorator(func): - assert ( - setting_name in DEFAULTS.keys() - ), f"The setting {setting_name} does not exists" - assert ( - setting_name not in post_change_hooks - ), f"You can only register one post change hook per setting (in particular for {setting_name})" post_change_hooks[setting_name] = func return func @@ -404,48 +246,48 @@ def trigger_post_change_hook(setting_name, old_value, new_value): # =========================================== -@post_change_hook("ssowat.panel_overlay.enabled") -@post_change_hook("security.nginx.redirect_to_https") -@post_change_hook("security.nginx.compatibility") -@post_change_hook("security.webadmin.allowlist.enabled") -@post_change_hook("security.webadmin.allowlist") +@post_change_hook("ssowat_panel_overlay_enabled") +@post_change_hook("nginx_redirect_to_https") +@post_change_hook("nginx_compatibility") +@post_change_hook("webadmin_allowlist_enabled") +@post_change_hook("webadmin_allowlist") def reconfigure_nginx(setting_name, old_value, new_value): if old_value != new_value: regen_conf(names=["nginx"]) -@post_change_hook("security.experimental.enabled") +@post_change_hook("security_experimental_enabled") def reconfigure_nginx_and_yunohost(setting_name, old_value, new_value): if old_value != new_value: regen_conf(names=["nginx", "yunohost"]) -@post_change_hook("security.ssh.compatibility") -@post_change_hook("security.ssh.password_authentication") +@post_change_hook("ssh_compatibility") +@post_change_hook("ssh_password_authentication") def reconfigure_ssh(setting_name, old_value, new_value): if old_value != new_value: regen_conf(names=["ssh"]) -@post_change_hook("security.ssh.port") +@post_change_hook("ssh_port") def reconfigure_ssh_and_fail2ban(setting_name, old_value, new_value): if old_value != new_value: regen_conf(names=["ssh", "fail2ban"]) firewall_reload() -@post_change_hook("smtp.allow_ipv6") -@post_change_hook("smtp.relay.host") -@post_change_hook("smtp.relay.port") -@post_change_hook("smtp.relay.user") -@post_change_hook("smtp.relay.password") -@post_change_hook("security.postfix.compatibility") +@post_change_hook("smtp_allow_ipv6") +@post_change_hook("smtp_relay_host") +@post_change_hook("smtp_relay_port") +@post_change_hook("smtp_relay_user") +@post_change_hook("smtp_relay_password") +@post_change_hook("postfix_compatibility") def reconfigure_postfix(setting_name, old_value, new_value): if old_value != new_value: regen_conf(names=["postfix"]) -@post_change_hook("pop3.enabled") +@post_change_hook("pop3_enabled") def reconfigure_dovecot(setting_name, old_value, new_value): dovecot_package = "dovecot-pop3d" diff --git a/src/utils/config.py b/src/utils/config.py index 56f632b09..e265527e7 100644 --- a/src/utils/config.py +++ b/src/utils/config.py @@ -801,6 +801,11 @@ class Question: def _prevalidate(self): if self.value in [None, ""] and not self.optional: + import traceback + error = m18n.n("unexpected_error", error="\n" + traceback.format_exc()) + msg = m18n.n("unexpected_error", app=app_instance_name, error=error) + logger.error(msg) + operation_logger.error(msg) raise YunohostValidationError("app_argument_required", name=self.name) # we have an answer, do some post checks diff --git a/src/utils/legacy.py b/src/utils/legacy.py index 85898f28d..74e6c24c3 100644 --- a/src/utils/legacy.py +++ b/src/utils/legacy.py @@ -62,6 +62,31 @@ LEGACY_PERMISSION_LABEL = { ): "api", # $excaped_domain$excaped_path/[%w-.]*/[%w-.]*/git%-receive%-pack,$excaped_domain$excaped_path/[%w-.]*/[%w-.]*/git%-upload%-pack,$excaped_domain$excaped_path/[%w-.]*/[%w-.]*/info/refs } +LEGACY_SETTINGS = { + "security.password.admin.strength": "security.password.admin_strength", + "security.password.user.strength": "security.password.user_strength", + "security.ssh.compatibility": "security.ssh.ssh_compatibility", + "security.ssh.port": "security.ssh.ssh_port", + "security.ssh.password_authentication": "security.ssh.ssh_password_authentication", + "service.ssh.allow_deprecated_dsa_hostkey": "security.ssh.ssh_allow_deprecated_dsa_hostkey", + "security.nginx.redirect_to_https": "security.nginx.nginx_redirect_to_https", + "security.nginx.compatibility": "security.nginx.nginx_compatibility", + "security.postfix.compatibility": "security.postfix.postfix_compatibility", + "pop3.enabled": "email.pop3.pop3_enabled", + "smtp.allow_ipv6": "email.smtp.smtp_allow_ipv6", + "smtp.relay.host": "email.smtp.smtp_relay_host", + "smtp.relay.port": "email.smtp.smtp_relay_port", + "smtp.relay.user": "email.smtp.smtp_relay_user", + "smtp.relay.password": "email.smtp.smtp_relay_password", + "backup.compress_tar_archives": "misc.backup.backup_compress_tar_archives", + "ssowat.panel_overlay.enabled": "misc.ssowat.ssowat_panel_overlay_enabled", + "security.webadmin.allowlist.enabled": "security.webadmin.webadmin_allowlist_enabled", + "security.webadmin.allowlist": "security.webadmin.webadmin_allowlist", + "security.experimental.enabled": "security.experimental.security_experimental_enabled" +} + +def translate_legacy_settings_to_configpanel_settings(settings): + return LEGACY_SETTINGS.get(settings, settings) def legacy_permission_label(app, permission_type): return LEGACY_PERMISSION_LABEL.get( From 3fd14a420eabeb8cb7f97ee539b4f737a9713c5f Mon Sep 17 00:00:00 2001 From: Tagadda <36127788+Tagadda@users.noreply.github.com> Date: Sun, 30 Jan 2022 00:37:07 +0000 Subject: [PATCH 02/34] wip --- locales/en.json | 48 ++++++++++++++++++++++++-------------- share/config_settings.toml | 2 +- src/settings.py | 15 ++++++++---- src/utils/config.py | 5 ---- 4 files changed, 43 insertions(+), 27 deletions(-) diff --git a/locales/en.json b/locales/en.json index e50e0f7d9..98ca26545 100644 --- a/locales/en.json +++ b/locales/en.json @@ -375,25 +375,39 @@ "global_settings_key_doesnt_exists": "The key '{settings_key}' does not exist in the global settings, you can see all the available keys by running 'yunohost settings list'", "global_settings_reset_success": "Previous settings now backed up to {path}", "global_settings_setting_admin_strength": "Admin password strength", - "global_settings_setting_backup_compress_tar_archives": "When creating new backups, compress the archives (.tar.gz) instead of uncompressed archives (.tar). N.B. : enabling this option means create lighter backup archives, but the initial backup procedure will be significantly longer and heavy on CPU.", - "global_settings_setting_nginx_compatibility": "Compatibility vs. security tradeoff for the web server NGINX. Affects the ciphers (and other security-related aspects)", - "global_settings_setting_nginx_redirect_to_https": "Redirect HTTP requests to HTTPs by default (DO NOT TURN OFF unless you really know what you're doing!)", - "global_settings_setting_pop3_enabled": "Enable the POP3 protocol for the mail server", - "global_settings_setting_postfix_compatibility": "Compatibility vs. security tradeoff for the Postfix server. Affects the ciphers (and other security-related aspects)", - "global_settings_setting_security_experimental_enabled": "Enable experimental security features (don't enable this if you don't know what you're doing!)", - "global_settings_setting_smtp_allow_ipv6": "Allow the use of IPv6 to receive and send mail", - "global_settings_setting_smtp_relay_host": "SMTP relay host to use in order to send mail instead of this yunohost instance. Useful if you are in one of this situation: your 25 port is blocked by your ISP or VPS provider, you have a residential IP listed on DUHL, you are not able to configure reverse DNS or this server is not directly exposed on the internet and you want use an other one to send mails.", - "global_settings_setting_smtp_relay_password": "SMTP relay host password", - "global_settings_setting_smtp_relay_port": "SMTP relay port", - "global_settings_setting_smtp_relay_user": "SMTP relay user account", - "global_settings_setting_ssh_allow_deprecated_dsa_hostkey": "Allow the use of (deprecated) DSA hostkey for the SSH daemon configuration", - "global_settings_setting_ssh_compatibility": "Compatibility vs. security tradeoff for the SSH server. Affects the ciphers (and other security-related aspects)", - "global_settings_setting_ssh_password_authentication": "Allow password authentication for SSH", + "global_settings_setting_backup_compress_tar_archives": "Compress backups", + "global_settings_setting_backup_compress_tar_archives_help": "When creating new backups, compress the archives (.tar.gz) instead of uncompressed archives (.tar). N.B. : enabling this option means create lighter backup archives, but the initial backup procedure will be significantly longer and heavy on CPU.", + "global_settings_setting_nginx_compatibility": "Compatibility", + "global_settings_setting_nginx_compatibility_help": "Compatibility vs. security tradeoff for the web server NGINX. Affects the ciphers (and other security-related aspects)", + "global_settings_setting_nginx_redirect_to_https": "Force HTTPS", + "global_settings_setting_nginx_redirect_to_https_help": "Redirect HTTP requests to HTTPs by default (DO NOT TURN OFF unless you really know what you're doing!)", + "global_settings_setting_pop3_enabled": "Enable POP3", + "global_settings_setting_pop3_enabled_help": "Enable the POP3 protocol for the mail server", + "global_settings_setting_postfix_compatibility": "Compatibility", + "global_settings_setting_postfix_compatibility_help": "Compatibility vs. security tradeoff for the Postfix server. Affects the ciphers (and other security-related aspects)", + "global_settings_setting_security_experimental_enabled": "Experimental security features", + "global_settings_setting_security_experimental_enabled_help": "Enable experimental security features (don't enable this if you don't know what you're doing!)", + "global_settings_setting_smtp_allow_ipv6": "Allow IPv6", + "global_settings_setting_smtp_allow_ipv6_help": "Allow the use of IPv6 to receive and send mail", + "global_settings_setting_smtp_relay_enabled": "Enable SMTP relay", + "global_settings_setting_smtp_relay_enabled_help": "Enable the SMTP relay to use in order to send mail instead of this yunohost instance. Useful if you are in one of this situation: your 25 port is blocked by your ISP or VPS provider, you have a residential IP listed on DUHL, you are not able to configure reverse DNS or this server is not directly exposed on the internet and you want use an other one to send mails.", + "global_settings_setting_smtp_relay_host": "Relay host", + "global_settings_setting_smtp_relay_password": "Relay password", + "global_settings_setting_smtp_relay_port": "Relay port", + "global_settings_setting_smtp_relay_user": "Relay user", + "global_settings_setting_ssh_allow_deprecated_dsa_hostkey": "Allow DSA hostkey", + "global_settings_setting_ssh_allow_deprecated_dsa_hostkey_help": "Allow the use of (deprecated) DSA hostkey for the SSH daemon configuration", + "global_settings_setting_ssh_compatibility": "Compatibility", + "global_settings_setting_ssh_compatibility_help": "Compatibility vs. security tradeoff for the SSH server. Affects the ciphers (and other security-related aspects)", + "global_settings_setting_ssh_password_authentication": "Password authentication", + "global_settings_setting_ssh_password_authentication_help": "Allow password authentication for SSH", "global_settings_setting_ssh_port": "SSH port", - "global_settings_setting_ssowat_panel_overlay_enabled": "Enable SSOwat panel overlay", + "global_settings_setting_ssowat_panel_overlay_enabled": "SSOwat panel overlay", "global_settings_setting_user_strength": "User password strength", - "global_settings_setting_webadmin_allowlist": "IP adresses allowed to access the webadmin. Comma-separated.", - "global_settings_setting_webadmin_allowlist_enabled": "Allow only some IPs to access the webadmin.", + "global_settings_setting_webadmin_allowlist": "Webadmin IP allowlist", + "global_settings_setting_webadmin_allowlist_help": "IP adresses allowed to access the webadmin.", + "global_settings_setting_webadmin_allowlist_enabled": "Enable Webadmin IP allowlist", + "global_settings_setting_webadmin_allowlist_enabled_help": "Allow only some IPs to access the webadmin.", "global_settings_unknown_setting_from_settings_file": "Unknown key in settings: '{setting_key}', discard it and save it in /etc/yunohost/settings-unknown.json", "global_settings_unknown_type": "Unexpected situation, the setting {setting} appears to have the type {unknown_type} but it is not a type supported by the system.", "good_practices_about_admin_password": "You are now about to define a new administration password. The password should be at least 8 characters long—though it is good practice to use a longer password (i.e. a passphrase) and/or to use a variation of characters (uppercase, lowercase, digits and special characters).", diff --git a/share/config_settings.toml b/share/config_settings.toml index 61f0a5725..1b2a59bc4 100644 --- a/share/config_settings.toml +++ b/share/config_settings.toml @@ -1,5 +1,5 @@ version = "1.0" -i18n = "global_settings" +i18n = "global_settings_setting" [security] name = "Security" diff --git a/src/settings.py b/src/settings.py index 0701cd906..89321e296 100644 --- a/src/settings.py +++ b/src/settings.py @@ -148,10 +148,6 @@ def settings_reset_all(operation_logger): return settings.reset(operation_logger=operation_logger) -def _get_setting_description(key): - return m18n.n(f"global_settings_setting_{key.split('.')[-1]}") - - class SettingsConfigPanel(ConfigPanel): entity_type = "settings" save_path_tpl = SETTINGS_PATH @@ -173,6 +169,17 @@ class SettingsConfigPanel(ConfigPanel): logger.error(f"Post-change hook for setting failed : {e}") raise + def get(self, key="", mode="classic"): + result = super().get(key=key, mode=mode) + + if mode == "full": + for panel, section, option in self._iterate(): + if m18n.key_exists(self.config["i18n"] + "_" + option["id"] + "_help"): + option["help"] = m18n.n(self.config["i18n"] + "_" + option["id"] + "_help") + return self.config + + return result + def reset(self, key = "", operation_logger=None): self.filter_key = key diff --git a/src/utils/config.py b/src/utils/config.py index e265527e7..56f632b09 100644 --- a/src/utils/config.py +++ b/src/utils/config.py @@ -801,11 +801,6 @@ class Question: def _prevalidate(self): if self.value in [None, ""] and not self.optional: - import traceback - error = m18n.n("unexpected_error", error="\n" + traceback.format_exc()) - msg = m18n.n("unexpected_error", app=app_instance_name, error=error) - logger.error(msg) - operation_logger.error(msg) raise YunohostValidationError("app_argument_required", name=self.name) # we have an answer, do some post checks From 35c5015db228f8f917d5c9f0f7804021ba29efa4 Mon Sep 17 00:00:00 2001 From: Tagadda <36127788+Tagadda@users.noreply.github.com> Date: Sun, 30 Jan 2022 19:29:00 +0000 Subject: [PATCH 03/34] Update locales --- locales/en.json | 10 +++------- src/settings.py | 2 +- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/locales/en.json b/locales/en.json index 98ca26545..e4e14772c 100644 --- a/locales/en.json +++ b/locales/en.json @@ -367,13 +367,6 @@ "firewall_reload_failed": "Could not reload the firewall", "firewall_reloaded": "Firewall reloaded", "firewall_rules_cmd_failed": "Some firewall rule commands have failed. More info in log.", - "global_settings_bad_choice_for_enum": "Bad choice for setting {setting}, received '{choice}', but available choices are: {available_choices}", - "global_settings_bad_type_for_setting": "Bad type for setting {setting}, received {received_type}, expected {expected_type}", - "global_settings_cant_open_settings": "Could not open settings file, reason: {reason}", - "global_settings_cant_serialize_settings": "Could not serialize settings data, reason: {reason}", - "global_settings_cant_write_settings": "Could not save settings file, reason: {reason}", - "global_settings_key_doesnt_exists": "The key '{settings_key}' does not exist in the global settings, you can see all the available keys by running 'yunohost settings list'", - "global_settings_reset_success": "Previous settings now backed up to {path}", "global_settings_setting_admin_strength": "Admin password strength", "global_settings_setting_backup_compress_tar_archives": "Compress backups", "global_settings_setting_backup_compress_tar_archives_help": "When creating new backups, compress the archives (.tar.gz) instead of uncompressed archives (.tar). N.B. : enabling this option means create lighter backup archives, but the initial backup procedure will be significantly longer and heavy on CPU.", @@ -492,6 +485,9 @@ "log_user_permission_reset": "Reset permission '{}'", "log_user_permission_update": "Update accesses for permission '{}'", "log_user_update": "Update info for user '{}'", + "log_settings_set": "Apply setting '{}'", + "log_settings_reset": "Reset setting '{}'", + "log_settings_reset_all": "Reset all setting", "mail_alias_remove_failed": "Could not remove e-mail alias '{mail}'", "mail_domain_unknown": "Invalid e-mail address for domain '{domain}'. Please, use a domain administrated by this server.", "mail_forward_remove_failed": "Could not remove e-mail forwarding '{mail}'", diff --git a/src/settings.py b/src/settings.py index 89321e296..e50fd2256 100644 --- a/src/settings.py +++ b/src/settings.py @@ -215,7 +215,7 @@ class SettingsConfigPanel(ConfigPanel): logger.error(m18n.n("config_apply_failed", error=error)) raise - logger.success("Config updated as expected") + logger.success(m18n.("global_settings_reset_success")) operation_logger.success() From 6428417aa0a73de7b9c8e1900d74be8feb92a45a Mon Sep 17 00:00:00 2001 From: Tagadda <36127788+Tagadda@users.noreply.github.com> Date: Sun, 30 Jan 2022 23:05:38 +0000 Subject: [PATCH 04/34] clean unused code and a typo :D --- src/settings.py | 48 +----------------------------------------------- 1 file changed, 1 insertion(+), 47 deletions(-) diff --git a/src/settings.py b/src/settings.py index e50fd2256..a6b65b095 100644 --- a/src/settings.py +++ b/src/settings.py @@ -2,9 +2,6 @@ import os import json import subprocess -from datetime import datetime -from collections import OrderedDict - from moulinette import m18n from yunohost.utils.error import YunohostError, YunohostValidationError from yunohost.utils.config import ConfigPanel, Question @@ -17,51 +14,8 @@ from yunohost.utils.legacy import translate_legacy_settings_to_configpanel_setti logger = getActionLogger("yunohost.settings") SETTINGS_PATH = "/etc/yunohost/settings.yaml" -SETTINGS_PATH_OTHER_LOCATION = "/etc/yunohost/settings-%s.yaml" -def is_boolean(value): - TRUE = ["true", "on", "yes", "y", "1"] - FALSE = ["false", "off", "no", "n", "0"] - - """ - Ensure a string value is intended as a boolean - - Keyword arguments: - arg -- The string to check - - Returns: - (is_boolean, boolean_value) - - """ - if isinstance(value, bool): - return True, value - if value in [0, 1]: - return True, bool(value) - elif isinstance(value, str): - if str(value).lower() in TRUE + FALSE: - return True, str(value).lower() in TRUE - else: - return False, None - else: - return False, None - - -# a settings entry is in the form of: -# namespace.subnamespace.name: {type, value, default, description, [choices]} -# choices is only for enum -# the keyname can have as many subnamespace as needed but should have at least -# one level of namespace - -# description is implied from the translated strings -# the key is "global_settings_setting_%s" % key.replace(".", "_") - -# type can be: -# * bool -# * int -# * string -# * enum (in the form of a python list) - def settings_get(key="", full=False, export=False): """ Get an entry value in the settings @@ -215,7 +169,7 @@ class SettingsConfigPanel(ConfigPanel): logger.error(m18n.n("config_apply_failed", error=error)) raise - logger.success(m18n.("global_settings_reset_success")) + logger.success(m18n.n("global_settings_reset_success")) operation_logger.success() From f3349d4b3d8a3b88cc4f1236676e735a5ca5a383 Mon Sep 17 00:00:00 2001 From: Tagadda <36127788+Tagadda@users.noreply.github.com> Date: Sun, 30 Jan 2022 23:35:32 +0000 Subject: [PATCH 05/34] settings migration wip --- .../0024_global_settings_to_configpanel.py | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/migrations/0024_global_settings_to_configpanel.py diff --git a/src/migrations/0024_global_settings_to_configpanel.py b/src/migrations/0024_global_settings_to_configpanel.py new file mode 100644 index 000000000..b165b75b9 --- /dev/null +++ b/src/migrations/0024_global_settings_to_configpanel.py @@ -0,0 +1,32 @@ +import subprocess +import time + +from yunohost.utils.error import YunohostError +from moulinette.utils.log import getActionLogger + +from yunohost.tools import Migration +from yunohost.utils.legacy import LEGACY_SETTINGS, translate_legacy_settings_to_configpanel_settings +from yunohost.settings import settings_set + +logger = getActionLogger("yunohost.migration") + +SETTINGS_PATH = "/etc/yunohost/settings.json" + +class MyMigration(Migration): + + "Migrate old global settings to the new ConfigPanel global settings" + + dependencies = ["migrate_to_bullseye"] + + def run(self): + if not os.path.exists(SETTINGS_PATH): + return + + try: + old_settings = json.load(open(SETTINGS_PATH)) + except Exception as e: + raise YunohostError("global_settings_cant_open_settings", reason=e) + + for key, value in old_settings.items(): + if key in LEGACY_SETTINGS: + settings_set(key=key, value=value) From 2156fb402b560058dca4ffec87e10b26e6dffdff Mon Sep 17 00:00:00 2001 From: Tagadda <36127788+Tagadda@users.noreply.github.com> Date: Mon, 31 Jan 2022 00:57:00 +0000 Subject: [PATCH 06/34] settings migration --- locales/en.json | 4 ++-- .../0024_global_settings_to_configpanel.py | 16 +++++++++------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/locales/en.json b/locales/en.json index e4e14772c..8be16738a 100644 --- a/locales/en.json +++ b/locales/en.json @@ -485,8 +485,8 @@ "log_user_permission_reset": "Reset permission '{}'", "log_user_permission_update": "Update accesses for permission '{}'", "log_user_update": "Update info for user '{}'", - "log_settings_set": "Apply setting '{}'", - "log_settings_reset": "Reset setting '{}'", + "log_settings_set": "Apply settings", + "log_settings_reset": "Reset setting", "log_settings_reset_all": "Reset all setting", "mail_alias_remove_failed": "Could not remove e-mail alias '{mail}'", "mail_domain_unknown": "Invalid e-mail address for domain '{domain}'. Please, use a domain administrated by this server.", diff --git a/src/migrations/0024_global_settings_to_configpanel.py b/src/migrations/0024_global_settings_to_configpanel.py index b165b75b9..7283f168b 100644 --- a/src/migrations/0024_global_settings_to_configpanel.py +++ b/src/migrations/0024_global_settings_to_configpanel.py @@ -1,16 +1,16 @@ import subprocess import time +import urllib from yunohost.utils.error import YunohostError from moulinette.utils.log import getActionLogger from yunohost.tools import Migration -from yunohost.utils.legacy import LEGACY_SETTINGS, translate_legacy_settings_to_configpanel_settings from yunohost.settings import settings_set logger = getActionLogger("yunohost.migration") -SETTINGS_PATH = "/etc/yunohost/settings.json" +OLD_SETTINGS_PATH = "/etc/yunohost/settings.json" class MyMigration(Migration): @@ -19,14 +19,16 @@ class MyMigration(Migration): dependencies = ["migrate_to_bullseye"] def run(self): - if not os.path.exists(SETTINGS_PATH): + if not os.path.exists(OLD_SETTINGS_PATH): return try: - old_settings = json.load(open(SETTINGS_PATH)) + old_settings = json.load(open(OLD_SETTINGS_PATH)) except Exception as e: raise YunohostError("global_settings_cant_open_settings", reason=e) - for key, value in old_settings.items(): - if key in LEGACY_SETTINGS: - settings_set(key=key, value=value) + settings = { k: v['values'] for k,v in old_settings.items() } + + args = urllib.parse.urlencode(settings) + settings_set(args=args) + From 1d782b3a66c2ee866bee8391e40537eb37b6c050 Mon Sep 17 00:00:00 2001 From: Tagadda <36127788+Tagadda@users.noreply.github.com> Date: Mon, 14 Feb 2022 11:33:54 +0000 Subject: [PATCH 07/34] Update locales again --- locales/en.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/locales/en.json b/locales/en.json index 8be16738a..3973c1745 100644 --- a/locales/en.json +++ b/locales/en.json @@ -251,7 +251,7 @@ "diagnosis_mail_fcrdns_different_from_ehlo_domain_details": "Current reverse DNS: {rdns_domain}
Expected value: {ehlo_domain}", "diagnosis_mail_fcrdns_dns_missing": "No reverse DNS is defined in IPv{ipversion}. Some emails may fail to get delivered or may get flagged as spam.", "diagnosis_mail_fcrdns_nok_alternatives_4": "Some providers won't let you configure your reverse DNS (or their feature might be broken...). If you are experiencing issues because of this, consider the following solutions:
- Some ISP provide the alternative of using a mail server relay though it implies that the relay will be able to spy on your email traffic.
- A privacy-friendly alternative is to use a VPN *with a dedicated public IP* to bypass this kind of limits. See https://yunohost.org/#/vpn_advantage
- Or it's possible to switch to a different provider", - "diagnosis_mail_fcrdns_nok_alternatives_6": "Some providers won't let you configure your reverse DNS (or their feature might be broken...). If your reverse DNS is correctly configured for IPv4, you can try disabling the use of IPv6 when sending emails by running yunohost settings set smtp.allow_ipv6 -v off. Note: this last solution means that you won't be able to send or receive emails from the few IPv6-only servers out there.", + "diagnosis_mail_fcrdns_nok_alternatives_6": "Some providers won't let you configure your reverse DNS (or their feature might be broken...). If your reverse DNS is correctly configured for IPv4, you can try disabling the use of IPv6 when sending emails by running yunohost settings set email.smtp.smtp_allow_ipv6 -v off. Note: this last solution means that you won't be able to send or receive emails from the few IPv6-only servers out there.", "diagnosis_mail_fcrdns_nok_details": "You should first try to configure the reverse DNS with {ehlo_domain} in your internet router interface or your hosting provider interface. (Some hosting provider may require you to send them a support ticket for this).", "diagnosis_mail_fcrdns_ok": "Your reverse DNS is correctly configured!", "diagnosis_mail_outgoing_port_25_blocked": "The SMTP mail server cannot send emails to other servers because outgoing port 25 is blocked in IPv{ipversion}.", @@ -288,8 +288,8 @@ "diagnosis_services_bad_status_tip": "You can try to restart the service, and if it doesn't work, have a look at the service logs in the webadmin (from the command line, you can do this with yunohost service restart {service} and yunohost service log {service}).", "diagnosis_services_conf_broken": "Configuration is broken for service {service}!", "diagnosis_services_running": "Service {service} is running!", - "diagnosis_sshd_config_inconsistent": "It looks like the SSH port was manually modified in /etc/ssh/sshd_config. Since YunoHost 4.2, a new global setting 'security.ssh.port' is available to avoid manually editing the configuration.", - "diagnosis_sshd_config_inconsistent_details": "Please run yunohost settings set security.ssh.port -v YOUR_SSH_PORT to define the SSH port, and check yunohost tools regen-conf ssh --dry-run --with-diff and yunohost tools regen-conf ssh --force to reset your conf to the YunoHost recommendation.", + "diagnosis_sshd_config_inconsistent": "It looks like the SSH port was manually modified in /etc/ssh/sshd_config. Since YunoHost 4.2, a new global setting 'security.ssh.ssh_port' is available to avoid manually editing the configuration.", + "diagnosis_sshd_config_inconsistent_details": "Please run yunohost settings set security.ssh.ssh_port -v YOUR_SSH_PORT to define the SSH port, and check yunohost tools regen-conf ssh --dry-run --with-diff and yunohost tools regen-conf ssh --force to reset your conf to the YunoHost recommendation.", "diagnosis_sshd_config_insecure": "The SSH configuration appears to have been manually modified, and is insecure because it contains no 'AllowGroups' or 'AllowUsers' directive to limit access to authorized users.", "diagnosis_swap_none": "The system has no swap at all. You should consider adding at least {recommended} of swap to avoid situations where the system runs out of memory.", "diagnosis_swap_notsomuch": "The system has only {total} swap. You should consider having at least {recommended} to avoid situations where the system runs out of memory.", From eb747cc15e90436d3d0a1a3765b067287c39ba3d Mon Sep 17 00:00:00 2001 From: Tagadda <36127788+Tagadda@users.noreply.github.com> Date: Mon, 14 Feb 2022 11:37:13 +0000 Subject: [PATCH 08/34] Search and replace old settings, first pass --- conf/ssh/sshd_config | 4 ++-- hooks/conf_regen/03-ssh | 8 ++++---- hooks/conf_regen/15-nginx | 12 ++++++------ hooks/conf_regen/25-dovecot | 2 +- hooks/conf_regen/52-fail2ban | 2 +- maintenance/missing_i18n_keys.py | 2 +- src/backup.py | 2 +- src/diagnosers/24-mail.py | 2 +- src/diagnosers/70-regenconf.py | 2 +- 9 files changed, 18 insertions(+), 18 deletions(-) diff --git a/conf/ssh/sshd_config b/conf/ssh/sshd_config index b6d4111ee..eaa0c7380 100644 --- a/conf/ssh/sshd_config +++ b/conf/ssh/sshd_config @@ -3,7 +3,7 @@ Protocol 2 # PLEASE: if you wish to change the ssh port properly in YunoHost, use this command: -# yunohost settings set security.ssh.port -v +# yunohost settings set security.ssh.ssh_port -v Port {{ port }} {% if ipv6_enabled == "true" %}ListenAddress ::{% endif %} @@ -56,7 +56,7 @@ ChallengeResponseAuthentication no UsePAM yes # PLEASE: if you wish to force everybody to authenticate using ssh keys, run this command: -# yunohost settings set security.ssh.password_authentication -v no +# yunohost settings set security.ssh.ssh_password_authentication -v no {% if password_authentication == "False" %} PasswordAuthentication no {% else %} diff --git a/hooks/conf_regen/03-ssh b/hooks/conf_regen/03-ssh index 9a7f5ce4d..eb548d4f4 100755 --- a/hooks/conf_regen/03-ssh +++ b/hooks/conf_regen/03-ssh @@ -15,14 +15,14 @@ do_pre_regen() { ssh_keys=$(ls /etc/ssh/ssh_host_{ed25519,rsa,ecdsa}_key 2>/dev/null || true) # Support legacy setting (this setting might be disabled by a user during a migration) - if [[ "$(yunohost settings get 'service.ssh.allow_deprecated_dsa_hostkey')" == "True" ]]; then + if [[ "$(yunohost settings get 'security.ssh.ssh_allow_deprecated_dsa_hostkey')" == "True" ]]; then ssh_keys="$ssh_keys $(ls /etc/ssh/ssh_host_dsa_key 2>/dev/null || true)" fi # Support different strategy for security configurations - export compatibility="$(yunohost settings get 'security.ssh.compatibility')" - export port="$(yunohost settings get 'security.ssh.port')" - export password_authentication="$(yunohost settings get 'security.ssh.password_authentication')" + export compatibility="$(yunohost settings get 'security.ssh.ssh_compatibility')" + export port="$(yunohost settings get 'security.ssh.ssh_port')" + export password_authentication="$(yunohost settings get 'security.ssh.ssh_password_authentication')" export ssh_keys export ipv6_enabled ynh_render_template "sshd_config" "${pending_dir}/etc/ssh/sshd_config" diff --git a/hooks/conf_regen/15-nginx b/hooks/conf_regen/15-nginx index c1d943681..482784d8d 100755 --- a/hooks/conf_regen/15-nginx +++ b/hooks/conf_regen/15-nginx @@ -56,7 +56,7 @@ do_pre_regen() { # install / update plain conf files cp plain/* "$nginx_conf_dir" # remove the panel overlay if this is specified in settings - panel_overlay=$(yunohost settings get 'ssowat.panel_overlay.enabled') + panel_overlay=$(yunohost settings get 'misc.ssowat.ssowat_panel_overlay_enabled') if [ "$panel_overlay" == "false" ] || [ "$panel_overlay" == "False" ]; then echo "#" >"${nginx_conf_dir}/yunohost_panel.conf.inc" fi @@ -65,9 +65,9 @@ do_pre_regen() { main_domain=$(cat /etc/yunohost/current_host) # Support different strategy for security configurations - export redirect_to_https="$(yunohost settings get 'security.nginx.redirect_to_https')" - export compatibility="$(yunohost settings get 'security.nginx.compatibility')" - export experimental="$(yunohost settings get 'security.experimental.enabled')" + export redirect_to_https="$(yunohost settings get 'security.nginx.nginx_redirect_to_https')" + export compatibility="$(yunohost settings get 'security.nginx.nginx_compatibility')" + export experimental="$(yunohost settings get 'security.experimental.security_experimental_enabled')" ynh_render_template "security.conf.inc" "${nginx_conf_dir}/security.conf.inc" cert_status=$(yunohost domain cert status --json) @@ -92,9 +92,9 @@ do_pre_regen() { done - export webadmin_allowlist_enabled=$(yunohost settings get security.webadmin.allowlist.enabled) + export webadmin_allowlist_enabled=$(yunohost settings get security.webadmin.webadmin_allowlist_enabled) if [ "$webadmin_allowlist_enabled" == "True" ]; then - export webadmin_allowlist=$(yunohost settings get security.webadmin.allowlist) + export webadmin_allowlist=$(yunohost settings get security.webadmin.webadmin_allowlist) fi ynh_render_template "yunohost_admin.conf.inc" "${nginx_conf_dir}/yunohost_admin.conf.inc" ynh_render_template "yunohost_api.conf.inc" "${nginx_conf_dir}/yunohost_api.conf.inc" diff --git a/hooks/conf_regen/25-dovecot b/hooks/conf_regen/25-dovecot index 37c73b6d8..da7e0fa75 100755 --- a/hooks/conf_regen/25-dovecot +++ b/hooks/conf_regen/25-dovecot @@ -16,7 +16,7 @@ do_pre_regen() { cp dovecot-ldap.conf "${dovecot_dir}/dovecot-ldap.conf" cp dovecot.sieve "${dovecot_dir}/global_script/dovecot.sieve" - export pop3_enabled="$(yunohost settings get 'pop3.enabled')" + export pop3_enabled="$(yunohost settings get 'email.pop3.pop3_enabled')" export main_domain=$(cat /etc/yunohost/current_host) export domain_list="$YNH_DOMAINS" diff --git a/hooks/conf_regen/52-fail2ban b/hooks/conf_regen/52-fail2ban index 8129e977d..8ef20f979 100755 --- a/hooks/conf_regen/52-fail2ban +++ b/hooks/conf_regen/52-fail2ban @@ -16,7 +16,7 @@ do_pre_regen() { cp yunohost.conf "${fail2ban_dir}/filter.d/yunohost.conf" cp jail.conf "${fail2ban_dir}/jail.conf" - export ssh_port="$(yunohost settings get 'security.ssh.port')" + export ssh_port="$(yunohost settings get 'security.ssh.ssh_port')" ynh_render_template "yunohost-jails.conf" "${fail2ban_dir}/jail.d/yunohost-jails.conf" } diff --git a/maintenance/missing_i18n_keys.py b/maintenance/missing_i18n_keys.py index 3dbca8027..817c73c61 100644 --- a/maintenance/missing_i18n_keys.py +++ b/maintenance/missing_i18n_keys.py @@ -100,7 +100,7 @@ def find_expected_string_keys(): yield m # Global settings descriptions - # Will be on a line like : ("service.ssh.allow_deprecated_dsa_hostkey", {"type": "bool", ... + # Will be on a line like : ("security.ssh.ssh_allow_deprecated_dsa_hostkey", {"type": "bool", ... p5 = re.compile(r" \(\n*\s*[\"\'](\w[\w\.]+)[\"\'],") content = open(ROOT + "src/settings.py").read() for m in ( diff --git a/src/backup.py b/src/backup.py index bba60b895..10b876244 100644 --- a/src/backup.py +++ b/src/backup.py @@ -1928,7 +1928,7 @@ class TarBackupMethod(BackupMethod): def _archive_file(self): if isinstance(self.manager, BackupManager) and settings_get( - "backup.compress_tar_archives" + "misc.backup.backup_compress_tar_archives" ): return os.path.join(self.repo, self.name + ".tar.gz") diff --git a/src/diagnosers/24-mail.py b/src/diagnosers/24-mail.py index 7fe7a08db..4b370a2b4 100644 --- a/src/diagnosers/24-mail.py +++ b/src/diagnosers/24-mail.py @@ -291,7 +291,7 @@ class MyDiagnoser(Diagnoser): if global_ipv4: outgoing_ips.append(global_ipv4) - if settings_get("smtp.allow_ipv6"): + if settings_get("email.smtp.smtp_allow_ipv6"): ipv6 = Diagnoser.get_cached_report("ip", {"test": "ipv6"}) or {} if ipv6.get("status") == "SUCCESS": outgoing_ipversions.append(6) diff --git a/src/diagnosers/70-regenconf.py b/src/diagnosers/70-regenconf.py index 591f883a4..787fb257d 100644 --- a/src/diagnosers/70-regenconf.py +++ b/src/diagnosers/70-regenconf.py @@ -53,7 +53,7 @@ class MyDiagnoser(Diagnoser): ) # Check consistency between actual ssh port in sshd_config vs. setting - ssh_port_setting = settings_get("security.ssh.port") + ssh_port_setting = settings_get("security.ssh.ssh_port") ssh_port_line = re.findall( r"\bPort *([0-9]{2,5})\b", read_file("/etc/ssh/sshd_config") ) From f0bf8dd1fdfe923d7c39a85b679f728f731b3df4 Mon Sep 17 00:00:00 2001 From: Tagadda <36127788+Tagadda@users.noreply.github.com> Date: Mon, 14 Feb 2022 12:24:43 +0000 Subject: [PATCH 09/34] settings: use email.smtp.smtp_relay_enabled --- conf/postfix/main.cf | 4 ++-- hooks/conf_regen/19-postfix | 16 +++++++++------- .../0024_global_settings_to_configpanel.py | 6 ++++-- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/conf/postfix/main.cf b/conf/postfix/main.cf index 3e53714d0..13b68cafa 100644 --- a/conf/postfix/main.cf +++ b/conf/postfix/main.cf @@ -81,7 +81,7 @@ alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases mydomain = {{ main_domain }} mydestination = localhost -{% if relay_host == "" %} +{% if relay_enabled != "True" %} relayhost = {% else %} relayhost = [{{ relay_host }}]:{{ relay_port }} @@ -198,7 +198,7 @@ smtpd_client_recipient_rate_limit=150 # and after to send spam disable_vrfy_command = yes -{% if relay_user != "" %} +{% if relay_enabled == "True" %} # Relay email through an other smtp account # enable SASL authentication smtp_sasl_auth_enable = yes diff --git a/hooks/conf_regen/19-postfix b/hooks/conf_regen/19-postfix index 177ea23e9..8a767c404 100755 --- a/hooks/conf_regen/19-postfix +++ b/hooks/conf_regen/19-postfix @@ -22,17 +22,19 @@ do_pre_regen() { main_domain=$(cat /etc/yunohost/current_host) # Support different strategy for security configurations - export compatibility="$(yunohost settings get 'security.postfix.compatibility')" + export compatibility="$(yunohost settings get 'security.postfix.postfix_compatibility')" # Add possibility to specify a relay # Could be useful with some isp with no 25 port open or more complex setup export relay_port="" export relay_user="" - export relay_host="$(yunohost settings get 'smtp.relay.host')" - if [ -n "${relay_host}" ]; then - relay_port="$(yunohost settings get 'smtp.relay.port')" - relay_user="$(yunohost settings get 'smtp.relay.user')" - relay_password="$(yunohost settings get 'smtp.relay.password')" + export relay_host="" + export relay_enabled="$(yunohost settings get 'email.smtp.smtp_relay_enabled')" + if [ "${relay_enabled}" == "True" ]; then + relay_host="$(yunohost settings get 'email.smtp.smtp_relay_host')" + relay_port="$(yunohost settings get 'email.smtp.smtp_relay_port')" + relay_user="$(yunohost settings get 'email.smtp.smtp_relay_user')" + relay_password="$(yunohost settings get 'email.smtp.smtp_relay_password')" # Avoid to display "Relay account paswword" to other users touch ${postfix_dir}/sasl_passwd @@ -54,7 +56,7 @@ do_pre_regen() { >"${default_dir}/postsrsd" # adapt it for IPv4-only hosts - ipv6="$(yunohost settings get 'smtp.allow_ipv6')" + ipv6="$(yunohost settings get 'email.smtp.smtp_allow_ipv6')" if [ "$ipv6" == "False" ] || [ ! -f /proc/net/if_inet6 ]; then sed -i \ 's/ \[::ffff:127.0.0.0\]\/104 \[::1\]\/128//g' \ diff --git a/src/migrations/0024_global_settings_to_configpanel.py b/src/migrations/0024_global_settings_to_configpanel.py index 7283f168b..977e1349f 100644 --- a/src/migrations/0024_global_settings_to_configpanel.py +++ b/src/migrations/0024_global_settings_to_configpanel.py @@ -28,7 +28,9 @@ class MyMigration(Migration): raise YunohostError("global_settings_cant_open_settings", reason=e) settings = { k: v['values'] for k,v in old_settings.items() } - + + if settings.get('smtp.relay.host') != "": + settings['email.smtp.smtp_relay_enabled'] == "True" + args = urllib.parse.urlencode(settings) settings_set(args=args) - From 133ba3f14f3c90dddafbcd457b99c1950ee6c700 Mon Sep 17 00:00:00 2001 From: Tagadda <36127788+Tagadda@users.noreply.github.com> Date: Mon, 14 Feb 2022 12:25:19 +0000 Subject: [PATCH 10/34] settings: backup settings.yml --- hooks/backup/20-conf_ynh_settings | 2 +- hooks/restore/20-conf_ynh_settings | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hooks/backup/20-conf_ynh_settings b/hooks/backup/20-conf_ynh_settings index 76ab0aaca..0820978e7 100644 --- a/hooks/backup/20-conf_ynh_settings +++ b/hooks/backup/20-conf_ynh_settings @@ -13,6 +13,6 @@ backup_dir="${1}/conf/ynh" ynh_backup "/etc/yunohost/firewall.yml" "${backup_dir}/firewall.yml" ynh_backup "/etc/yunohost/current_host" "${backup_dir}/current_host" [ ! -d "/etc/yunohost/domains" ] || ynh_backup "/etc/yunohost/domains" "${backup_dir}/domains" -[ ! -e "/etc/yunohost/settings.json" ] || ynh_backup "/etc/yunohost/settings.json" "${backup_dir}/settings.json" +[ ! -e "/etc/yunohost/settings.yml" ] || ynh_backup "/etc/yunohost/settings.yml" "${backup_dir}/settings.yml" [ ! -d "/etc/yunohost/dyndns" ] || ynh_backup "/etc/yunohost/dyndns" "${backup_dir}/dyndns" [ ! -d "/etc/dkim" ] || ynh_backup "/etc/dkim" "${backup_dir}/dkim" diff --git a/hooks/restore/20-conf_ynh_settings b/hooks/restore/20-conf_ynh_settings index 2d731bd54..aba2b7a46 100644 --- a/hooks/restore/20-conf_ynh_settings +++ b/hooks/restore/20-conf_ynh_settings @@ -3,6 +3,6 @@ backup_dir="$1/conf/ynh" cp -a "${backup_dir}/current_host" /etc/yunohost/current_host cp -a "${backup_dir}/firewall.yml" /etc/yunohost/firewall.yml [ ! -d "${backup_dir}/domains" ] || cp -a "${backup_dir}/domains" /etc/yunohost/domains -[ ! -e "${backup_dir}/settings.json" ] || cp -a "${backup_dir}/settings.json" "/etc/yunohost/settings.json" +[ ! -e "${backup_dir}/settings.yml" ] || cp -a "${backup_dir}/settings.yml" "/etc/yunohost/settings.yml" [ ! -d "${backup_dir}/dyndns" ] || cp -raT "${backup_dir}/dyndns" "/etc/yunohost/dyndns" [ ! -d "${backup_dir}/dkim" ] || cp -raT "${backup_dir}/dkim" "/etc/dkim" From 6563ebb1ca147f0160e60f2e1f1d42715f55e483 Mon Sep 17 00:00:00 2001 From: Tagadda <36127788+Tagadda@users.noreply.github.com> Date: Mon, 14 Feb 2022 12:25:58 +0000 Subject: [PATCH 11/34] typo --- src/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/settings.py b/src/settings.py index a6b65b095..45c077fa3 100644 --- a/src/settings.py +++ b/src/settings.py @@ -13,7 +13,7 @@ from yunohost.utils.legacy import translate_legacy_settings_to_configpanel_setti logger = getActionLogger("yunohost.settings") -SETTINGS_PATH = "/etc/yunohost/settings.yaml" +SETTINGS_PATH = "/etc/yunohost/settings.yml" def settings_get(key="", full=False, export=False): From 2bf3fed6e6cd04ef66065b964abff10999a5a5f5 Mon Sep 17 00:00:00 2001 From: Tagadda <36127788+Tagadda@users.noreply.github.com> Date: Mon, 14 Feb 2022 12:26:54 +0000 Subject: [PATCH 12/34] settings: password stength...what could go wrong ? --- src/utils/password.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/utils/password.py b/src/utils/password.py index 5b8372962..26f7adad7 100644 --- a/src/utils/password.py +++ b/src/utils/password.py @@ -25,6 +25,8 @@ import json import string import subprocess +from yunohost.settings import settings_get + SMALL_PWD_LIST = [ "yunohost", "olinuxino", @@ -58,7 +60,7 @@ class PasswordValidator: The profile shall be either "user" or "admin" and will correspond to a validation strength - defined via the setting "security.password..strength" + defined via the setting "security.password._strength" """ self.profile = profile @@ -67,9 +69,10 @@ class PasswordValidator: # from settings.py because this file is also meant to be # use as a script by ssowat. # (or at least that's my understanding -- Alex) - settings = json.load(open("/etc/yunohost/settings.json", "r")) - setting_key = "security.password." + profile + ".strength" - self.validation_strength = int(settings[setting_key]["value"]) + # Meh... I'll try to use settings_get() anyway... What could go + # wrong ? And who even change password from SSOwat ? -- Tagada + setting_key = "security.password." + profile + "_strength" + self.validation_strength = settings_get(setting_key) except Exception: # Fallback to default value if we can't fetch settings for some reason self.validation_strength = 1 From fbadceb72a5fb745fd26d1f914857c0f2d90d127 Mon Sep 17 00:00:00 2001 From: Tagadda <36127788+Tagadda@users.noreply.github.com> Date: Mon, 14 Feb 2022 12:27:28 +0000 Subject: [PATCH 13/34] settings: use True and False for booleans --- share/config_settings.toml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/share/config_settings.toml b/share/config_settings.toml index 1b2a59bc4..4274658c5 100644 --- a/share/config_settings.toml +++ b/share/config_settings.toml @@ -26,16 +26,22 @@ name = "Security" [security.ssh.ssh_password_authentication] type = "boolean" + yes = "True" + no = "False" default = "false" [security.ssh.ssh_allow_deprecated_dsa_hostkey] type = "boolean" + yes = "True" + no = "False" default = "false" [security.nginx] name = "NGINX" [security.nginx.nginx_redirect_to_https] type = "boolean" + yes = "True" + no = "False" default = "true" [security.nginx.nginx_compatibility] @@ -54,6 +60,8 @@ name = "Security" name = "Webadmin" [security.webadmin.webadmin_allowlist_enabled] type = "boolean" + yes = "True" + no = "False" default = "false" [security.webadmin.webadmin_allowlist] @@ -66,6 +74,8 @@ name = "Security" name = "Experimental" [security.experimental.security_experimental_enabled] type = "boolean" + yes = "True" + no = "False" default = "false" @@ -75,16 +85,22 @@ name = "Email" name = "POP3" [email.pop3.pop3_enabled] type = "boolean" + yes = "True" + no = "False" default = "false" [email.smtp] name = "SMTP" [email.smtp.smtp_allow_ipv6] type = "boolean" + yes = "True" + no = "False" default = "true" [email.smtp.smtp_relay_enabled] type = "boolean" + yes = "True" + no = "False" default = "false" [email.smtp.smtp_relay_host] @@ -116,10 +132,14 @@ name = "Other" name = "SSOwat" [misc.ssowat.ssowat_panel_overlay_enabled] type = "boolean" + yes = "True" + no = "False" default = "true" [misc.backup] name = "Backup" [misc.backup.backup_compress_tar_archives] type = "boolean" + yes = "True" + no = "False" default = "false" From 0bad639b3dea0634cb5dfc270fc9567088ad8a02 Mon Sep 17 00:00:00 2001 From: Tagadda <36127788+Tagadda@users.noreply.github.com> Date: Tue, 15 Feb 2022 22:21:00 +0000 Subject: [PATCH 14/34] migration wip --- src/migrations/0024_global_settings_to_configpanel.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/migrations/0024_global_settings_to_configpanel.py b/src/migrations/0024_global_settings_to_configpanel.py index 977e1349f..bb232ab94 100644 --- a/src/migrations/0024_global_settings_to_configpanel.py +++ b/src/migrations/0024_global_settings_to_configpanel.py @@ -1,12 +1,15 @@ import subprocess import time import urllib +import os +import json from yunohost.utils.error import YunohostError from moulinette.utils.log import getActionLogger from yunohost.tools import Migration from yunohost.settings import settings_set +from yunohost.utils.legacy import translate_legacy_settings_to_configpanel_settings logger = getActionLogger("yunohost.migration") @@ -27,10 +30,10 @@ class MyMigration(Migration): except Exception as e: raise YunohostError("global_settings_cant_open_settings", reason=e) - settings = { k: v['values'] for k,v in old_settings.items() } + settings = { translate_legacy_settings_to_configpanel_settings(k): v['value'] for k,v in old_settings.items() } - if settings.get('smtp.relay.host') != "": - settings['email.smtp.smtp_relay_enabled'] == "True" + if settings.get('email.smtp.smtp_relay_host') != "": + settings['email.smtp.smtp_relay_enabled'] = "True" args = urllib.parse.urlencode(settings) settings_set(args=args) From 2d92c93af155283cf16b251ca083cf1128126a03 Mon Sep 17 00:00:00 2001 From: Tagadda <36127788+Tagadda@users.noreply.github.com> Date: Wed, 16 Feb 2022 12:18:16 +0000 Subject: [PATCH 15/34] settings: use the yml when necessary --- .../0024_global_settings_to_configpanel.py | 13 +++++++++---- src/utils/password.py | 9 +++------ 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/migrations/0024_global_settings_to_configpanel.py b/src/migrations/0024_global_settings_to_configpanel.py index bb232ab94..25339a47c 100644 --- a/src/migrations/0024_global_settings_to_configpanel.py +++ b/src/migrations/0024_global_settings_to_configpanel.py @@ -2,10 +2,13 @@ import subprocess import time import urllib import os -import json from yunohost.utils.error import YunohostError from moulinette.utils.log import getActionLogger +from moulinette.utils.filesystem import ( + read_json, + write_to_yaml +) from yunohost.tools import Migration from yunohost.settings import settings_set @@ -13,6 +16,7 @@ from yunohost.utils.legacy import translate_legacy_settings_to_configpanel_setti logger = getActionLogger("yunohost.migration") +SETTINGS_PATH = "/etc/yunohost/settings.yml" OLD_SETTINGS_PATH = "/etc/yunohost/settings.json" class MyMigration(Migration): @@ -26,7 +30,7 @@ class MyMigration(Migration): return try: - old_settings = json.load(open(OLD_SETTINGS_PATH)) + old_settings = read_json(OLD_SETTINGS_PATH) except Exception as e: raise YunohostError("global_settings_cant_open_settings", reason=e) @@ -35,5 +39,6 @@ class MyMigration(Migration): if settings.get('email.smtp.smtp_relay_host') != "": settings['email.smtp.smtp_relay_enabled'] = "True" - args = urllib.parse.urlencode(settings) - settings_set(args=args) + # Here we don't use settings_set() from settings.py to prevent + # Questions to be asked when one run the migration from CLI. + write_to_yaml(SETTINGS_PATH, settings) diff --git a/src/utils/password.py b/src/utils/password.py index 26f7adad7..7b6c864ee 100644 --- a/src/utils/password.py +++ b/src/utils/password.py @@ -21,11 +21,9 @@ import sys import os -import json import string import subprocess - -from yunohost.settings import settings_get +import yaml SMALL_PWD_LIST = [ "yunohost", @@ -69,10 +67,9 @@ class PasswordValidator: # from settings.py because this file is also meant to be # use as a script by ssowat. # (or at least that's my understanding -- Alex) - # Meh... I'll try to use settings_get() anyway... What could go - # wrong ? And who even change password from SSOwat ? -- Tagada + settings = yaml.load(open("/etc/yunohost/settings.yml", "r")) setting_key = "security.password." + profile + "_strength" - self.validation_strength = settings_get(setting_key) + self.validation_strength = int(settings[setting_key]) except Exception: # Fallback to default value if we can't fetch settings for some reason self.validation_strength = 1 From dcb01a249bbc613a46cf14fadaac21068e2134b3 Mon Sep 17 00:00:00 2001 From: Tagadda <36127788+Tagadda@users.noreply.github.com> Date: Thu, 17 Feb 2022 22:07:25 +0000 Subject: [PATCH 16/34] wip unit tests --- src/tests/test_settings.py | 225 ++++++++++++++++++++----------------- 1 file changed, 122 insertions(+), 103 deletions(-) diff --git a/src/tests/test_settings.py b/src/tests/test_settings.py index 1a9063e56..5072f406a 100644 --- a/src/tests/test_settings.py +++ b/src/tests/test_settings.py @@ -10,66 +10,94 @@ import yunohost.settings as settings from yunohost.settings import ( settings_get, settings_list, - _get_settings, settings_set, settings_reset, settings_reset_all, - SETTINGS_PATH_OTHER_LOCATION, - SETTINGS_PATH, - DEFAULTS, + SETTINGS_PATH ) -DEFAULTS["example.bool"] = {"type": "bool", "default": True} -DEFAULTS["example.int"] = {"type": "int", "default": 42} -DEFAULTS["example.string"] = {"type": "string", "default": "yolo swag"} -DEFAULTS["example.enum"] = {"type": "enum", "default": "a", "choices": ["a", "b", "c"]} +EXAMPLE_SETTINGS = """ +[example] + [example.example] + [example.example.boolean] + type = "boolean" + yes = "True" + no = "False" + default = "True" + [example.example.number] + type = "number" + default = "42" + + [example.example.string] + type = "string" + default = "yolo swag" + + [example.example.select] + type = "select" + choices = ["a", "b", "c"] + default = "a" +""" def setup_function(function): - os.system("mv /etc/yunohost/settings.json /etc/yunohost/settings.json.saved") + os.system("mv /etc/yunohost/settings.yml /etc/yunohost/settings.yml.saved") + os.system("cp /usr/share/yunohost/config_settings.toml /usr/share/yunohost/config_settings.toml.saved") + with open("/usr/share/yunohost/config_settings.py", "a") as file: + file.write(EXAMPLE_SETTINGS) def teardown_function(function): - os.system("mv /etc/yunohost/settings.json.saved /etc/yunohost/settings.json") - for filename in glob.glob("/etc/yunohost/settings-*.json"): - os.remove(filename) + os.system("mv /etc/yunohost/settings.yml.saved /etc/yunohost/settings.yml") + os.system("mv /usr/share/yunohost/config_settings.toml.saved /usr/share/yunohost/config_settings.toml") -def monkey_get_setting_description(key): - return "Dummy %s setting" % key.split(".")[-1] - - -settings._get_setting_description = monkey_get_setting_description +def _get_settings(): + return yaml.load(open(SETTINGS_PATH, "r")) def test_settings_get_bool(): - assert settings_get("example.bool") + assert settings_get("example.example.boolean") -def test_settings_get_full_bool(): - assert settings_get("example.bool", True) == { - "type": "bool", - "value": True, - "default": True, - "description": "Dummy bool setting", - } +# FIXME : Testing this doesn't make sense ? This should be tested in a test_config.py ? +#def test_settings_get_full_bool(): +# assert settings_get("example.example.boolean", True) == {'version': '1.0', +# 'i18n': 'global_settings_setting', +# 'panels': [{'services': [], +# 'actions': {'apply': {'en': 'Apply'}}, +# 'sections': [{'name': '', +# 'services': [], +# 'optional': True, +# 'options': [{'type': 'boolean', +# 'yes': 'True', +# 'no': 'False', +# 'default': 'True', +# 'id': 'boolean', +# 'name': 'boolean', +# 'optional': True, +# 'current_value': 'True', +# 'ask': 'global_settings_setting_boolean', +# 'choices': []}], +# 'id': 'example'}], +# 'id': 'example', +# 'name': {'en': 'Example'}}]} def test_settings_get_int(): - assert settings_get("example.int") == 42 + assert settings_get("example.example.number") == 42 -def test_settings_get_full_int(): - assert settings_get("example.int", True) == { - "type": "int", - "value": 42, - "default": 42, - "description": "Dummy int setting", - } +#def test_settings_get_full_int(): +# assert settings_get("example.int", True) == { +# "type": "int", +# "value": 42, +# "default": 42, +# "description": "Dummy int setting", +# } def test_settings_get_string(): - assert settings_get("example.string") == "yolo swag" + assert settings_get("example.example.string") == "yolo swag" def test_settings_get_full_string(): @@ -86,94 +114,85 @@ def test_settings_get_enum(): def test_settings_get_full_enum(): - assert settings_get("example.enum", True) == { - "type": "enum", - "value": "a", - "default": "a", - "description": "Dummy enum setting", - "choices": ["a", "b", "c"], - } + option = settings_get("example.enum", full=True).get('panels')[0].get('sections')[0].get('options')[0] + assert option.get('choices') == ["a", "b", "c"] def test_settings_get_doesnt_exists(): - with pytest.raises(YunohostError): + with pytest.raises(YunohostValidationError): settings_get("doesnt.exists") -def test_settings_list(): - assert settings_list() == _get_settings() +#def test_settings_list(): +# assert settings_list() == _get_settings() def test_settings_set(): - settings_set("example.bool", False) - assert settings_get("example.bool") is False + settings_set("example.example.boolean", False) + assert settings_get("example.example.boolean") is False - settings_set("example.bool", "on") - assert settings_get("example.bool") is True + settings_set("example.example.boolean", "on") + assert settings_get("example.example.boolean") is True def test_settings_set_int(): - settings_set("example.int", 21) - assert settings_get("example.int") == 21 + settings_set("example.example.number", 21) + assert settings_get("example.example.number") == 21 def test_settings_set_enum(): - settings_set("example.enum", "c") - assert settings_get("example.enum") == "c" + settings_set("example.example.select", "c") + assert settings_get("example.example.select") == "c" def test_settings_set_doesexit(): - with pytest.raises(YunohostError): + with pytest.raises(YunohostValidationError): settings_set("doesnt.exist", True) def test_settings_set_bad_type_bool(): with pytest.raises(YunohostError): - settings_set("example.bool", 42) + settings_set("example.example.boolean", 42) with pytest.raises(YunohostError): - settings_set("example.bool", "pouet") + settings_set("example.example.boolean", "pouet") def test_settings_set_bad_type_int(): with pytest.raises(YunohostError): - settings_set("example.int", True) + settings_set("example.example.number", True) with pytest.raises(YunohostError): - settings_set("example.int", "pouet") + settings_set("example.example.number", "pouet") def test_settings_set_bad_type_string(): with pytest.raises(YunohostError): - settings_set("example.string", True) + settings_set("example.example.string", True) with pytest.raises(YunohostError): - settings_set("example.string", 42) + settings_set("example.example.string", 42) def test_settings_set_bad_value_enum(): with pytest.raises(YunohostError): - settings_set("example.enum", True) + settings_set("example.example.select", True) with pytest.raises(YunohostError): - settings_set("example.enum", "e") + settings_set("example.example.select", "e") with pytest.raises(YunohostError): - settings_set("example.enum", 42) + settings_set("example.example.select", 42) with pytest.raises(YunohostError): - settings_set("example.enum", "pouet") + settings_set("example.example.select", "pouet") def test_settings_list_modified(): - settings_set("example.int", 21) - assert settings_list()["example.int"] == { - "default": 42, - "description": "Dummy int setting", - "type": "int", - "value": 21, - } + settings_set("example.example.number", 21) + assert settings_list()["number"] == 42 def test_reset(): - settings_set("example.int", 21) - assert settings_get("example.int") == 21 - settings_reset("example.int") - assert settings_get("example.int") == settings_get("example.int", True)["default"] + option = settings_get("example.example.number", full=True).get('panels')[0].get('sections')[0].get('options')[0] + settings_set("example.example.number", 21) + assert settings_get("number") == 21 + settings_reset("example.example.number") + assert settings_get("example.example.number") == option["default"] def test_settings_reset_doesexit(): @@ -183,10 +202,10 @@ def test_settings_reset_doesexit(): def test_reset_all(): settings_before = settings_list() - settings_set("example.bool", False) - settings_set("example.int", 21) - settings_set("example.string", "pif paf pouf") - settings_set("example.enum", "c") + settings_set("example.example.boolean", False) + settings_set("example.example.number", 21) + settings_set("example.example.string", "pif paf pouf") + settings_set("example.example.select", "c") assert settings_before != settings_list() settings_reset_all() if settings_before != settings_list(): @@ -194,30 +213,30 @@ def test_reset_all(): assert settings_before[i] == settings_list()[i] -def test_reset_all_backup(): - settings_before = settings_list() - settings_set("example.bool", False) - settings_set("example.int", 21) - settings_set("example.string", "pif paf pouf") - settings_set("example.enum", "c") - settings_after_modification = settings_list() - assert settings_before != settings_after_modification - old_settings_backup_path = settings_reset_all()["old_settings_backup_path"] - - for i in settings_after_modification: - del settings_after_modification[i]["description"] - - assert settings_after_modification == json.load(open(old_settings_backup_path, "r")) +#def test_reset_all_backup(): +# settings_before = settings_list() +# settings_set("example.bool", False) +# settings_set("example.int", 21) +# settings_set("example.string", "pif paf pouf") +# settings_set("example.enum", "c") +# settings_after_modification = settings_list() +# assert settings_before != settings_after_modification +# old_settings_backup_path = settings_reset_all()["old_settings_backup_path"] +# +# for i in settings_after_modification: +# del settings_after_modification[i]["description"] +# +# assert settings_after_modification == json.load(open(old_settings_backup_path, "r")) -def test_unknown_keys(): - unknown_settings_path = SETTINGS_PATH_OTHER_LOCATION % "unknown" - unknown_setting = { - "unkown_key": {"value": 42, "default": 31, "type": "int"}, - } - open(SETTINGS_PATH, "w").write(json.dumps(unknown_setting)) - - # stimulate a write - settings_reset_all() - - assert unknown_setting == json.load(open(unknown_settings_path, "r")) +#def test_unknown_keys(): +# unknown_settings_path = SETTINGS_PATH_OTHER_LOCATION % "unknown" +# unknown_setting = { +# "unkown_key": {"value": 42, "default": 31, "type": "int"}, +# } +# open(SETTINGS_PATH, "w").write(json.dumps(unknown_setting)) +# +# # stimulate a write +# settings_reset_all() +# +# assert unknown_setting == json.load(open(unknown_settings_path, "r")) From 607a22de00da3bb4c756cb4c541e2c7954c4570c Mon Sep 17 00:00:00 2001 From: Tagadda <36127788+Tagadda@users.noreply.github.com> Date: Fri, 25 Feb 2022 15:51:14 +0000 Subject: [PATCH 17/34] use moulinette instead of os.system, os.chown, os.chmod --- src/certificate.py | 9 +++------ src/diagnosers/21-web.py | 6 +++--- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/certificate.py b/src/certificate.py index 2a9fb4ce9..05c4efaa6 100644 --- a/src/certificate.py +++ b/src/certificate.py @@ -34,7 +34,7 @@ from datetime import datetime from moulinette import m18n from moulinette.utils.log import getActionLogger -from moulinette.utils.filesystem import read_file +from moulinette.utils.filesystem import read_file, chown, chmod from yunohost.vendor.acme_tiny.acme_tiny import get_crt as sign_certificate from yunohost.utils.error import YunohostError, YunohostValidationError @@ -719,11 +719,8 @@ def _generate_key(destination_path): def _set_permissions(path, user, group, permissions): - uid = pwd.getpwnam(user).pw_uid - gid = grp.getgrnam(group).gr_gid - - os.chown(path, uid, gid) - os.chmod(path, permissions) + chown(path, user, group) + chmod(path, permissions) def _enable_certificate(domain, new_cert_folder): diff --git a/src/diagnosers/21-web.py b/src/diagnosers/21-web.py index 584505ad1..5106e26cc 100644 --- a/src/diagnosers/21-web.py +++ b/src/diagnosers/21-web.py @@ -5,7 +5,7 @@ import random import requests from typing import List -from moulinette.utils.filesystem import read_file +from moulinette.utils.filesystem import read_file, mkdir, rm from yunohost.diagnosis import Diagnoser from yunohost.domain import domain_list @@ -46,8 +46,8 @@ class MyDiagnoser(Diagnoser): domains_to_check.append(domain) self.nonce = "".join(random.choice("0123456789abcedf") for i in range(16)) - os.system("rm -rf /tmp/.well-known/ynh-diagnosis/") - os.system("mkdir -p /tmp/.well-known/ynh-diagnosis/") + rm("/tmp/.well-known/ynh-diagnosis/", recursive=True, force=True) + mkdir("/tmp/.well-known/ynh-diagnosis/", parents=True) os.system("touch /tmp/.well-known/ynh-diagnosis/%s" % self.nonce) if not domains_to_check: From c4d188200c4a24dfc0d43700da3f3cfff9a661d9 Mon Sep 17 00:00:00 2001 From: Tagadda <36127788+Tagadda@users.noreply.github.com> Date: Sat, 26 Feb 2022 20:21:49 +0000 Subject: [PATCH 18/34] wip tests --- locales/en.json | 1 + share/config_settings.toml | 20 ++++++------ src/settings.py | 13 ++++++-- src/tests/test_settings.py | 63 +++++++++++++++++++++++++------------- 4 files changed, 62 insertions(+), 35 deletions(-) diff --git a/locales/en.json b/locales/en.json index 3973c1745..68174d49f 100644 --- a/locales/en.json +++ b/locales/en.json @@ -367,6 +367,7 @@ "firewall_reload_failed": "Could not reload the firewall", "firewall_reloaded": "Firewall reloaded", "firewall_rules_cmd_failed": "Some firewall rule commands have failed. More info in log.", + "global_settings_reset_success": "Reset global settings", "global_settings_setting_admin_strength": "Admin password strength", "global_settings_setting_backup_compress_tar_archives": "Compress backups", "global_settings_setting_backup_compress_tar_archives_help": "When creating new backups, compress the archives (.tar.gz) instead of uncompressed archives (.tar). N.B. : enabling this option means create lighter backup archives, but the initial backup procedure will be significantly longer and heavy on CPU.", diff --git a/share/config_settings.toml b/share/config_settings.toml index 4274658c5..f13072704 100644 --- a/share/config_settings.toml +++ b/share/config_settings.toml @@ -28,13 +28,13 @@ name = "Security" type = "boolean" yes = "True" no = "False" - default = "false" + default = "False" [security.ssh.ssh_allow_deprecated_dsa_hostkey] type = "boolean" yes = "True" no = "False" - default = "false" + default = "False" [security.nginx] name = "NGINX" @@ -42,7 +42,7 @@ name = "Security" type = "boolean" yes = "True" no = "False" - default = "true" + default = "True" [security.nginx.nginx_compatibility] type = "select" @@ -62,7 +62,7 @@ name = "Security" type = "boolean" yes = "True" no = "False" - default = "false" + default = "False" [security.webadmin.webadmin_allowlist] type = "tags" @@ -76,7 +76,7 @@ name = "Security" type = "boolean" yes = "True" no = "False" - default = "false" + default = "False" [email] @@ -87,7 +87,7 @@ name = "Email" type = "boolean" yes = "True" no = "False" - default = "false" + default = "False" [email.smtp] name = "SMTP" @@ -95,13 +95,13 @@ name = "Email" type = "boolean" yes = "True" no = "False" - default = "true" + default = "True" [email.smtp.smtp_relay_enabled] type = "boolean" yes = "True" no = "False" - default = "false" + default = "False" [email.smtp.smtp_relay_host] type = "string" @@ -134,7 +134,7 @@ name = "Other" type = "boolean" yes = "True" no = "False" - default = "true" + default = "True" [misc.backup] name = "Backup" @@ -142,4 +142,4 @@ name = "Other" type = "boolean" yes = "True" no = "False" - default = "false" + default = "False" diff --git a/src/settings.py b/src/settings.py index 45c077fa3..d15ab371f 100644 --- a/src/settings.py +++ b/src/settings.py @@ -15,6 +15,11 @@ logger = getActionLogger("yunohost.settings") SETTINGS_PATH = "/etc/yunohost/settings.yml" +BOOLEANS = { + "True": True, + "False": False, +} + def settings_get(key="", full=False, export=False): """ @@ -37,9 +42,7 @@ def settings_get(key="", full=False, export=False): mode = "classic" if mode == "classic" and key == "": - raise YunohostValidationError( - "Missing key" - ) + raise YunohostValidationError("Missing key", raw_msg=True) settings = SettingsConfigPanel() key = translate_legacy_settings_to_configpanel_settings(key) @@ -132,6 +135,10 @@ class SettingsConfigPanel(ConfigPanel): option["help"] = m18n.n(self.config["i18n"] + "_" + option["id"] + "_help") return self.config + # Dirty hack to let settings_get() to work from a python script + if isinstance(result, str) and result in BOOLEANS: + result = BOOLEANS[result] + return result def reset(self, key = "", operation_logger=None): diff --git a/src/tests/test_settings.py b/src/tests/test_settings.py index 5072f406a..d65ccc77c 100644 --- a/src/tests/test_settings.py +++ b/src/tests/test_settings.py @@ -3,7 +3,8 @@ import json import glob import pytest -from yunohost.utils.error import YunohostError +import moulinette +from yunohost.utils.error import YunohostError, YunohostValidationError import yunohost.settings as settings @@ -27,7 +28,7 @@ EXAMPLE_SETTINGS = """ [example.example.number] type = "number" - default = "42" + default = 42 [example.example.string] type = "string" @@ -40,17 +41,35 @@ EXAMPLE_SETTINGS = """ """ def setup_function(function): - os.system("mv /etc/yunohost/settings.yml /etc/yunohost/settings.yml.saved") + # Backup settings + if os.path.exists(SETTINGS_PATH): + os.system(f"mv {SETTINGS_PATH} {SETTINGS_PATH}.saved") + # Add example settings to config panel os.system("cp /usr/share/yunohost/config_settings.toml /usr/share/yunohost/config_settings.toml.saved") - with open("/usr/share/yunohost/config_settings.py", "a") as file: + with open("/usr/share/yunohost/config_settings.toml", "a") as file: file.write(EXAMPLE_SETTINGS) def teardown_function(function): - os.system("mv /etc/yunohost/settings.yml.saved /etc/yunohost/settings.yml") + if os.path.exists("/etc/yunohost/settings.yml.saved"): + os.system(f"mv {SETTINGS_PATH}.saved {SETTINGS_PATH}") + elif os.path.exists(SETTINGS_PATH): + os.remove(SETTINGS_PATH) os.system("mv /usr/share/yunohost/config_settings.toml.saved /usr/share/yunohost/config_settings.toml") +old_translate = moulinette.core.Translator.translate + +def _monkeypatch_translator(self, key, *args, **kwargs): + + if key.startswith("global_settings_setting_"): + return f"Dummy translation for {key}" + + return old_translate(self, key, *args, **kwargs) + +moulinette.core.Translator.translate = _monkeypatch_translator + + def _get_settings(): return yaml.load(open(SETTINGS_PATH, "r")) @@ -59,7 +78,7 @@ def test_settings_get_bool(): assert settings_get("example.example.boolean") -# FIXME : Testing this doesn't make sense ? This should be tested in a test_config.py ? +# FIXME : Testing this doesn't make sense ? This should be tested in test_config.py ? #def test_settings_get_full_bool(): # assert settings_get("example.example.boolean", True) == {'version': '1.0', # 'i18n': 'global_settings_setting', @@ -100,22 +119,22 @@ def test_settings_get_string(): assert settings_get("example.example.string") == "yolo swag" -def test_settings_get_full_string(): - assert settings_get("example.string", True) == { - "type": "string", - "value": "yolo swag", - "default": "yolo swag", - "description": "Dummy string setting", - } +#def test_settings_get_full_string(): +# assert settings_get("example.example.string", True) == { +# "type": "string", +# "value": "yolo swag", +# "default": "yolo swag", +# "description": "Dummy string setting", +# } -def test_settings_get_enum(): - assert settings_get("example.enum") == "a" +def test_settings_get_select(): + assert settings_get("example.example.select") == "a" -def test_settings_get_full_enum(): - option = settings_get("example.enum", full=True).get('panels')[0].get('sections')[0].get('options')[0] - assert option.get('choices') == ["a", "b", "c"] +#def test_settings_get_full_select(): +# option = settings_get("example.example.select", full=True).get('panels')[0].get('sections')[0].get('options')[0] +# assert option.get('choices') == ["a", "b", "c"] def test_settings_get_doesnt_exists(): @@ -140,7 +159,7 @@ def test_settings_set_int(): assert settings_get("example.example.number") == 21 -def test_settings_set_enum(): +def test_settings_set_select(): settings_set("example.example.select", "c") assert settings_get("example.example.select") == "c" @@ -171,7 +190,7 @@ def test_settings_set_bad_type_string(): settings_set("example.example.string", 42) -def test_settings_set_bad_value_enum(): +def test_settings_set_bad_value_select(): with pytest.raises(YunohostError): settings_set("example.example.select", True) with pytest.raises(YunohostError): @@ -184,7 +203,7 @@ def test_settings_set_bad_value_enum(): def test_settings_list_modified(): settings_set("example.example.number", 21) - assert settings_list()["number"] == 42 + assert settings_list()["number"] == 21 def test_reset(): @@ -218,7 +237,7 @@ def test_reset_all(): # settings_set("example.bool", False) # settings_set("example.int", 21) # settings_set("example.string", "pif paf pouf") -# settings_set("example.enum", "c") +# settings_set("example.select", "c") # settings_after_modification = settings_list() # assert settings_before != settings_after_modification # old_settings_backup_path = settings_reset_all()["old_settings_backup_path"] From 7c97045fb662bdaf068c852f8ff3941241058c26 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Thu, 4 Aug 2022 18:20:02 +0200 Subject: [PATCH 19/34] More explicit setting description --- locales/en.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/locales/en.json b/locales/en.json index 68174d49f..9042ab063 100644 --- a/locales/en.json +++ b/locales/en.json @@ -371,13 +371,13 @@ "global_settings_setting_admin_strength": "Admin password strength", "global_settings_setting_backup_compress_tar_archives": "Compress backups", "global_settings_setting_backup_compress_tar_archives_help": "When creating new backups, compress the archives (.tar.gz) instead of uncompressed archives (.tar). N.B. : enabling this option means create lighter backup archives, but the initial backup procedure will be significantly longer and heavy on CPU.", - "global_settings_setting_nginx_compatibility": "Compatibility", + "global_settings_setting_nginx_compatibility": "NGINX Compatibility", "global_settings_setting_nginx_compatibility_help": "Compatibility vs. security tradeoff for the web server NGINX. Affects the ciphers (and other security-related aspects)", "global_settings_setting_nginx_redirect_to_https": "Force HTTPS", "global_settings_setting_nginx_redirect_to_https_help": "Redirect HTTP requests to HTTPs by default (DO NOT TURN OFF unless you really know what you're doing!)", "global_settings_setting_pop3_enabled": "Enable POP3", "global_settings_setting_pop3_enabled_help": "Enable the POP3 protocol for the mail server", - "global_settings_setting_postfix_compatibility": "Compatibility", + "global_settings_setting_postfix_compatibility": "Postfix Compatibility", "global_settings_setting_postfix_compatibility_help": "Compatibility vs. security tradeoff for the Postfix server. Affects the ciphers (and other security-related aspects)", "global_settings_setting_security_experimental_enabled": "Experimental security features", "global_settings_setting_security_experimental_enabled_help": "Enable experimental security features (don't enable this if you don't know what you're doing!)", @@ -391,7 +391,7 @@ "global_settings_setting_smtp_relay_user": "Relay user", "global_settings_setting_ssh_allow_deprecated_dsa_hostkey": "Allow DSA hostkey", "global_settings_setting_ssh_allow_deprecated_dsa_hostkey_help": "Allow the use of (deprecated) DSA hostkey for the SSH daemon configuration", - "global_settings_setting_ssh_compatibility": "Compatibility", + "global_settings_setting_ssh_compatibility": "SSH Compatibility", "global_settings_setting_ssh_compatibility_help": "Compatibility vs. security tradeoff for the SSH server. Affects the ciphers (and other security-related aspects)", "global_settings_setting_ssh_password_authentication": "Password authentication", "global_settings_setting_ssh_password_authentication_help": "Allow password authentication for SSH", From 5494ce5def9d9e705a9f442085804f65abb602d4 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Thu, 4 Aug 2022 18:21:24 +0200 Subject: [PATCH 20/34] Simplify code --- locales/en.json | 2 +- src/settings.py | 8 ++------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/locales/en.json b/locales/en.json index 9042ab063..d0eb794c3 100644 --- a/locales/en.json +++ b/locales/en.json @@ -488,7 +488,7 @@ "log_user_update": "Update info for user '{}'", "log_settings_set": "Apply settings", "log_settings_reset": "Reset setting", - "log_settings_reset_all": "Reset all setting", + "log_settings_reset_all": "Reset all settings", "mail_alias_remove_failed": "Could not remove e-mail alias '{mail}'", "mail_domain_unknown": "Invalid e-mail address for domain '{domain}'. Please, use a domain administrated by this server.", "mail_forward_remove_failed": "Could not remove e-mail forwarding '{mail}'", diff --git a/src/settings.py b/src/settings.py index d15ab371f..a5a0d3625 100644 --- a/src/settings.py +++ b/src/settings.py @@ -15,10 +15,6 @@ logger = getActionLogger("yunohost.settings") SETTINGS_PATH = "/etc/yunohost/settings.yml" -BOOLEANS = { - "True": True, - "False": False, -} def settings_get(key="", full=False, export=False): @@ -136,8 +132,8 @@ class SettingsConfigPanel(ConfigPanel): return self.config # Dirty hack to let settings_get() to work from a python script - if isinstance(result, str) and result in BOOLEANS: - result = BOOLEANS[result] + if isinstance(result, str) and result in ["True", "False"]: + result = bool(result) return result From 91b56187438bee4b1a5f574738e5d844f74ca276 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Thu, 4 Aug 2022 18:24:47 +0200 Subject: [PATCH 21/34] Set 'entity_type' as 'global' for global config panel --- src/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/settings.py b/src/settings.py index a5a0d3625..a4fbedae6 100644 --- a/src/settings.py +++ b/src/settings.py @@ -102,7 +102,7 @@ def settings_reset_all(operation_logger): class SettingsConfigPanel(ConfigPanel): - entity_type = "settings" + entity_type = "global" save_path_tpl = SETTINGS_PATH save_mode = "diff" From 5d685cebf054fd793117c628d8ca4393d02d4759 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Thu, 4 Aug 2022 18:32:27 +0200 Subject: [PATCH 22/34] Unused imports, black --- .../0024_global_settings_to_configpanel.py | 21 ++++++++----------- 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/src/migrations/0024_global_settings_to_configpanel.py b/src/migrations/0024_global_settings_to_configpanel.py index 25339a47c..d23e7fa9c 100644 --- a/src/migrations/0024_global_settings_to_configpanel.py +++ b/src/migrations/0024_global_settings_to_configpanel.py @@ -1,17 +1,10 @@ -import subprocess -import time -import urllib import os from yunohost.utils.error import YunohostError from moulinette.utils.log import getActionLogger -from moulinette.utils.filesystem import ( - read_json, - write_to_yaml -) +from moulinette.utils.filesystem import read_json, write_to_yaml from yunohost.tools import Migration -from yunohost.settings import settings_set from yunohost.utils.legacy import translate_legacy_settings_to_configpanel_settings logger = getActionLogger("yunohost.migration") @@ -19,6 +12,7 @@ logger = getActionLogger("yunohost.migration") SETTINGS_PATH = "/etc/yunohost/settings.yml" OLD_SETTINGS_PATH = "/etc/yunohost/settings.json" + class MyMigration(Migration): "Migrate old global settings to the new ConfigPanel global settings" @@ -34,11 +28,14 @@ class MyMigration(Migration): except Exception as e: raise YunohostError("global_settings_cant_open_settings", reason=e) - settings = { translate_legacy_settings_to_configpanel_settings(k): v['value'] for k,v in old_settings.items() } + settings = { + translate_legacy_settings_to_configpanel_settings(k): v["value"] + for k, v in old_settings.items() + } - if settings.get('email.smtp.smtp_relay_host') != "": - settings['email.smtp.smtp_relay_enabled'] = "True" + if settings.get("email.smtp.smtp_relay_host") != "": + settings["email.smtp.smtp_relay_enabled"] = "True" - # Here we don't use settings_set() from settings.py to prevent + # Here we don't use settings_set() from settings.py to prevent # Questions to be asked when one run the migration from CLI. write_to_yaml(SETTINGS_PATH, settings) From 76238db4bbc00e239e1e6ec6eb25551308ed3903 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Thu, 4 Aug 2022 19:09:47 +0200 Subject: [PATCH 23/34] config_settings.toml -> config_global.toml --- share/{config_settings.toml => config_global.toml} | 0 src/domain.py | 1 - src/tests/test_settings.py | 8 +++----- 3 files changed, 3 insertions(+), 6 deletions(-) rename share/{config_settings.toml => config_global.toml} (100%) diff --git a/share/config_settings.toml b/share/config_global.toml similarity index 100% rename from share/config_settings.toml rename to share/config_global.toml diff --git a/src/domain.py b/src/domain.py index e40b4f03c..d86760e84 100644 --- a/src/domain.py +++ b/src/domain.py @@ -44,7 +44,6 @@ from yunohost.log import is_unit_operation logger = getActionLogger("yunohost.domain") -DOMAIN_CONFIG_PATH = "/usr/share/yunohost/config_domain.toml" DOMAIN_SETTINGS_DIR = "/etc/yunohost/domains" # Lazy dev caching to avoid re-query ldap every time we need the domain list diff --git a/src/tests/test_settings.py b/src/tests/test_settings.py index d65ccc77c..4ce54b5cb 100644 --- a/src/tests/test_settings.py +++ b/src/tests/test_settings.py @@ -6,8 +6,6 @@ import pytest import moulinette from yunohost.utils.error import YunohostError, YunohostValidationError -import yunohost.settings as settings - from yunohost.settings import ( settings_get, settings_list, @@ -45,8 +43,8 @@ def setup_function(function): if os.path.exists(SETTINGS_PATH): os.system(f"mv {SETTINGS_PATH} {SETTINGS_PATH}.saved") # Add example settings to config panel - os.system("cp /usr/share/yunohost/config_settings.toml /usr/share/yunohost/config_settings.toml.saved") - with open("/usr/share/yunohost/config_settings.toml", "a") as file: + os.system("cp /usr/share/yunohost/config_global.toml /usr/share/yunohost/config_global.toml.saved") + with open("/usr/share/yunohost/config_global.toml", "a") as file: file.write(EXAMPLE_SETTINGS) @@ -55,7 +53,7 @@ def teardown_function(function): os.system(f"mv {SETTINGS_PATH}.saved {SETTINGS_PATH}") elif os.path.exists(SETTINGS_PATH): os.remove(SETTINGS_PATH) - os.system("mv /usr/share/yunohost/config_settings.toml.saved /usr/share/yunohost/config_settings.toml") + os.system("mv /usr/share/yunohost/config_global.toml.saved /usr/share/yunohost/config_global.toml") old_translate = moulinette.core.Translator.translate From ce0362eef8ff77def20a61e8408ce0470321417c Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Thu, 4 Aug 2022 19:10:52 +0200 Subject: [PATCH 24/34] black settings.py --- src/settings.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/settings.py b/src/settings.py index a4fbedae6..29c7f64c0 100644 --- a/src/settings.py +++ b/src/settings.py @@ -16,7 +16,6 @@ logger = getActionLogger("yunohost.settings") SETTINGS_PATH = "/etc/yunohost/settings.yml" - def settings_get(key="", full=False, export=False): """ Get an entry value in the settings @@ -50,7 +49,7 @@ def settings_list(full=False, export=True): List all entries of the settings """ - + if full: export = False @@ -106,18 +105,20 @@ class SettingsConfigPanel(ConfigPanel): save_path_tpl = SETTINGS_PATH save_mode = "diff" - def __init__( - self, config_path=None, save_path=None, creation=False - ): + def __init__(self, config_path=None, save_path=None, creation=False): super().__init__("settings") def _apply(self): super()._apply() - settings = { k: v for k, v in self.future_values.items() if self.values.get(k) != v } + settings = { + k: v for k, v in self.future_values.items() if self.values.get(k) != v + } for setting_name, value in settings.items(): try: - trigger_post_change_hook(setting_name, self.values.get(setting_name), value) + trigger_post_change_hook( + setting_name, self.values.get(setting_name), value + ) except Exception as e: logger.error(f"Post-change hook for setting failed : {e}") raise @@ -128,7 +129,9 @@ class SettingsConfigPanel(ConfigPanel): if mode == "full": for panel, section, option in self._iterate(): if m18n.key_exists(self.config["i18n"] + "_" + option["id"] + "_help"): - option["help"] = m18n.n(self.config["i18n"] + "_" + option["id"] + "_help") + option["help"] = m18n.n( + self.config["i18n"] + "_" + option["id"] + "_help" + ) return self.config # Dirty hack to let settings_get() to work from a python script @@ -137,7 +140,7 @@ class SettingsConfigPanel(ConfigPanel): return result - def reset(self, key = "", operation_logger=None): + def reset(self, key="", operation_logger=None): self.filter_key = key # Read config panel toml From 9482373e906c36191cadb8daf650b91dbf64133d Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Thu, 4 Aug 2022 19:26:41 +0200 Subject: [PATCH 25/34] Fix tests for global settings --- src/tests/test_settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tests/test_settings.py b/src/tests/test_settings.py index 4ce54b5cb..cb2132780 100644 --- a/src/tests/test_settings.py +++ b/src/tests/test_settings.py @@ -207,7 +207,7 @@ def test_settings_list_modified(): def test_reset(): option = settings_get("example.example.number", full=True).get('panels')[0].get('sections')[0].get('options')[0] settings_set("example.example.number", 21) - assert settings_get("number") == 21 + assert settings_get("example.example.number") == 21 settings_reset("example.example.number") assert settings_get("example.example.number") == option["default"] From 7f45b3890ebf9b48461984f94bf29fe71c57bf62 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Thu, 4 Aug 2022 22:03:06 +0200 Subject: [PATCH 26/34] =?UTF-8?q?Fix=20logic=20bug,=20bool('False')=20in?= =?UTF-8?q?=20fact=20equals=20True=20=C3=A9=5F=C3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/settings.py b/src/settings.py index 29c7f64c0..ed9df9761 100644 --- a/src/settings.py +++ b/src/settings.py @@ -136,7 +136,7 @@ class SettingsConfigPanel(ConfigPanel): # Dirty hack to let settings_get() to work from a python script if isinstance(result, str) and result in ["True", "False"]: - result = bool(result) + result = bool(result == "True") return result From 73ed031661c282c148cf061b2fcfbae7a422c137 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Thu, 4 Aug 2022 23:18:18 +0200 Subject: [PATCH 27/34] global settings: fix moar tests ... disabling the failing ones because it's apparently sort-of a feature that those work though debattable ... (though they dont when you're in interactive mode ..) --- src/certificate.py | 2 -- src/settings.py | 1 - src/tests/test_settings.py | 14 +++++++------- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/certificate.py b/src/certificate.py index 05c4efaa6..30d1587b8 100644 --- a/src/certificate.py +++ b/src/certificate.py @@ -25,8 +25,6 @@ import os import sys import shutil -import pwd -import grp import subprocess import glob diff --git a/src/settings.py b/src/settings.py index ed9df9761..17fe97bf5 100644 --- a/src/settings.py +++ b/src/settings.py @@ -1,5 +1,4 @@ import os -import json import subprocess from moulinette import m18n diff --git a/src/tests/test_settings.py b/src/tests/test_settings.py index cb2132780..e943c41f5 100644 --- a/src/tests/test_settings.py +++ b/src/tests/test_settings.py @@ -175,17 +175,17 @@ def test_settings_set_bad_type_bool(): def test_settings_set_bad_type_int(): - with pytest.raises(YunohostError): - settings_set("example.example.number", True) +# with pytest.raises(YunohostError): +# settings_set("example.example.number", True) with pytest.raises(YunohostError): settings_set("example.example.number", "pouet") -def test_settings_set_bad_type_string(): - with pytest.raises(YunohostError): - settings_set("example.example.string", True) - with pytest.raises(YunohostError): - settings_set("example.example.string", 42) +#def test_settings_set_bad_type_string(): +# with pytest.raises(YunohostError): +# settings_set("example.example.string", True) +# with pytest.raises(YunohostError): +# settings_set("example.example.string", 42) def test_settings_set_bad_value_select(): From fded695b451452b2322da7198b76289c6229284f Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Fri, 5 Aug 2022 14:09:14 +0200 Subject: [PATCH 28/34] Adapt script for missing i18n key following the change in setting nomenclature --- locales/en.json | 5 ++-- maintenance/missing_i18n_keys.py | 28 +++++++++++++------ .../0024_global_settings_to_configpanel.py | 2 +- 3 files changed, 22 insertions(+), 13 deletions(-) diff --git a/locales/en.json b/locales/en.json index d0eb794c3..c86a57553 100644 --- a/locales/en.json +++ b/locales/en.json @@ -402,8 +402,6 @@ "global_settings_setting_webadmin_allowlist_help": "IP adresses allowed to access the webadmin.", "global_settings_setting_webadmin_allowlist_enabled": "Enable Webadmin IP allowlist", "global_settings_setting_webadmin_allowlist_enabled_help": "Allow only some IPs to access the webadmin.", - "global_settings_unknown_setting_from_settings_file": "Unknown key in settings: '{setting_key}', discard it and save it in /etc/yunohost/settings-unknown.json", - "global_settings_unknown_type": "Unexpected situation, the setting {setting} appears to have the type {unknown_type} but it is not a type supported by the system.", "good_practices_about_admin_password": "You are now about to define a new administration password. The password should be at least 8 characters long—though it is good practice to use a longer password (i.e. a passphrase) and/or to use a variation of characters (uppercase, lowercase, digits and special characters).", "good_practices_about_user_password": "You are now about to define a new user password. The password should be at least 8 characters long—though it is good practice to use a longer password (i.e. a passphrase) and/or to a variation of characters (uppercase, lowercase, digits and special characters).", "group_already_exist": "Group {group} already exists", @@ -516,6 +514,7 @@ "migration_description_0021_migrate_to_bullseye": "Upgrade the system to Debian Bullseye and YunoHost 11.x", "migration_description_0022_php73_to_php74_pools": "Migrate php7.3-fpm 'pool' conf files to php7.4", "migration_description_0023_postgresql_11_to_13": "Migrate databases from PostgreSQL 11 to 13", + "migration_description_0024_global_settings_to_configpanel": "Migrate legacy global settings nomenclature to the new, modern nomenclature", "migration_ldap_backup_before_migration": "Creating a backup of LDAP database and apps settings prior to the actual migration.", "migration_ldap_can_not_backup_before_migration": "The backup of the system could not be completed before the migration failed. Error: {error}", "migration_ldap_migration_failed_trying_to_rollback": "Could not migrate... trying to roll back the system.", @@ -696,4 +695,4 @@ "yunohost_installing": "Installing YunoHost...", "yunohost_not_installed": "YunoHost is not correctly installed. Please run 'yunohost tools postinstall'", "yunohost_postinstall_end_tip": "The post-install completed! To finalize your setup, please consider:\n - adding a first user through the 'Users' section of the webadmin (or 'yunohost user create ' in command-line);\n - diagnose potential issues through the 'Diagnosis' section of the webadmin (or 'yunohost diagnosis run' in command-line);\n - reading the 'Finalizing your setup' and 'Getting to know YunoHost' parts in the admin documentation: https://yunohost.org/admindoc." -} \ No newline at end of file +} diff --git a/maintenance/missing_i18n_keys.py b/maintenance/missing_i18n_keys.py index 817c73c61..e152710ef 100644 --- a/maintenance/missing_i18n_keys.py +++ b/maintenance/missing_i18n_keys.py @@ -99,15 +99,6 @@ def find_expected_string_keys(): for m in ("log_" + match for match in p4.findall(content)): yield m - # Global settings descriptions - # Will be on a line like : ("security.ssh.ssh_allow_deprecated_dsa_hostkey", {"type": "bool", ... - p5 = re.compile(r" \(\n*\s*[\"\'](\w[\w\.]+)[\"\'],") - content = open(ROOT + "src/settings.py").read() - for m in ( - "global_settings_setting_" + s.replace(".", "_") for s in p5.findall(content) - ): - yield m - # Keys for the actionmap ... for category in yaml.safe_load(open(ROOT + "share/actionsmap.yml")).values(): if "actions" not in category.keys(): @@ -143,6 +134,7 @@ def find_expected_string_keys(): for key in registrars[registrar].keys(): yield f"domain_config_{key}" + # Domain config panel domain_config = toml.load(open(ROOT + "share/config_domain.toml")) for panel in domain_config.values(): if not isinstance(panel, dict): @@ -155,6 +147,24 @@ def find_expected_string_keys(): continue yield f"domain_config_{key}" + # Global settings + global_config = toml.load(open(ROOT + "share/config_global.toml")) + # Boring hard-coding because there's no simple other way idk + settings_without_help_key = ["admin_strength", "smtp_relay_host", "smtp_relay_password", "smtp_relay_port", "smtp_relay_user", "ssh_port", "ssowat_panel_overlay_enabled", "user_strength"] + + for panel in global_config.values(): + if not isinstance(panel, dict): + continue + for section in panel.values(): + if not isinstance(section, dict): + continue + for key, values in section.items(): + if not isinstance(values, dict): + continue + yield f"global_settings_setting_{key}" + if key not in settings_without_help_key: + yield f"global_settings_setting_{key}_help" + ############################################################################### # Compare keys used and keys defined # diff --git a/src/migrations/0024_global_settings_to_configpanel.py b/src/migrations/0024_global_settings_to_configpanel.py index d23e7fa9c..82b5580ae 100644 --- a/src/migrations/0024_global_settings_to_configpanel.py +++ b/src/migrations/0024_global_settings_to_configpanel.py @@ -26,7 +26,7 @@ class MyMigration(Migration): try: old_settings = read_json(OLD_SETTINGS_PATH) except Exception as e: - raise YunohostError("global_settings_cant_open_settings", reason=e) + raise YunohostError(f"Can't open setting file : {e}", raw_msg=True) settings = { translate_legacy_settings_to_configpanel_settings(k): v["value"] From ed865dd3c0b056403c4a100862e147238fed8a15 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Fri, 5 Aug 2022 15:47:13 +0200 Subject: [PATCH 29/34] global settings: various fixes --- locales/en.json | 4 +- maintenance/missing_i18n_keys.py | 2 +- share/config_global.toml | 64 ++++++++----------- .../0024_global_settings_to_configpanel.py | 6 +- src/utils/password.py | 2 +- 5 files changed, 36 insertions(+), 42 deletions(-) diff --git a/locales/en.json b/locales/en.json index c86a57553..6cfab9109 100644 --- a/locales/en.json +++ b/locales/en.json @@ -369,6 +369,7 @@ "firewall_rules_cmd_failed": "Some firewall rule commands have failed. More info in log.", "global_settings_reset_success": "Reset global settings", "global_settings_setting_admin_strength": "Admin password strength", + "global_settings_setting_admin_strength_help": "These requirements are only enforced when defining the password", "global_settings_setting_backup_compress_tar_archives": "Compress backups", "global_settings_setting_backup_compress_tar_archives_help": "When creating new backups, compress the archives (.tar.gz) instead of uncompressed archives (.tar). N.B. : enabling this option means create lighter backup archives, but the initial backup procedure will be significantly longer and heavy on CPU.", "global_settings_setting_nginx_compatibility": "NGINX Compatibility", @@ -392,12 +393,13 @@ "global_settings_setting_ssh_allow_deprecated_dsa_hostkey": "Allow DSA hostkey", "global_settings_setting_ssh_allow_deprecated_dsa_hostkey_help": "Allow the use of (deprecated) DSA hostkey for the SSH daemon configuration", "global_settings_setting_ssh_compatibility": "SSH Compatibility", - "global_settings_setting_ssh_compatibility_help": "Compatibility vs. security tradeoff for the SSH server. Affects the ciphers (and other security-related aspects)", + "global_settings_setting_ssh_compatibility_help": "Compatibility vs. security tradeoff for the SSH server. Affects the ciphers (and other security-related aspects). See https://infosec.mozilla.org/guidelines/openssh for more info.", "global_settings_setting_ssh_password_authentication": "Password authentication", "global_settings_setting_ssh_password_authentication_help": "Allow password authentication for SSH", "global_settings_setting_ssh_port": "SSH port", "global_settings_setting_ssowat_panel_overlay_enabled": "SSOwat panel overlay", "global_settings_setting_user_strength": "User password strength", + "global_settings_setting_user_strength_help": "These requirements are only enforced when defining the password", "global_settings_setting_webadmin_allowlist": "Webadmin IP allowlist", "global_settings_setting_webadmin_allowlist_help": "IP adresses allowed to access the webadmin.", "global_settings_setting_webadmin_allowlist_enabled": "Enable Webadmin IP allowlist", diff --git a/maintenance/missing_i18n_keys.py b/maintenance/missing_i18n_keys.py index e152710ef..f85b49219 100644 --- a/maintenance/missing_i18n_keys.py +++ b/maintenance/missing_i18n_keys.py @@ -150,7 +150,7 @@ def find_expected_string_keys(): # Global settings global_config = toml.load(open(ROOT + "share/config_global.toml")) # Boring hard-coding because there's no simple other way idk - settings_without_help_key = ["admin_strength", "smtp_relay_host", "smtp_relay_password", "smtp_relay_port", "smtp_relay_user", "ssh_port", "ssowat_panel_overlay_enabled", "user_strength"] + settings_without_help_key = ["smtp_relay_host", "smtp_relay_password", "smtp_relay_port", "smtp_relay_user", "ssh_port", "ssowat_panel_overlay_enabled"] for panel in global_config.values(): if not isinstance(panel, dict): diff --git a/share/config_global.toml b/share/config_global.toml index f13072704..775f02cdf 100644 --- a/share/config_global.toml +++ b/share/config_global.toml @@ -5,20 +5,30 @@ i18n = "global_settings_setting" name = "Security" [security.password] name = "Passwords" + [security.password.admin_strength] - type = "number" + type = "select" + choices.1 = "Require at least 8 chars" + choices.2 = "ditto, but also require at least one digit, one lower and one upper char" + choices.3 = "ditto, but also require at least one special char" + choices.4 = "ditto, but also require at least 12 chars" default = 1 [security.password.user_strength] - type = "number" + type = "select" + choices.1 = "Require at least 8 chars" + choices.2 = "ditto, but also require at least one digit, one lower and one upper char" + choices.3 = "ditto, but also require at least one special char" + choices.4 = "ditto, but also require at least 12 chars" default = 1 - + [security.ssh] name = "SSH" [security.ssh.ssh_compatibility] type = "select" + choices.intermediate = "Intermediate (compatible with older softwares)" + choices.modern = "Modern (recommended)" default = "modern" - choices = ["intermediate", "modern"] [security.ssh.ssh_port] type = "number" @@ -26,43 +36,37 @@ name = "Security" [security.ssh.ssh_password_authentication] type = "boolean" - yes = "True" - no = "False" - default = "False" + default = true [security.ssh.ssh_allow_deprecated_dsa_hostkey] type = "boolean" - yes = "True" - no = "False" - default = "False" + default = false [security.nginx] name = "NGINX" [security.nginx.nginx_redirect_to_https] type = "boolean" - yes = "True" - no = "False" - default = "True" + default = true [security.nginx.nginx_compatibility] type = "select" + choices.intermediate = "Intermediate (compatible with Firefox 27, Android 4.4.2, Chrome 31, Edge, IE 11, Opera 20, and Safari 9)" + choices.modern = "Modern (compatible with Firefox 63, Android 10.0, Chrome 70, Edge 75, Opera 57, and Safari 12.1)" default = "intermediate" - choices = ["intermediate", "modern"] [security.postfix] name = "Postfix" [security.postfix.postfix_compatibility] type = "select" + choices.intermediate = "Intermediate (allows TLS 1.2)" + choices.modern = "Modern (TLS 1.3 only)" default = "intermediate" - choices = ["intermediate", "modern"] [security.webadmin] name = "Webadmin" [security.webadmin.webadmin_allowlist_enabled] type = "boolean" - yes = "True" - no = "False" - default = "False" + default = false [security.webadmin.webadmin_allowlist] type = "tags" @@ -74,9 +78,7 @@ name = "Security" name = "Experimental" [security.experimental.security_experimental_enabled] type = "boolean" - yes = "True" - no = "False" - default = "False" + default = false [email] @@ -85,23 +87,17 @@ name = "Email" name = "POP3" [email.pop3.pop3_enabled] type = "boolean" - yes = "True" - no = "False" - default = "False" + default = false [email.smtp] name = "SMTP" [email.smtp.smtp_allow_ipv6] type = "boolean" - yes = "True" - no = "False" - default = "True" + default = true [email.smtp.smtp_relay_enabled] type = "boolean" - yes = "True" - no = "False" - default = "False" + default = false [email.smtp.smtp_relay_host] type = "string" @@ -132,14 +128,10 @@ name = "Other" name = "SSOwat" [misc.ssowat.ssowat_panel_overlay_enabled] type = "boolean" - yes = "True" - no = "False" - default = "True" + default = true [misc.backup] name = "Backup" [misc.backup.backup_compress_tar_archives] type = "boolean" - yes = "True" - no = "False" - default = "False" + default = false diff --git a/src/migrations/0024_global_settings_to_configpanel.py b/src/migrations/0024_global_settings_to_configpanel.py index 82b5580ae..e1d4d190b 100644 --- a/src/migrations/0024_global_settings_to_configpanel.py +++ b/src/migrations/0024_global_settings_to_configpanel.py @@ -29,12 +29,12 @@ class MyMigration(Migration): raise YunohostError(f"Can't open setting file : {e}", raw_msg=True) settings = { - translate_legacy_settings_to_configpanel_settings(k): v["value"] + translate_legacy_settings_to_configpanel_settings(k).split('.')[-1]: v["value"] for k, v in old_settings.items() } - if settings.get("email.smtp.smtp_relay_host") != "": - settings["email.smtp.smtp_relay_enabled"] = "True" + if settings.get("smtp_relay_host"): + settings["smtp_relay_enabled"] = True # Here we don't use settings_set() from settings.py to prevent # Questions to be asked when one run the migration from CLI. diff --git a/src/utils/password.py b/src/utils/password.py index 565a6aca7..42ed45ddd 100644 --- a/src/utils/password.py +++ b/src/utils/password.py @@ -86,7 +86,7 @@ class PasswordValidator: # use as a script by ssowat. # (or at least that's my understanding -- Alex) settings = yaml.load(open("/etc/yunohost/settings.yml", "r")) - setting_key = "security.password." + profile + "_strength" + setting_key = profile + "_strength" self.validation_strength = int(settings[setting_key]) except Exception: # Fallback to default value if we can't fetch settings for some reason From 03eaad4a32b56aeb108058bb809f1e3e096f25b4 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Fri, 5 Aug 2022 17:28:57 +0200 Subject: [PATCH 30/34] Rename i18n keys for global settings in translations to not loose previous work --- locales/ar.json | 8 ++++---- locales/ca.json | 21 ++++++++++----------- locales/cs.json | 18 +++++++++--------- locales/de.json | 35 +++++++++++++++++------------------ locales/eo.json | 17 ++++++++--------- locales/es.json | 35 +++++++++++++++++------------------ locales/eu.json | 33 ++++++++++++++++----------------- locales/fa.json | 29 ++++++++++++++--------------- locales/fr.json | 35 +++++++++++++++++------------------ locales/gl.json | 33 ++++++++++++++++----------------- locales/it.json | 31 +++++++++++++++---------------- locales/kab.json | 2 +- locales/nb_NO.json | 6 +++--- locales/oc.json | 15 +++++++-------- locales/ru.json | 14 +++++++------- locales/sk.json | 2 +- locales/te.json | 2 +- locales/uk.json | 33 ++++++++++++++++----------------- locales/zh_Hans.json | 23 +++++++++++------------ 19 files changed, 190 insertions(+), 202 deletions(-) diff --git a/locales/ar.json b/locales/ar.json index c440e442f..fea601e24 100644 --- a/locales/ar.json +++ b/locales/ar.json @@ -120,8 +120,6 @@ "app_upgrade_several_apps": "سوف يتم تحديث التطبيقات التالية: {apps}", "ask_new_domain": "نطاق جديد", "ask_new_path": "مسار جديد", - "global_settings_setting_security_password_admin_strength": "قوة الكلمة السرية الإدارية", - "global_settings_setting_security_password_user_strength": "قوة الكلمة السرية للمستخدم", "password_too_simple_1": "يجب أن يكون طول الكلمة السرية على الأقل 8 حروف", "already_up_to_date": "كل شيء على ما يرام. ليس هناك ما يتطلّب تحديثًا.", "service_description_slapd": "يخزّن المستخدمين والنطاقات والمعلومات المتعلقة بها", @@ -158,5 +156,7 @@ "diagnosis_description_services": "حالة الخدمات", "diagnosis_description_dnsrecords": "تسجيلات خدمة DNS", "diagnosis_description_ip": "الإتصال بالإنترنت", - "diagnosis_description_basesystem": "النظام الأساسي" -} + "diagnosis_description_basesystem": "النظام الأساسي", + "global_settings_setting_admin_strength": "قوة الكلمة السرية الإدارية", + "global_settings_setting_user_strength": "قوة الكلمة السرية للمستخدم" +} \ No newline at end of file diff --git a/locales/ca.json b/locales/ca.json index b660032d2..78dcdf119 100644 --- a/locales/ca.json +++ b/locales/ca.json @@ -155,12 +155,7 @@ "global_settings_cant_write_settings": "No s'ha pogut escriure el fitxer de configuració, raó: {reason}", "global_settings_key_doesnt_exists": "La clau « {settings_key} » no existeix en la configuració global, podeu veure totes les claus disponibles executant « yunohost settings list »", "global_settings_reset_success": "S'ha fet una còpia de seguretat de la configuració anterior a {path}", - "global_settings_setting_security_nginx_compatibility": "Solució de compromís entre compatibilitat i seguretat pel servidor web NGINX. Afecta els criptògrafs (i altres aspectes relacionats amb la seguretat)", - "global_settings_setting_security_password_admin_strength": "Robustesa de la contrasenya d'administrador", - "global_settings_setting_security_password_user_strength": "Robustesa de la contrasenya de l'usuari", - "global_settings_setting_security_ssh_compatibility": "Solució de compromís entre compatibilitat i seguretat pel servidor SSH. Afecta els criptògrafs (i altres aspectes relacionats amb la seguretat)", "global_settings_unknown_setting_from_settings_file": "Clau de configuració desconeguda: «{setting_key}», refusada i guardada a /etc/yunohost/settings-unknown.json", - "global_settings_setting_service_ssh_allow_deprecated_dsa_hostkey": "Permetre la clau d'hoste DSA (obsolet) per la configuració del servei SSH", "global_settings_unknown_type": "Situació inesperada, la configuració {setting} sembla tenir el tipus {unknown_type} però no és un tipus reconegut pel sistema.", "good_practices_about_admin_password": "Esteu a punt de definir una nova contrasenya d'administrador. La contrasenya ha de tenir un mínim de 8 caràcters; tot i que és de bona pràctica utilitzar una contrasenya més llarga (és a dir una frase de contrasenya) i/o utilitzar diferents tipus de caràcters (majúscules, minúscules, dígits i caràcters especials).", "hook_exec_failed": "No s'ha pogut executar el script: {path}", @@ -207,7 +202,6 @@ "log_tools_reboot": "Reinicia el servidor", "already_up_to_date": "No hi ha res a fer. Tot està actualitzat.", "dpkg_lock_not_available": "No es pot utilitzar aquesta comanda en aquest moment ja que sembla que un altre programa està utilitzant el lock de dpkg (el gestor de paquets del sistema)", - "global_settings_setting_security_postfix_compatibility": "Solució de compromís entre compatibilitat i seguretat pel servidor Postfix. Afecta els criptògrafs (i altres aspectes relacionats amb la seguretat)", "mail_alias_remove_failed": "No s'han pogut eliminar els àlies del correu «{mail}»", "mail_domain_unknown": "El domini «{domain}» de l'adreça de correu no és vàlid. Utilitzeu un domini administrat per aquest servidor.", "mail_forward_remove_failed": "No s'han pogut eliminar el reenviament de correu «{mail}»", @@ -471,7 +465,6 @@ "diagnosis_services_running": "El servei {service} s'està executant!", "diagnosis_services_conf_broken": "La configuració pel servei {service} està trencada!", "diagnosis_ports_needed_by": "És necessari exposar aquest port per a les funcions {category} (servei {service})", - "global_settings_setting_pop3_enabled": "Activa el protocol POP3 per al servidor de correu", "log_app_action_run": "Executa l'acció de l'aplicació «{}»", "diagnosis_never_ran_yet": "Sembla que el servidor s'ha configurat recentment i encara no hi cap informe de diagnòstic per mostrar. S'ha d'executar un diagnòstic complet primer, ja sigui des de la pàgina web d'administració o utilitzant la comanda «yunohost diagnosis run» al terminal.", "diagnosis_description_web": "Web", @@ -506,7 +499,6 @@ "diagnosis_http_hairpinning_issue": "Sembla que la vostra xarxa no té el hairpinning activat.", "diagnosis_http_nginx_conf_not_up_to_date": "La configuració NGINX d'aquest domini sembla que ha estat modificada manualment, i no deixa que YunoHost diagnostiqui si és accessible amb HTTP.", "diagnosis_http_nginx_conf_not_up_to_date_details": "Per arreglar el problema, mireu les diferències amb la línia d'ordres utilitzant yunohost tools regen-conf nginx --dry-run --with-diff i si els canvis us semblen bé els podeu fer efectius utilitzant yunohost tools regen-conf nginx --force.", - "global_settings_setting_smtp_allow_ipv6": "Permet l'ús de IPv6 per rebre i enviar correus electrònics", "diagnosis_mail_ehlo_unreachable_details": "No s'ha pogut establir una connexió amb el vostre servidor en el port 25 amb IPv{ipversion}. Sembla que el servidor no és accessible.
1. La causa més comú per aquest problema és que el port 25 no està correctament redireccionat cap al vostre servidor.
2. També us hauríeu d'assegurar que el servei postfix estigui funcionant.
3. En configuracions més complexes: assegureu-vos que que no hi hagi cap tallafoc ni reverse-proxy interferint.", "diagnosis_mail_ehlo_wrong_details": "El EHLO rebut pel servidor de diagnòstic remot amb IPv{ipversion} és diferent al domini del vostre servidor.
EHLO rebut: {wrong_ehlo}
Esperat: {right_ehlo}
La causa més habitual d'aquest problema és que el port 25 no està correctament reenviat cap al vostre servidor. També podeu comprovar que no hi hagi un tallafocs o un reverse-proxy interferint.", "diagnosis_mail_fcrdns_dns_missing": "No hi ha cap DNS invers definit per IPv{ipversion}. Alguns correus electrònics poden no entregar-se o poden ser marcats com a correu brossa.", @@ -533,8 +525,6 @@ "app_packaging_format_not_supported": "No es pot instal·lar aquesta aplicació ja que el format del paquet no és compatible amb la versió de YunoHost del sistema. Hauríeu de considerar actualitzar el sistema.", "diagnosis_dns_try_dyndns_update_force": "La configuració DNS d'aquest domini hauria de ser gestionada automàticament per YunoHost. Si aquest no és el cas, podeu intentar forçar-ne l'actualització utilitzant yunohost dyndns update --force.", "regenconf_need_to_explicitly_specify_ssh": "La configuració ssh ha estat modificada manualment, però heu d'especificar explícitament la categoria «ssh» amb --force per fer realment els canvis.", - "global_settings_setting_backup_compress_tar_archives": "Comprimir els arxius (.tar.gz) en lloc d'arxius no comprimits (.tar) al crear noves còpies de seguretat. N.B.: activar aquesta opció permet fer arxius de còpia de seguretat més lleugers, però el procés inicial de còpia de seguretat serà significativament més llarg i més exigent a nivell de CPU.", - "global_settings_setting_smtp_relay_host": "L'amfitrió de tramesa SMTP que s'ha d'utilitzar per enviar correus electrònics en lloc d'aquesta instància de YunoHost. És útil si esteu en una de les següents situacions: el port 25 està bloquejat per el vostre proveïdor d'accés a internet o proveïdor de servidor privat virtual, si teniu una IP residencial llistada a DUHL, si no podeu configurar el DNS invers o si el servidor no està directament exposat a internet i voleu utilitzar-ne un altre per enviar correus electrònics.", "unknown_main_domain_path": "Domini o ruta desconeguda per a «{app}». Heu d'especificar un domini i una ruta per a poder especificar una URL per al permís.", "show_tile_cant_be_enabled_for_regex": "No podeu activar «show_title» ara, perquè la URL per al permís «{permission}» és una expressió regular", "show_tile_cant_be_enabled_for_url_not_defined": "No podeu activar «show_title» ara, perquè primer s'ha de definir una URL per al permís «{permission}»", @@ -568,5 +558,14 @@ "diagnosis_sshd_config_inconsistent": "Sembla que el port SSH s'ha modificat manualment a /etc/ssh/sshd_config. Des de YunoHost 4.2, hi ha un nou paràmetre global «security.ssh.port» per evitar modificar manualment la configuració.", "diagnosis_sshd_config_insecure": "Sembla que la configuració SSH s'ha modificat manualment, i no es segura ha que no conté la directiva «AllowGroups» o «AllowUsers» per limitar l'accés a usuaris autoritzats.", "backup_create_size_estimation": "L'arxiu tindrà aproximadament {size} de dades.", - "app_restore_script_failed": "S'ha produït un error en el script de restauració de l'aplicació" + "app_restore_script_failed": "S'ha produït un error en el script de restauració de l'aplicació", + "global_settings_setting_backup_compress_tar_archives_help": "Comprimir els arxius (.tar.gz) en lloc d'arxius no comprimits (.tar) al crear noves còpies de seguretat. N.B.: activar aquesta opció permet fer arxius de còpia de seguretat més lleugers, però el procés inicial de còpia de seguretat serà significativament més llarg i més exigent a nivell de CPU.", + "global_settings_setting_nginx_compatibility_help": "Solució de compromís entre compatibilitat i seguretat pel servidor web NGINX. Afecta els criptògrafs (i altres aspectes relacionats amb la seguretat)", + "global_settings_setting_admin_strength": "Robustesa de la contrasenya d'administrador", + "global_settings_setting_user_strength": "Robustesa de la contrasenya de l'usuari", + "global_settings_setting_postfix_compatibility_help": "Solució de compromís entre compatibilitat i seguretat pel servidor Postfix. Afecta els criptògrafs (i altres aspectes relacionats amb la seguretat)", + "global_settings_setting_ssh_compatibility_help": "Solució de compromís entre compatibilitat i seguretat pel servidor SSH. Afecta els criptògrafs (i altres aspectes relacionats amb la seguretat)", + "global_settings_setting_ssh_allow_deprecated_dsa_hostkey_help": "Permetre la clau d'hoste DSA (obsolet) per la configuració del servei SSH", + "global_settings_setting_smtp_allow_ipv6_help": "Permet l'ús de IPv6 per rebre i enviar correus electrònics", + "global_settings_setting_smtp_relay_enabled_help": "L'amfitrió de tramesa SMTP que s'ha d'utilitzar per enviar correus electrònics en lloc d'aquesta instància de YunoHost. És útil si esteu en una de les següents situacions: el port 25 està bloquejat per el vostre proveïdor d'accés a internet o proveïdor de servidor privat virtual, si teniu una IP residencial llistada a DUHL, si no podeu configurar el DNS invers o si el servidor no està directament exposat a internet i voleu utilitzar-ne un altre per enviar correus electrònics." } \ No newline at end of file diff --git a/locales/cs.json b/locales/cs.json index 47262064e..ddc6d5f99 100644 --- a/locales/cs.json +++ b/locales/cs.json @@ -50,18 +50,18 @@ "good_practices_about_user_password": "Nyní zvolte nové heslo uživatele. Heslo by mělo být minimálně 8 znaků dlouhé, avšak je dobrou taktikou jej mít delší (např. použít více slov) a použít kombinaci znaků (velké, malé, čísla a speciální znaky).", "good_practices_about_admin_password": "Nyní zvolte nové administrační heslo. Heslo by mělo být minimálně 8 znaků dlouhé, avšak je dobrou taktikou jej mít delší (např. použít více slov) a použít kombinaci znaků (velké, malé, čísla a speciílní znaky).", "global_settings_unknown_type": "Neočekávaná situace, nastavení {setting} deklaruje typ {unknown_type} ale toto není systémem podporováno.", - "global_settings_setting_backup_compress_tar_archives": "Komprimovat nové zálohy (.tar.gz) namísto nekomprimovaných (.tar). Poznámka: povolení této volby znamená objemově menší soubory záloh, avšak zálohování bude trvat déle a bude více zatěžovat CPU.", "global_settings_setting_smtp_relay_password": "SMTP relay heslo uživatele/hostitele", "global_settings_setting_smtp_relay_user": "SMTP relay uživatelské jméno/účet", "global_settings_setting_smtp_relay_port": "SMTP relay port", - "global_settings_setting_smtp_relay_host": "Použít SMTP relay hostitele pro odesílání emailů místo této YunoHost instance. Užitečné v různých situacích: port 25 je blokován vaším ISP nebo VPS poskytovatelem, IP adresa je na blacklistu (např. DUHL), nemůžete nastavit reverzní DNS záznam nebo tento server není přímo připojen do internetu a vy chcete použít jiný server k odesílání emailů.", - "global_settings_setting_smtp_allow_ipv6": "Povolit použití IPv6 pro příjem a odesílání emailů", "global_settings_setting_ssowat_panel_overlay_enabled": "Povolit SSOwat překryvný panel", - "global_settings_setting_service_ssh_allow_deprecated_dsa_hostkey": "Povolit použití (zastaralého) DSA klíče hostitele pro konfiguraci SSH služby", "global_settings_unknown_setting_from_settings_file": "Neznámý klíč v nastavení: '{setting_key}', zrušte jej a uložte v /etc/yunohost/settings-unknown.json", - "global_settings_setting_security_ssh_port": "SSH port", - "global_settings_setting_security_postfix_compatibility": "Kompromis mezi kompatibilitou a bezpečností Postfix serveru. Ovlivní šifry a další související bezpečnostní nastavení", - "global_settings_setting_security_ssh_compatibility": "Kompromis mezi kompatibilitou a bezpečností SSH serveru. Ovlivní šifry a další související bezpečnostní nastavení", - "global_settings_setting_security_password_user_strength": "Síla uživatelského hesla", - "global_settings_setting_security_password_admin_strength": "Síla administračního hesla" + "global_settings_setting_backup_compress_tar_archives_help": "Komprimovat nové zálohy (.tar.gz) namísto nekomprimovaných (.tar). Poznámka: povolení této volby znamená objemově menší soubory záloh, avšak zálohování bude trvat déle a bude více zatěžovat CPU.", + "global_settings_setting_admin_strength": "Síla administračního hesla", + "global_settings_setting_user_strength": "Síla uživatelského hesla", + "global_settings_setting_postfix_compatibility_help": "Kompromis mezi kompatibilitou a bezpečností Postfix serveru. Ovlivní šifry a další související bezpečnostní nastavení", + "global_settings_setting_ssh_compatibility_help": "Kompromis mezi kompatibilitou a bezpečností SSH serveru. Ovlivní šifry a další související bezpečnostní nastavení", + "global_settings_setting_ssh_port": "SSH port", + "global_settings_setting_ssh_allow_deprecated_dsa_hostkey_help": "Povolit použití (zastaralého) DSA klíče hostitele pro konfiguraci SSH služby", + "global_settings_setting_smtp_allow_ipv6_help": "Povolit použití IPv6 pro příjem a odesílání emailů", + "global_settings_setting_smtp_relay_enabled_help": "Použít SMTP relay hostitele pro odesílání emailů místo této YunoHost instance. Užitečné v různých situacích: port 25 je blokován vaším ISP nebo VPS poskytovatelem, IP adresa je na blacklistu (např. DUHL), nemůžete nastavit reverzní DNS záznam nebo tento server není přímo připojen do internetu a vy chcete použít jiný server k odesílání emailů." } \ No newline at end of file diff --git a/locales/de.json b/locales/de.json index 4aa75270b..e2b5e2d34 100644 --- a/locales/de.json +++ b/locales/de.json @@ -221,7 +221,6 @@ "app_action_broke_system": "Diese Aktion scheint diese wichtigen Dienste unterbrochen zu haben: {services}", "apps_already_up_to_date": "Alle Apps sind bereits aktuell", "backup_copying_to_organize_the_archive": "Kopieren von {size} MB, um das Archiv zu organisieren", - "global_settings_setting_security_ssh_compatibility": "Kompatibilitäts- vs. Sicherheits-Kompromiss für den SSH-Server. Betrifft die Ciphers (und andere sicherheitsrelevante Aspekte)", "group_deleted": "Gruppe '{group}' gelöscht", "group_deletion_failed": "Konnte Gruppe '{group}' nicht löschen: {error}", "dyndns_provider_unreachable": "DynDNS-Anbieter {provider} kann nicht erreicht werden: Entweder ist dein YunoHost nicht korrekt mit dem Internet verbunden oder der Dynette-Server ist ausgefallen.", @@ -232,14 +231,11 @@ "group_update_failed": "Kann Gruppe '{group}' nicht aktualisieren: {error}", "log_does_exists": "Es gibt kein Operationsprotokoll mit dem Namen'{log}', verwende 'yunohost log list', um alle verfügbaren Operationsprotokolle anzuzeigen", "log_operation_unit_unclosed_properly": "Die Operationseinheit wurde nicht richtig geschlossen", - "global_settings_setting_security_postfix_compatibility": "Kompatibilitäts- vs. Sicherheits-Kompromiss für den Postfix-Server. Betrifft die Ciphers (und andere sicherheitsrelevante Aspekte)", "global_settings_unknown_type": "Unerwartete Situation, die Einstellung {setting} scheint den Typ {unknown_type} zu haben, ist aber kein vom System unterstützter Typ.", "dpkg_is_broken": "Du kannst das gerade nicht tun, weil dpkg/APT (der Systempaketmanager) in einem defekten Zustand zu sein scheint... Du kannst versuchen, dieses Problem zu lösen, indem du dich über SSH verbindest und `sudo apt install --fix-broken` sowie/oder `sudo dpkg --configure -a` ausführst.", "global_settings_unknown_setting_from_settings_file": "Unbekannter Schlüssel in den Einstellungen: '{setting_key}', verwerfen und speichern in /etc/yunohost/settings-unknown.json", "log_link_to_log": "Vollständiges Log dieser Operation: '{desc}'", "log_help_to_get_log": "Um das Protokoll der Operation '{desc}' anzuzeigen, verwende den Befehl 'yunohost log show {name}'", - "global_settings_setting_security_nginx_compatibility": "Kompatibilitäts- vs. Sicherheits-Kompromiss für den Webserver NGINX. Betrifft die Ciphers (und andere sicherheitsrelevante Aspekte)", - "global_settings_setting_service_ssh_allow_deprecated_dsa_hostkey": "Erlaubt die Verwendung eines (veralteten) DSA-Hostkeys für die SSH-Daemon-Konfiguration", "log_app_remove": "Entferne die Applikation '{}'", "global_settings_cant_open_settings": "Einstellungsdatei konnte nicht geöffnet werden, Grund: {reason}", "global_settings_cant_write_settings": "Einstellungsdatei konnte nicht gespeichert werden, Grund: {reason}", @@ -252,12 +248,10 @@ "log_help_to_get_failed_log": "Der Vorgang'{desc}' konnte nicht abgeschlossen werden. Bitte teile das vollständige Protokoll dieser Operation mit dem Befehl 'yunohost log share {name}', um Hilfe zu erhalten", "backup_no_uncompress_archive_dir": "Dieses unkomprimierte Archivverzeichnis gibt es nicht", "log_app_change_url": "Ändere die URL der Applikation '{}'", - "global_settings_setting_security_password_user_strength": "Stärke des Anmeldepassworts", "good_practices_about_user_password": "Du bist nun dabei, ein neues Nutzerpasswort zu definieren. Das Passwort sollte mindestens 8 Zeichen lang sein - es ist jedoch empfehlenswert, ein längeres Passwort (z.B. eine Passphrase) und/oder verschiedene Arten von Zeichen (Groß- und Kleinschreibung, Ziffern und Sonderzeichen) zu verwenden.", "log_link_to_failed_log": "Der Vorgang konnte nicht abgeschlossen werden '{desc}'. Bitte gib das vollständige Protokoll dieser Operation mit Klicken Sie hier an, um Hilfe zu erhalten", "backup_cant_mount_uncompress_archive": "Das unkomprimierte Archiv konnte nicht als schreibgeschützt gemountet werden", "backup_csv_addition_failed": "Es konnten keine Dateien zur Sicherung in die CSV-Datei hinzugefügt werden", - "global_settings_setting_security_password_admin_strength": "Stärke des Admin-Passworts", "global_settings_key_doesnt_exists": "Der Schlüssel'{settings_key}' existiert nicht in den globalen Einstellungen, du kannst alle verfügbaren Schlüssel sehen, indem du 'yunohost settings list' ausführst", "log_app_makedefault": "Mache '{}' zur Standard-Applikation", "hook_json_return_error": "Konnte die Rückkehr vom Einsprungpunkt {path} nicht lesen. Fehler: {msg}. Unformatierter Inhalt: {raw_content}", @@ -436,13 +430,9 @@ "global_settings_setting_smtp_relay_password": "SMTP Relay Host Passwort", "global_settings_setting_smtp_relay_user": "SMTP Relay Benutzer Account", "global_settings_setting_smtp_relay_port": "SMTP Relay Port", - "global_settings_setting_smtp_allow_ipv6": "Erlaube die Nutzung von IPv6 um Mails zu empfangen und zu versenden", - "global_settings_setting_pop3_enabled": "Aktiviere das POP3 Protokoll für den Mailserver", "domain_cannot_remove_main_add_new_one": "Sie können '{domain}' nicht entfernen, da es die Hauptdomäne und Ihre einzige Domäne ist. Sie müssen zuerst eine andere Domäne mit 'yunohost domain add ' hinzufügen, dann als Hauptdomäne mit 'yunohost domain main-domain -n ' festlegen und dann können Sie die Domäne '{domain}' mit 'yunohost domain remove {domain}' entfernen'.'", "diagnosis_rootfstotalspace_critical": "Das Root-Filesystem hat noch freien Speicher von {space}. Das ist besorngiserregend! Der Speicher wird schnell aufgebraucht sein. 16 GB für das Root-Filesystem werden empfohlen.", "diagnosis_rootfstotalspace_warning": "Das Root-Filesystem hat noch freien Speicher von {space}. Möglich, dass das in Ordnung ist. Vielleicht ist er aber auch schneller aufgebraucht. 16 GB für das Root-Filesystem werden empfohlen.", - "global_settings_setting_smtp_relay_host": "Zu verwendender SMTP-Relay-Host um E-Mails zu versenden. Er wird anstelle dieser YunoHost-Instanz verwendet. Nützlich, wenn du in einer der folgenden Situationen bist: Dein ISP- oder VPS-Provider hat deinen Port 25 geblockt, eine deinen residentiellen IPs ist auf DUHL gelistet, du kannst keinen Reverse-DNS konfigurieren oder dieser Server ist nicht direkt mit dem Internet verbunden und du möchtest einen anderen verwenden, um E-Mails zu versenden.", - "global_settings_setting_backup_compress_tar_archives": "Beim Erstellen von Backups die Archive komprimieren (.tar.gz) anstelle von unkomprimierten Archiven (.tar). N.B. : Diese Option ergibt leichtere Backup-Archive, aber das initiale Backupprozedere wird länger dauern und mehr CPU brauchen.", "log_remove_on_failed_restore": "Entfernen von '{}' nach einer fehlgeschlagenen Wiederherstellung aus einem Sicherungsarchiv", "log_backup_restore_app": "Wiederherstellen von '{}' aus einem Sicherungsarchiv", "log_backup_restore_system": "System aus einem Sicherungsarchiv wiederherstellen", @@ -548,7 +538,6 @@ "migration_ldap_migration_failed_trying_to_rollback": "Migrieren war nicht möglich... Versuch, ein Rollback des Systems durchzuführen.", "migration_ldap_backup_before_migration": "Vor der eigentlichen Migration ein Backup der LDAP-Datenbank und der Applikations-Einstellungen erstellen.", "global_settings_setting_ssowat_panel_overlay_enabled": "Das SSOwat-Overlay-Panel aktivieren", - "global_settings_setting_security_ssh_port": "SSH-Port", "diagnosis_sshd_config_inconsistent_details": "Bitte führe yunohost settings set security.ssh.port -v YOUR_SSH_PORT aus, um den SSH-Port festzulegen, und prüfe yunohost tools regen-conf ssh --dry-run --with-diff und yunohost tools regen-conf ssh --force um deine Konfiguration auf die YunoHost-Empfehlung zurückzusetzen.", "regex_incompatible_with_tile": "/!\\ Packagers! Für Berechtigung '{permission}' ist show_tile auf 'true' gesetzt und deshalb kannst du keine regex-URL als Hauptdomäne setzen", "permission_cant_add_to_all_users": "Die Berechtigung {permission} kann nicht für allen Konten hinzugefügt werden.", @@ -580,8 +569,6 @@ "yunohost_postinstall_end_tip": "Post-install ist fertig! Um das Setup abzuschliessen, wird empfohlen:\n - ein erstes Konto über den Bereich 'Konto' im Adminbereich hinzuzufügen (oder mit 'yunohost user create ' in der Kommandezeile);\n - mögliche Fehler zu diagnostizieren über den Bereich 'Diagnose' im Adminbereich (oder mit 'yunohost diagnosis run' in der Kommandozeile;\n - Die Abschnitte 'Install YunoHost' und 'Geführte Tour' im Administratorenhandbuch zu lesen: https://yunohost.org/admindoc.", "user_already_exists": "Das Konto '{user}' ist bereits vorhanden", "update_apt_cache_warning": "Beim Versuch den Cache für APT (Debians Paketmanager) zu aktualisieren, ist etwas schief gelaufen. Hier ist ein Dump der Zeilen aus sources.list, die Ihnen vielleicht dabei helfen, das Problem zu identifizieren:\n{sourceslist}", - "global_settings_setting_security_webadmin_allowlist": "IP-Adressen, die auf die Verwaltungsseite zugreifen dürfen. Kommasepariert.", - "global_settings_setting_security_webadmin_allowlist_enabled": "Erlaube nur bestimmten IP-Adressen den Zugriff auf die Verwaltungsseite.", "disk_space_not_sufficient_update": "Es ist nicht genügend Speicherplatz frei, um diese Applikation zu aktualisieren", "disk_space_not_sufficient_install": "Es ist nicht genügend Speicherplatz frei, um diese Applikation zu installieren", "danger": "Warnung:", @@ -618,8 +605,6 @@ "domain_unknown": "Domäne '{domain}' unbekannt", "ldap_server_is_down_restart_it": "Der LDAP-Dienst ist nicht erreichbar, versuche ihn neu zu starten...", "user_import_bad_file": "Deine CSV-Datei ist nicht korrekt formatiert und wird daher ignoriert, um einen möglichen Datenverlust zu vermeiden", - "global_settings_setting_security_experimental_enabled": "Aktiviere experimentelle Sicherheitsfunktionen (nur aktivieren, wenn Du weißt was Du tust!)", - "global_settings_setting_security_nginx_redirect_to_https": "HTTP-Anfragen standardmäßig auf HTTPs umleiten (NICHT AUSSCHALTEN, sofern Du nicht weißt was Du tust!)", "user_import_missing_columns": "Die folgenden Spalten fehlen: {columns}", "user_import_nothing_to_do": "Es muss kein Konto importiert werden", "user_import_partial_failed": "Der Import von Konten ist teilweise fehlgeschlagen", @@ -673,7 +658,6 @@ "migration_0021_modified_files": "Bitte beachte, dass die folgenden Dateien manuell geändert wurden und nach dem Update möglicherweise überschrieben werden: {manually_modified_files}", "migration_0021_cleaning_up": "Bereinigung von Cache und Paketen nicht mehr nötig...", "migration_0021_patch_yunohost_conflicts": "Patch anwenden, um das Konfliktproblem zu umgehen...", - "global_settings_setting_security_ssh_password_authentication": "Passwort-Authentifizierung für SSH zulassen", "migration_description_0021_migrate_to_bullseye": "Upgrade des Systems auf Debian Bullseye und YunoHost 11.x", "migration_0021_general_warning": "Bitte beachte, dass diese Migration ein heikler Vorgang ist. Das YunoHost-Team hat sein Bestes getan, um sie zu überprüfen und zu testen, aber die Migration könnte immer noch Teile des Systems oder seiner Anwendungen beschädigen.\n\nEs wird daher empfohlen,:\n - Führe eine Sicherung aller kritischen Daten oder Applikationen durch. Mehr Informationen unter https://yunohost.org/backup;\n - Habe Geduld, nachdem du die Migration gestartet hast: Je nach Internetverbindung und Hardware kann es bis zu ein paar Stunden dauern, bis alles aktualisiert ist.", "tools_upgrade": "Aktualisieren von Systempaketen", @@ -684,5 +668,20 @@ "migration_description_0022_php73_to_php74_pools": "Migriere php7.3-fpm 'pool' Konfiguration nach php7.4", "migration_description_0023_postgresql_11_to_13": "Migrieren von Datenbanken von PostgreSQL 11 nach 13", "service_description_postgresql": "Speichert Applikations-Daten (SQL Datenbank)", - "migration_0023_not_enough_space": "Stelle sicher, dass unter {path} genug Speicherplatz zur Verfügung steht, um die Migration auszuführen." -} + "migration_0023_not_enough_space": "Stelle sicher, dass unter {path} genug Speicherplatz zur Verfügung steht, um die Migration auszuführen.", + "global_settings_setting_backup_compress_tar_archives_help": "Beim Erstellen von Backups die Archive komprimieren (.tar.gz) anstelle von unkomprimierten Archiven (.tar). N.B. : Diese Option ergibt leichtere Backup-Archive, aber das initiale Backupprozedere wird länger dauern und mehr CPU brauchen.", + "global_settings_setting_security_experimental_enabled_help": "Aktiviere experimentelle Sicherheitsfunktionen (nur aktivieren, wenn Du weißt was Du tust!)", + "global_settings_setting_nginx_compatibility_help": "Kompatibilitäts- vs. Sicherheits-Kompromiss für den Webserver NGINX. Betrifft die Ciphers (und andere sicherheitsrelevante Aspekte)", + "global_settings_setting_nginx_redirect_to_https_help": "HTTP-Anfragen standardmäßig auf HTTPs umleiten (NICHT AUSSCHALTEN, sofern Du nicht weißt was Du tust!)", + "global_settings_setting_admin_strength": "Stärke des Admin-Passworts", + "global_settings_setting_user_strength": "Stärke des Anmeldepassworts", + "global_settings_setting_postfix_compatibility_help": "Kompatibilitäts- vs. Sicherheits-Kompromiss für den Postfix-Server. Betrifft die Ciphers (und andere sicherheitsrelevante Aspekte)", + "global_settings_setting_ssh_compatibility_help": "Kompatibilitäts- vs. Sicherheits-Kompromiss für den SSH-Server. Betrifft die Ciphers (und andere sicherheitsrelevante Aspekte)", + "global_settings_setting_ssh_password_authentication_help": "Passwort-Authentifizierung für SSH zulassen", + "global_settings_setting_ssh_port": "SSH-Port", + "global_settings_setting_webadmin_allowlist_help": "IP-Adressen, die auf die Verwaltungsseite zugreifen dürfen. Kommasepariert.", + "global_settings_setting_webadmin_allowlist_enabled_help": "Erlaube nur bestimmten IP-Adressen den Zugriff auf die Verwaltungsseite.", + "global_settings_setting_ssh_allow_deprecated_dsa_hostkey_help": "Erlaubt die Verwendung eines (veralteten) DSA-Hostkeys für die SSH-Daemon-Konfiguration", + "global_settings_setting_smtp_allow_ipv6_help": "Erlaube die Nutzung von IPv6 um Mails zu empfangen und zu versenden", + "global_settings_setting_smtp_relay_enabled_help": "Zu verwendender SMTP-Relay-Host um E-Mails zu versenden. Er wird anstelle dieser YunoHost-Instanz verwendet. Nützlich, wenn du in einer der folgenden Situationen bist: Dein ISP- oder VPS-Provider hat deinen Port 25 geblockt, eine deinen residentiellen IPs ist auf DUHL gelistet, du kannst keinen Reverse-DNS konfigurieren oder dieser Server ist nicht direkt mit dem Internet verbunden und du möchtest einen anderen verwenden, um E-Mails zu versenden." +} \ No newline at end of file diff --git a/locales/eo.json b/locales/eo.json index 8ac32d4ce..d9f84e82a 100644 --- a/locales/eo.json +++ b/locales/eo.json @@ -105,7 +105,6 @@ "field_invalid": "Nevalida kampo '{}'", "log_app_makedefault": "Faru '{}' la defaŭlta apliko", "backup_system_part_failed": "Ne eblis sekurkopi la sistemon de '{part}'", - "global_settings_setting_security_postfix_compatibility": "Kongruo vs sekureca kompromiso por la Postfix-servilo. Afektas la ĉifradojn (kaj aliajn aspektojn pri sekureco)", "group_unknown": "La grupo '{group}' estas nekonata", "mailbox_disabled": "Retpoŝto malŝaltita por uzanto {user}", "migrations_dependencies_not_satisfied": "Rulu ĉi tiujn migradojn: '{dependencies_id}', antaŭ migrado {id}.", @@ -238,7 +237,6 @@ "dyndns_unavailable": "La domajno '{domain}' ne haveblas.", "experimental_feature": "Averto: Ĉi tiu funkcio estas eksperimenta kaj ne konsiderata stabila, vi ne uzu ĝin krom se vi scias kion vi faras.", "root_password_replaced_by_admin_password": "Via radika pasvorto estis anstataŭigita per via administra pasvorto.", - "global_settings_setting_security_password_user_strength": "Uzanto pasvorta forto", "restore_may_be_not_enough_disk_space": "Via sistemo ne ŝajnas havi sufiĉe da spaco (libera: {free_space} B, necesa spaco: {needed_space} B, sekureca marĝeno: {margin} B)", "log_corrupted_md_file": "La YAD-metadata dosiero asociita kun protokoloj estas damaĝita: '{md_file}\nEraro: {error} '", "downloading": "Elŝutante …", @@ -264,7 +262,6 @@ "log_user_delete": "Forigi uzanton '{}'", "dyndns_ip_updated": "Ĝisdatigis vian IP sur DynDNS", "regenconf_up_to_date": "La agordo jam estas ĝisdatigita por kategorio '{category}'", - "global_settings_setting_security_ssh_compatibility": "Kongruo vs sekureca kompromiso por la SSH-servilo. Afektas la ĉifradojn (kaj aliajn aspektojn pri sekureco)", "migrations_need_to_accept_disclaimer": "Por funkciigi la migradon {id}, via devas akcepti la sekvan malakcepton:\n---\n{disclaimer}\n---\nSe vi akceptas funkcii la migradon, bonvolu rekonduki la komandon kun la opcio '--accept-disclaimer'.", "regenconf_file_remove_failed": "Ne povis forigi la agordodosieron '{conf}'", "not_enough_disk_space": "Ne sufiĉe libera spaco sur '{path}'", @@ -295,7 +292,6 @@ "log_backup_restore_system": "Restarigi sistemon de rezerva arkivo", "log_app_change_url": "Ŝanĝu la URL de la apliko '{}'", "service_already_started": "La servo '{service}' jam funkcias", - "global_settings_setting_security_password_admin_strength": "Admin pasvorta forto", "service_reload_or_restart_failed": "Ne povis reŝargi aŭ rekomenci la servon '{service}'\n\nLastatempaj servaj protokoloj: {logs}", "migrations_list_conflict_pending_done": "Vi ne povas uzi ambaŭ '--previous' kaj '--done' samtempe.", "server_shutdown_confirm": "La servilo haltos tuj, ĉu vi certas? [{answers}]", @@ -310,7 +306,6 @@ "password_too_simple_4": "La pasvorto bezonas almenaŭ 12 signojn kaj enhavas ciferon, majuskle, pli malaltan kaj specialajn signojn", "regenconf_file_updated": "Agordodosiero '{conf}' ĝisdatigita", "log_help_to_get_log": "Por vidi la protokolon de la operacio '{desc}', uzu la komandon 'yunohost log show {name}'", - "global_settings_setting_security_nginx_compatibility": "Kongruo vs sekureca kompromiso por la TTT-servilo NGINX. Afektas la ĉifradojn (kaj aliajn aspektojn pri sekureco)", "restore_complete": "Restarigita", "hook_exec_failed": "Ne povis funkcii skripto: {path}", "global_settings_cant_open_settings": "Ne eblis malfermi agordojn, tial: {reason}", @@ -352,7 +347,6 @@ "log_domain_remove": "Forigi domon '{}' de agordo de sistemo", "hook_list_by_invalid": "Ĉi tiu posedaĵo ne povas esti uzata por listigi hokojn", "confirm_app_install_thirdparty": "Danĝero! Ĉi tiu apliko ne estas parto de la aplika katalogo de Yunohost. Instali triajn aplikojn povas kompromiti la integrecon kaj sekurecon de via sistemo. Vi probable ne devas instali ĝin krom se vi scias kion vi faras. NENIU SUBTENO estos provizita se ĉi tiu app ne funkcias aŭ rompas vian sistemon ... Se vi pretas riski ĉiuokaze, tajpu '{answers}'", - "global_settings_setting_service_ssh_allow_deprecated_dsa_hostkey": "Permesu uzon de (malaktuala) DSA-hostkey por la agordo de daemon SSH", "dyndns_domain_not_provided": "Provizanto DynDNS {provider} ne povas provizi domajnon {domain}.", "backup_unable_to_organize_files": "Ne povis uzi la rapidan metodon por organizi dosierojn en la ar archiveivo", "password_too_simple_2": "La pasvorto bezonas almenaŭ 8 signojn kaj enhavas ciferon, majusklojn kaj minusklojn", @@ -454,7 +448,6 @@ "diagnosis_found_errors_and_warnings": "Trovis {errors} signifaj problemo (j) (kaj {warnings} averto) rilataj al {category}!", "diagnosis_diskusage_low": "Stokado {mountpoint} (sur aparato {device}) nur restas {free} ({free_percent}%) spaco restanta (el {total}). Estu zorgema.", "diagnosis_diskusage_ok": "Stokado {mountpoint} (sur aparato {device}) ankoraŭ restas {free} ({free_percent}%) spaco (el {total})!", - "global_settings_setting_pop3_enabled": "Ebligu la protokolon POP3 por la poŝta servilo", "diagnosis_unknown_categories": "La jenaj kategorioj estas nekonataj: {categories}", "diagnosis_services_running": "Servo {service} funkcias!", "diagnosis_ports_unreachable": "Haveno {port} ne atingeblas de ekstere.", @@ -516,7 +509,6 @@ "diagnosis_http_partially_unreachable": "Domajno {domain} ŝajnas neatingebla per HTTP de ekster la loka reto en IPv {failed}, kvankam ĝi funkcias en IPv {passed}.", "diagnosis_http_nginx_conf_not_up_to_date": "La nginx-agordo de ĉi tiu domajno ŝajnas esti modifita permane, kaj malhelpas YunoHost diagnozi ĉu ĝi atingeblas per HTTP.", "diagnosis_http_nginx_conf_not_up_to_date_details": "Por solvi la situacion, inspektu la diferencon per la komandlinio per yunohost tools regen-conf nginx --dry-run --with-diff kaj se vi aranĝas, apliku la ŝanĝojn per yunohost tools regen-conf nginx --force.", - "global_settings_setting_smtp_allow_ipv6": "Permesu la uzon de IPv6 por ricevi kaj sendi poŝton", "backup_archive_corrupted": "I aspektas kiel la rezerva arkivo '{archive}' estas koruptita: {error}", "backup_archive_cant_retrieve_info_json": "Ne povis ŝarĝi infos por arkivo '{archive}' ... la info.json ne povas esti reprenita (aŭ ne estas valida JSON).", "ask_user_domain": "Domajno uzi por la retpoŝta adreso de la uzanto kaj XMPP-konto", @@ -530,5 +522,12 @@ "app_label_deprecated": "Ĉi tiu komando estas malrekomendita! Bonvolu uzi la novan komandon 'yunohost user permission update' por administri la app etikedo.", "app_argument_password_no_default": "Eraro dum analiza pasvorta argumento '{name}': pasvorta argumento ne povas havi defaŭltan valoron por sekureca kialo", "additional_urls_already_removed": "Plia URL '{url}' jam forigita en la aldona URL por permeso '{permission}'", - "additional_urls_already_added": "Plia URL '{url}' jam aldonita en la aldona URL por permeso '{permission}'" + "additional_urls_already_added": "Plia URL '{url}' jam aldonita en la aldona URL por permeso '{permission}'", + "global_settings_setting_nginx_compatibility_help": "Kongruo vs sekureca kompromiso por la TTT-servilo NGINX. Afektas la ĉifradojn (kaj aliajn aspektojn pri sekureco)", + "global_settings_setting_admin_strength": "Admin pasvorta forto", + "global_settings_setting_user_strength": "Uzanto pasvorta forto", + "global_settings_setting_postfix_compatibility_help": "Kongruo vs sekureca kompromiso por la Postfix-servilo. Afektas la ĉifradojn (kaj aliajn aspektojn pri sekureco)", + "global_settings_setting_ssh_compatibility_help": "Kongruo vs sekureca kompromiso por la SSH-servilo. Afektas la ĉifradojn (kaj aliajn aspektojn pri sekureco)", + "global_settings_setting_ssh_allow_deprecated_dsa_hostkey_help": "Permesu uzon de (malaktuala) DSA-hostkey por la agordo de daemon SSH", + "global_settings_setting_smtp_allow_ipv6_help": "Permesu la uzon de IPv6 por ricevi kaj sendi poŝton" } \ No newline at end of file diff --git a/locales/es.json b/locales/es.json index aebb959a8..ec513fb52 100644 --- a/locales/es.json +++ b/locales/es.json @@ -320,13 +320,7 @@ "group_created": "Creado el grupo «{group}»", "good_practices_about_admin_password": "Ahora está a punto de definir una nueva contraseña de usuario. La contraseña debe tener al menos 8 caracteres, aunque es una buena práctica usar una contraseña más larga (es decir, una frase de contraseña) y / o una variación de caracteres (mayúsculas, minúsculas, dígitos y caracteres especiales).", "global_settings_unknown_type": "Situación imprevista, la configuración {setting} parece tener el tipo {unknown_type} pero no es un tipo compatible con el sistema.", - "global_settings_setting_service_ssh_allow_deprecated_dsa_hostkey": "Permitir el uso de la llave (obsoleta) DSA para la configuración del demonio SSH", "global_settings_unknown_setting_from_settings_file": "Clave desconocida en la configuración: «{setting_key}», desechada y guardada en /etc/yunohost/settings-unknown.json", - "global_settings_setting_security_postfix_compatibility": "Compromiso entre compatibilidad y seguridad para el servidor Postfix. Afecta al cifrado (y otros aspectos relacionados con la seguridad)", - "global_settings_setting_security_ssh_compatibility": "Compromiso entre compatibilidad y seguridad para el servidor SSH. Afecta al cifrado (y otros aspectos relacionados con la seguridad)", - "global_settings_setting_security_password_user_strength": "Seguridad de la contraseña de usuario", - "global_settings_setting_security_password_admin_strength": "Seguridad de la contraseña del administrador", - "global_settings_setting_security_nginx_compatibility": "Compromiso entre compatibilidad y seguridad para el servidor web NGINX. Afecta al cifrado (y otros aspectos relacionados con la seguridad)", "global_settings_reset_success": "Respaldada la configuración previa en {path}", "global_settings_key_doesnt_exists": "La clave «{settings_key}» no existe en la configuración global, puede ver todas las claves disponibles ejecutando «yunohost settings list»", "global_settings_cant_write_settings": "No se pudo guardar el archivo de configuración, motivo: {reason}", @@ -464,7 +458,6 @@ "log_domain_main_domain": "Hacer de '{}' el dominio principal", "log_app_action_run": "Inicializa la acción de la aplicación '{}'", "group_already_exist_on_system_but_removing_it": "El grupo {group} ya existe en los grupos del sistema, pero YunoHost lo suprimirá …", - "global_settings_setting_pop3_enabled": "Habilita el protocolo POP3 para el servidor de correo electrónico", "domain_cannot_remove_main_add_new_one": "No se puede remover '{domain}' porque es su principal y único dominio. Primero debe agregar un nuevo dominio con la linea de comando 'yunohost domain add ', entonces configurarlo como dominio principal con 'yunohost domain main-domain -n ' y finalmente borrar el dominio '{domain}' con 'yunohost domain remove {domain}'.'", "diagnosis_never_ran_yet": "Este servidor todavía no tiene reportes de diagnostico. Puede iniciar un diagnostico completo desde la interface administrador web o con la linea de comando 'yunohost diagnosis run'.", "diagnosis_unknown_categories": "Las siguientes categorías están desconocidas: {categories}", @@ -510,12 +503,9 @@ "app_label_deprecated": "Este comando está depreciado! Favor usar el nuevo comando 'yunohost user permission update' para administrar la etiqueta de app.", "app_argument_password_no_default": "Error al interpretar argumento de contraseña'{name}': El argumento de contraseña no puede tener un valor por defecto por razón de seguridad", "invalid_regex": "Regex no valido: «{regex}»", - "global_settings_setting_backup_compress_tar_archives": "Cuando se creen nuevas copias de respaldo, comprimir los archivos (.tar.gz) en lugar de descomprimir los archivos (.tar). N.B.: activar esta opción quiere decir que los archivos serán más pequeños pero que el proceso tardará más y utilizará más CPU.", "global_settings_setting_smtp_relay_password": "Clave de uso del SMTP", "global_settings_setting_smtp_relay_user": "Cuenta de uso de SMTP", "global_settings_setting_smtp_relay_port": "Puerto de envio / relay SMTP", - "global_settings_setting_smtp_relay_host": "El servidor relay de SMTP para enviar correo en lugar de esta instalación YunoHost. Útil si estás en una de estas situaciones: tu puerto 25 esta bloqueado por tu ISP o VPS, si estás en usado una IP marcada como residencial o DUHL, si no puedes configurar un DNS inverso o si el servidor no está directamente expuesto a internet y quieres utilizar otro servidor para enviar correos.", - "global_settings_setting_smtp_allow_ipv6": "Permitir el uso de IPv6 para enviar y recibir correo", "diagnosis_processes_killed_by_oom_reaper": "Algunos procesos fueron terminados por el sistema recientemente porque se quedó sin memoria. Típicamente es sintoma de falta de memoria o de un proceso que se adjudicó demasiada memoria.
Resumen de los procesos terminados:
\n{kills_summary}", "diagnosis_http_nginx_conf_not_up_to_date_details": "Para arreglar este asunto, estudia las diferencias mediante el comando yunohost tools regen-conf nginx --dry-run --with-diff y si te parecen bien aplica los cambios mediante yunohost tools regen-conf nginx --force.", "diagnosis_http_nginx_conf_not_up_to_date": "Parece que la configuración nginx de este dominio haya sido modificada manualmente, esto no deja que YunoHost pueda diagnosticar si es accesible mediante HTTP.", @@ -618,10 +608,7 @@ "domain_dns_registrar_managed_in_parent_domain": "Este dominio es un subdominio de {parent_domain_link}. La configuración del registrador de DNS debe administrarse en el panel de configuración de {parent_domain}.", "domain_dns_registrar_yunohost": "Este dominio es un nohost.me / nohost.st / ynh.fr y, por lo tanto, YunoHost maneja automáticamente su configuración de DNS sin ninguna configuración adicional. (vea el comando 'yunohost dyndns update')", "domain_dns_registrar_not_supported": "YunoHost no pudo detectar automáticamente el registrador que maneja este dominio. Debe configurar manualmente sus registros DNS siguiendo la documentación en https://yunohost.org/dns.", - "global_settings_setting_security_nginx_redirect_to_https": "Redirija las solicitudes HTTP a HTTPs de forma predeterminada (¡NO LO DESACTIVE a menos que realmente sepa lo que está haciendo!)", - "global_settings_setting_security_webadmin_allowlist": "Direcciones IP permitidas para acceder al webadmin. Separado por comas.", "migration_ldap_backup_before_migration": "Creación de una copia de seguridad de la base de datos LDAP y la configuración de las aplicaciones antes de la migración real.", - "global_settings_setting_security_ssh_port": "Puerto SSH", "invalid_number": "Debe ser un miembro", "ldap_server_is_down_restart_it": "El servicio LDAP está inactivo, intente reiniciarlo...", "invalid_password": "Contraseña inválida", @@ -645,7 +632,6 @@ "migration_0021_modified_files": "Tenga en cuenta que se encontró que los siguientes archivos se modificaron manualmente y podrían sobrescribirse después de la actualización: {manually_modified_files}", "invalid_number_min": "Debe ser mayor que {min}", "pattern_email_forward": "Debe ser una dirección de correo electrónico válida, se acepta el símbolo '+' (por ejemplo, alguien+etiqueta@ejemplo.com)", - "global_settings_setting_security_ssh_password_authentication": "Permitir autenticación de contraseña para SSH", "invalid_number_max": "Debe ser menor que {max}", "ldap_attribute_already_exists": "El atributo LDAP '{attribute}' ya existe con el valor '{value}'", "log_app_config_set": "Aplicar configuración a la aplicación '{}'", @@ -657,8 +643,6 @@ "ldap_server_down": "No se puede conectar con el servidor LDAP", "log_backup_create": "Crear un archivo de copia de seguridad", "migration_ldap_can_not_backup_before_migration": "La copia de seguridad del sistema no se pudo completar antes de que fallara la migración. Error: {error}", - "global_settings_setting_security_experimental_enabled": "Habilite las funciones de seguridad experimentales (¡no habilite esto si no sabe lo que está haciendo!)", - "global_settings_setting_security_webadmin_allowlist_enabled": "Permita que solo algunas IP accedan al administrador web.", "migration_ldap_migration_failed_trying_to_rollback": "No se pudo migrar... intentando revertir el sistema.", "migration_0023_not_enough_space": "Deje suficiente espacio disponible en {path} para ejecutar la migración.", "migration_0023_postgresql_11_not_installed": "PostgreSQL no estaba instalado en su sistema. Nada que hacer.", @@ -684,5 +668,20 @@ "service_description_yunomdns": "Le permite llegar a su servidor usando 'yunohost.local' en su red local", "show_tile_cant_be_enabled_for_regex": "No puede habilitar 'show_tile' en este momento porque la URL para el permiso '{permission}' es una expresión regular", "show_tile_cant_be_enabled_for_url_not_defined": "No puede habilitar 'show_tile' en este momento, porque primero debe definir una URL para el permiso '{permission}'", - "regex_incompatible_with_tile": "/!\\ Empaquetadores! El permiso '{permission}' tiene show_tile establecido en 'true' y, por lo tanto, no puede definir una URL de expresión regular como la URL principal" -} + "regex_incompatible_with_tile": "/!\\ Empaquetadores! El permiso '{permission}' tiene show_tile establecido en 'true' y, por lo tanto, no puede definir una URL de expresión regular como la URL principal", + "global_settings_setting_backup_compress_tar_archives_help": "Cuando se creen nuevas copias de respaldo, comprimir los archivos (.tar.gz) en lugar de descomprimir los archivos (.tar). N.B.: activar esta opción quiere decir que los archivos serán más pequeños pero que el proceso tardará más y utilizará más CPU.", + "global_settings_setting_security_experimental_enabled_help": "Habilite las funciones de seguridad experimentales (¡no habilite esto si no sabe lo que está haciendo!)", + "global_settings_setting_nginx_compatibility_help": "Compromiso entre compatibilidad y seguridad para el servidor web NGINX. Afecta al cifrado (y otros aspectos relacionados con la seguridad)", + "global_settings_setting_nginx_redirect_to_https_help": "Redirija las solicitudes HTTP a HTTPs de forma predeterminada (¡NO LO DESACTIVE a menos que realmente sepa lo que está haciendo!)", + "global_settings_setting_admin_strength": "Seguridad de la contraseña del administrador", + "global_settings_setting_user_strength": "Seguridad de la contraseña de usuario", + "global_settings_setting_postfix_compatibility_help": "Compromiso entre compatibilidad y seguridad para el servidor Postfix. Afecta al cifrado (y otros aspectos relacionados con la seguridad)", + "global_settings_setting_ssh_compatibility_help": "Compromiso entre compatibilidad y seguridad para el servidor SSH. Afecta al cifrado (y otros aspectos relacionados con la seguridad)", + "global_settings_setting_ssh_password_authentication_help": "Permitir autenticación de contraseña para SSH", + "global_settings_setting_ssh_port": "Puerto SSH", + "global_settings_setting_webadmin_allowlist_help": "Direcciones IP permitidas para acceder al webadmin. Separado por comas.", + "global_settings_setting_webadmin_allowlist_enabled_help": "Permita que solo algunas IP accedan al administrador web.", + "global_settings_setting_ssh_allow_deprecated_dsa_hostkey_help": "Permitir el uso de la llave (obsoleta) DSA para la configuración del demonio SSH", + "global_settings_setting_smtp_allow_ipv6_help": "Permitir el uso de IPv6 para enviar y recibir correo", + "global_settings_setting_smtp_relay_enabled_help": "El servidor relay de SMTP para enviar correo en lugar de esta instalación YunoHost. Útil si estás en una de estas situaciones: tu puerto 25 esta bloqueado por tu ISP o VPS, si estás en usado una IP marcada como residencial o DUHL, si no puedes configurar un DNS inverso o si el servidor no está directamente expuesto a internet y quieres utilizar otro servidor para enviar correos." +} \ No newline at end of file diff --git a/locales/eu.json b/locales/eu.json index e0ce226d5..d35a0875c 100644 --- a/locales/eu.json +++ b/locales/eu.json @@ -254,7 +254,6 @@ "firewall_reloaded": "Suebakia birkargatu da", "domain_unknown": "'{domain}' domeinua ezezaguna da", "global_settings_cant_serialize_settings": "Ezinezkoa izan da konfikurazio-datuak serializatzea, zergatia: {reason}", - "global_settings_setting_security_nginx_redirect_to_https": "Birbideratu HTTP eskaerak HTTPSra (EZ ITZALI hau ez badakizu zertan ari zaren!)", "group_deleted": "'{group}' taldea ezabatu da", "invalid_password": "Pasahitza ez da zuzena", "log_domain_main_domain": "Lehenetsi '{}' domeinua", @@ -284,18 +283,13 @@ "global_settings_cant_write_settings": "Ezinezkoa izan da konfigurazio fitxategia gordetzea, zergatia: {reason}", "dyndns_domain_not_provided": "{provider} DynDNS enpresak ezin du {domain} domeinua eskaini.", "firewall_reload_failed": "Ezinezkoa izan da suebakia birkargatzea", - "global_settings_setting_security_password_admin_strength": "Administrazio-pasahitzaren segurtasuna", "hook_name_unknown": "'{name}' 'hook' izen ezezaguna", "domain_deletion_failed": "Ezinezkoa izan da {domain} ezabatzea: {error}", - "global_settings_setting_security_nginx_compatibility": "Bateragarritasun eta segurtasun arteko gatazka NGINX web zerbitzarirako. Zifraketari eragiten dio (eta segurtasunari lotutako beste kontu batzuei)", "log_regen_conf": "Berregin '{}' sistemaren konfigurazioa", "dpkg_lock_not_available": "Ezin da komando hau une honetan exekutatu beste aplikazio batek dpkg (sistemaren paketeen kudeatzailea) blokeatuta duelako, erabiltzen ari baita", "group_created": "'{group}' taldea sortu da", - "global_settings_setting_security_password_user_strength": "Erabiltzaile-pasahitzaren segurtasuna", - "global_settings_setting_security_experimental_enabled": "Gaitu segurtasun funtzio esperimentalak (ez ezazu egin ez badakizu zertan ari zaren!)", "good_practices_about_admin_password": "Administrazio-pasahitz berria ezartzear zaude. Pasahitzak zortzi karaktere izan beharko lituzke gutxienez, baina gomendagarria da pasahitz luzeagoa erabiltzea (esaldi bat, esaterako) edota karaktere desberdinak erabiltzea (hizki larriak, txikiak, zenbakiak eta karaktere bereziak).", "log_help_to_get_failed_log": "Ezin izan da '{desc}' eragiketa exekutatu. Mesedez, laguntza nahi baduzu partekatu eragiketa honen erregistro osoa 'yunohost log share {name}' komandoa erabiliz", - "global_settings_setting_security_webadmin_allowlist_enabled": "Baimendu IP zehatz batzuk bakarrik administrazio-atarian.", "group_unknown": "'{group}' taldea ezezaguna da", "group_updated": "'{group}' taldea eguneratu da", "group_update_failed": "Ezinezkoa izan da '{group}' taldea eguneratzea: {error}", @@ -317,7 +311,6 @@ "domain_dns_push_success": "DNS ezarpenak eguneratu dira!", "domain_dns_push_failed": "DNS ezarpenen eguneratzeak kale egin du.", "domain_dns_push_partial_failure": "DNS ezarpenak erdipurdi eguneratu dira: jakinarazpen/errore batzuk egon dira.", - "global_settings_setting_smtp_relay_host": "YunoHosten ordez posta elektronikoa bidaltzeko SMTP relay helbidea. Erabilgarri izan daiteke egoera hauetan: operadore edo VPS enpresak 25. ataka blokeatzen badu, DUHLen zure etxeko IPa ageri bada, ezin baduzu alderantzizko DNSa ezarri edo zerbitzari hau ez badago zuzenean internetera konektatuta baina posta elektronikoa bidali nahi baduzu.", "group_deletion_failed": "Ezinezkoa izan da '{group}' taldea ezabatzea: {error}", "invalid_number_min": "{min} baino handiagoa izan behar da", "invalid_number_max": "{max} baino txikiagoa izan behar da", @@ -345,7 +338,6 @@ "domain_config_auth_application_key": "Aplikazioaren gakoa", "domain_config_auth_application_secret": "Aplikazioaren gako sekretua", "domain_config_auth_consumer_key": "Erabiltzailearen gakoa", - "global_settings_setting_smtp_allow_ipv6": "Baimendu IPv6 posta elektronikoa jaso eta bidaltzeko", "group_cannot_be_deleted": "{group} taldea ezin da eskuz ezabatu.", "log_domain_config_set": "Aldatu '{}' domeinuko ezarpenak", "log_domain_dns_push": "Bidali '{}' domeinuaren DNS ezarpenak", @@ -359,8 +351,6 @@ "domain_config_mail_out": "Bidalitako mezuak", "domain_config_xmpp": "Bat-bateko mezularitza (XMPP)", "global_settings_bad_choice_for_enum": "{setting} ezarpenerako aukera okerra. '{choice}' ezarri da baina hauek dira aukerak: {available_choices}", - "global_settings_setting_security_postfix_compatibility": "Bateragarritasun eta segurtasun arteko gatazka Postfix zerbitzarirako. Zifraketari eragiten dio (eta segurtasunari lotutako beste kontu batzuei)", - "global_settings_setting_security_ssh_compatibility": "Bateragarritasun eta segurtasun arteko gatazka SSH zerbitzarirako. Zifraketari eragiten dio (eta segurtasunari lotutako beste kontu batzuei)", "good_practices_about_user_password": "Erabiltzaile-pasahitz berria ezartzear zaude. Pasahitzak zortzi karaktere izan beharko lituzke gutxienez, baina gomendagarria da pasahitz luzeagoa erabiltzea (esaldi bat, esaterako) edota karaktere desberdinak erabiltzea (hizki larriak, txikiak, zenbakiak eta karaktere bereziak).", "group_cannot_edit_all_users": "'all_users' taldea ezin da eskuz moldatu. YunoHosten izena emanda dauden erabiltzaile guztiak barne dituen talde berezia da", "invalid_number": "Zenbaki bat izan behar da", @@ -416,8 +406,6 @@ "diagnosis_ports_forwarding_tip": "Arazoa konpontzeko, litekeena da operadorearen routerrean ataken birbideraketa konfiguratu behar izatea, https://yunohost.org/isp_box_config-n agertzen den bezala", "domain_creation_failed": "Ezinezkoa izan da {domain} domeinua sortzea: {error}", "domains_available": "Erabilgarri dauden domeinuak:", - "global_settings_setting_pop3_enabled": "Gaitu POP3 protokoloa posta zerbitzarirako", - "global_settings_setting_security_ssh_port": "SSH ataka", "global_settings_unknown_type": "Gertaera ezezaguna, {setting} ezarpenak {unknown_type} mota duela dirudi baina mota hori ez da sistemarekin bateragarria.", "group_already_exist_on_system": "{group} taldea existitzen da dagoeneko sistemaren taldeetan", "diagnosis_processes_killed_by_oom_reaper": "Memoria agortu eta sistemak prozesu batzuk amaituarazi behar izan ditu. Honek esan nahi du sistemak ez duela memoria nahikoa edo prozesuren batek memoria gehiegi behar duela. Amaituarazi d(ir)en prozesua(k):\n{kills_summary}", @@ -440,7 +428,6 @@ "global_settings_reset_success": "Lehengo ezarpenak {path}-n gorde dira", "global_settings_unknown_setting_from_settings_file": "Gako ezezaguna ezarpenetan: '{setting_key}', baztertu eta gorde ezazu hemen: /etc/yunohost/settings-unknown.json", "domain_remove_confirm_apps_removal": "Domeinu hau ezabatzean aplikazio hauek desinstalatuko dira:\n{apps}\n\nZiur al zaude? [{answers}]", - "global_settings_setting_service_ssh_allow_deprecated_dsa_hostkey": "Baimendu DSA gakoa (zaharkitua) SSH zerbitzuaren konfiguraziorako", "hook_list_by_invalid": "Aukera hau ezin da 'hook'ak zerrendatzeko erabili", "installation_complete": "Instalazioa amaitu da", "hook_exec_failed": "Ezinezkoa izan da agindua exekutatzea: {path}", @@ -468,8 +455,6 @@ "global_settings_bad_type_for_setting": "{setting} ezarpenerako mota okerra. {received_type} ezarri da, {expected_type} espero zen", "diagnosis_mail_fcrdns_dns_missing": "Ez da alderantzizko DNSrik ezarri IPv{ipversion}rako. Litekeena da hartzaileak posta elektroniko batzuk jaso ezin izatea edo mezuok spam modura etiketatuak izatea.", "log_backup_create": "Sortu babeskopia fitxategia", - "global_settings_setting_backup_compress_tar_archives": "Babeskopia berriak sortzean, konprimitu fitxategiak (.tar.gz) konprimitu gabeko fitxategien (.tar) ordez. Aukera hau gaitzean babeskopiek espazio gutxiago beharko dute, baina hasierako prozesua luzeagoa izango da eta CPUari lan handiagoa eragingo dio.", - "global_settings_setting_security_webadmin_allowlist": "Administrazio-ataria bisita dezaketen IP helbideak, koma bidez bereiziak.", "global_settings_key_doesnt_exists": "'{settings_key}' gakoa ez da existitzen konfigurazio orokorrean; erabilgarri dauden gakoak ikus ditzakezu 'yunohost settings list' exekutatuz", "global_settings_setting_ssowat_panel_overlay_enabled": "Gaitu SSOwat paneleko \"overlay\"a", "log_backup_restore_system": "Lehengoratu sistema babeskopia fitxategi batetik", @@ -678,11 +663,25 @@ "migration_0021_cleaning_up": "Cachea eta erabilgarriak ez diren paketeak garbitzen…", "migration_0021_patch_yunohost_conflicts": "Arazo gatazkatsu bati adabakia jartzen…", "migration_description_0021_migrate_to_bullseye": "Eguneratu sistema Debian Bullseye eta Yunohost 11.x-ra", - "global_settings_setting_security_ssh_password_authentication": "Baimendu pasahitz bidezko autentikazioa SSHrako", "migration_0021_problematic_apps_warning": "Mesedez, kontuan izan ziur asko gatazkatsuak izango diren odorengo aplikazioak aurkitu direla. Badirudi ez zirela YunoHost aplikazioen katalogotik instalatu, edo ez daude 'badabiltza' bezala etiketatuak. Ondorioz, ezin da bermatu eguneratu ondoren funtzionatzen jarraituko dutenik: {problematic_apps}", "migration_0023_not_enough_space": "{path}-en ez dago toki nahikorik migrazioa abiarazteko.", "migration_0023_postgresql_11_not_installed": "PostgreSQL ez zegoen zure isteman instalatuta. Ez dago egitekorik.", "migration_0023_postgresql_13_not_installed": "PostgreSQL 11 dago instalatuta baina PostgreSQL 13 ez!? Zerbait arraroa gertatu omen zaio zure sistemari :( …", "migration_description_0022_php73_to_php74_pools": "Migratu php7.3-fpm 'pool' ezarpen-fitxategiak php7.4ra", - "migration_description_0023_postgresql_11_to_13": "Migratu datubaseak PostgreSQL 11tik 13ra" + "migration_description_0023_postgresql_11_to_13": "Migratu datubaseak PostgreSQL 11tik 13ra", + "global_settings_setting_backup_compress_tar_archives_help": "Babeskopia berriak sortzean, konprimitu fitxategiak (.tar.gz) konprimitu gabeko fitxategien (.tar) ordez. Aukera hau gaitzean babeskopiek espazio gutxiago beharko dute, baina hasierako prozesua luzeagoa izango da eta CPUari lan handiagoa eragingo dio.", + "global_settings_setting_security_experimental_enabled_help": "Gaitu segurtasun funtzio esperimentalak (ez ezazu egin ez badakizu zertan ari zaren!)", + "global_settings_setting_nginx_compatibility_help": "Bateragarritasun eta segurtasun arteko gatazka NGINX web zerbitzarirako. Zifraketari eragiten dio (eta segurtasunari lotutako beste kontu batzuei)", + "global_settings_setting_nginx_redirect_to_https_help": "Birbideratu HTTP eskaerak HTTPSra (EZ ITZALI hau ez badakizu zertan ari zaren!)", + "global_settings_setting_admin_strength": "Administrazio-pasahitzaren segurtasuna", + "global_settings_setting_user_strength": "Erabiltzaile-pasahitzaren segurtasuna", + "global_settings_setting_postfix_compatibility_help": "Bateragarritasun eta segurtasun arteko gatazka Postfix zerbitzarirako. Zifraketari eragiten dio (eta segurtasunari lotutako beste kontu batzuei)", + "global_settings_setting_ssh_compatibility_help": "Bateragarritasun eta segurtasun arteko gatazka SSH zerbitzarirako. Zifraketari eragiten dio (eta segurtasunari lotutako beste kontu batzuei)", + "global_settings_setting_ssh_password_authentication_help": "Baimendu pasahitz bidezko autentikazioa SSHrako", + "global_settings_setting_ssh_port": "SSH ataka", + "global_settings_setting_webadmin_allowlist_help": "Administrazio-ataria bisita dezaketen IP helbideak, koma bidez bereiziak.", + "global_settings_setting_webadmin_allowlist_enabled_help": "Baimendu IP zehatz batzuk bakarrik administrazio-atarian.", + "global_settings_setting_ssh_allow_deprecated_dsa_hostkey_help": "Baimendu DSA gakoa (zaharkitua) SSH zerbitzuaren konfiguraziorako", + "global_settings_setting_smtp_allow_ipv6_help": "Baimendu IPv6 posta elektronikoa jaso eta bidaltzeko", + "global_settings_setting_smtp_relay_enabled_help": "YunoHosten ordez posta elektronikoa bidaltzeko SMTP relay helbidea. Erabilgarri izan daiteke egoera hauetan: operadore edo VPS enpresak 25. ataka blokeatzen badu, DUHLen zure etxeko IPa ageri bada, ezin baduzu alderantzizko DNSa ezarri edo zerbitzari hau ez badago zuzenean internetera konektatuta baina posta elektronikoa bidali nahi baduzu." } \ No newline at end of file diff --git a/locales/fa.json b/locales/fa.json index 599ab1ea7..9ab48cdfa 100644 --- a/locales/fa.json +++ b/locales/fa.json @@ -302,25 +302,11 @@ "good_practices_about_user_password": "گذرواژه باید حداقل 8 کاراکتر باشد - اگرچه استفاده از گذرواژه طولانی تر تمرین خوبی است (به عنوان مثال عبارت عبور) و/یا استفاده از تنوع کاراکترها (بزرگ ، کوچک ، رقم و کاراکتر های خاص).", "good_practices_about_admin_password": "اکنون می خواهید گذرواژه جدیدی برای مدیریت تعریف کنید. گذرواژه باید حداقل 8 کاراکتر باشد - اگرچه استفاده از گذرواژه طولانی تر تمرین خوبی است (به عنوان مثال عبارت عبور) و/یا استفاده از تنوع کاراکترها (بزرگ ، کوچک ، رقم و کاراکتر های خاص).", "global_settings_unknown_type": "وضعیت غیرمنتظره ، به نظر می رسد که تنظیمات {setting} دارای نوع {unknown_type} است اما از نوع پشتیبانی شده توسط سیستم نیست.", - "global_settings_setting_backup_compress_tar_archives": "هنگام ایجاد پشتیبان جدید ، بایگانی های فشرده (.tar.gz) را به جای بایگانی های فشرده نشده (.tar) انتخاب کنید. N.B. : فعال کردن این گزینه به معنای ایجاد آرشیوهای پشتیبان سبک تر است ، اما روش پشتیبان گیری اولیه به طور قابل توجهی طولانی تر و سنگین تر بر روی CPU خواهد بود.", - "global_settings_setting_security_experimental_enabled": "فعال کردن ویژگی های امنیتی آزمایشی (اگر نمی دانید در حال انجام چه کاری هستید این کار را انجام ندهید!)", - "global_settings_setting_security_webadmin_allowlist": "آدرس های IP که مجاز به دسترسی مدیر وب هستند. جدا شده با ویرگول.", - "global_settings_setting_security_webadmin_allowlist_enabled": "فقط به برخی از IP ها اجازه دسترسی به مدیریت وب را بدهید.", "global_settings_setting_smtp_relay_password": "رمز عبور میزبان رله SMTP", "global_settings_setting_smtp_relay_user": "حساب کاربری رله SMTP", "global_settings_setting_smtp_relay_port": "پورت رله SMTP", - "global_settings_setting_smtp_relay_host": "میزبان رله SMTP برای ارسال نامه به جای این نمونه yunohost استفاده می شود. اگر در یکی از این شرایط قرار دارید مفید است: پورت 25 شما توسط ارائه دهنده ISP یا VPS شما مسدود شده است، شما یک IP مسکونی دارید که در DUHL ذکر شده است، نمی توانید DNS معکوس را پیکربندی کنید یا این سرور مستقیماً در اینترنت نمایش داده نمی شود و می خواهید از یکی دیگر برای ارسال ایمیل استفاده کنید.", - "global_settings_setting_smtp_allow_ipv6": "اجازه دهید از IPv6 برای دریافت و ارسال نامه استفاده شود", "global_settings_setting_ssowat_panel_overlay_enabled": "همپوشانی پانل SSOwat را فعال کنید", - "global_settings_setting_service_ssh_allow_deprecated_dsa_hostkey": "اجازه دهید از کلید میزبان DSA (منسوخ شده) برای پیکربندی SH daemon استفاده شود", "global_settings_unknown_setting_from_settings_file": "کلید ناشناخته در تنظیمات: '{setting_key}'، آن را کنار گذاشته و در /etc/yunohost/settings-unknown.json ذخیره کنید", - "global_settings_setting_security_ssh_port": "درگاه SSH", - "global_settings_setting_security_postfix_compatibility": "سازگاری در مقابل مبادله امنیتی برای سرور Postfix. روی رمزها (و سایر جنبه های مرتبط با امنیت) تأثیر می گذارد", - "global_settings_setting_security_ssh_compatibility": "سازگاری در مقابل مبادله امنیتی برای سرور SSH. روی رمزها (و سایر جنبه های مرتبط با امنیت) تأثیر می گذارد", - "global_settings_setting_security_password_user_strength": "قدرت رمز عبور کاربر", - "global_settings_setting_security_password_admin_strength": "قدرت رمز عبور مدیر", - "global_settings_setting_security_nginx_compatibility": "سازگاری در مقابل مبادله امنیتی برای وب سرور NGINX. روی رمزها (و سایر جنبه های مرتبط با امنیت) تأثیر می گذارد", - "global_settings_setting_pop3_enabled": "پروتکل POP3 را برای سرور ایمیل فعال کنید", "global_settings_reset_success": "تنظیمات قبلی اکنون در {path} پشتیبان گیری شده است", "global_settings_key_doesnt_exists": "کلید '{settings_key}' در تنظیمات جهانی وجود ندارد ، با اجرای 'لیست تنظیمات yunohost' می توانید همه کلیدهای موجود را مشاهده کنید", "global_settings_cant_write_settings": "فایل تنظیمات ذخیره نشد، به دلیل: {reason}", @@ -589,5 +575,18 @@ "permission_deletion_failed": "اجازه '{permission}' حذف نشد: {error}", "permission_deleted": "مجوز '{permission}' حذف شد", "permission_cant_add_to_all_users": "مجوز {permission} را نمی توان به همه کاربران اضافه کرد.", - "permission_currently_allowed_for_all_users": "این مجوز در حال حاضر به همه کاربران علاوه بر آن گروه های دیگر نیز اعطا شده. احتمالاً بخواهید مجوز 'all_users' را حذف کنید یا سایر گروه هایی را که در حال حاضر مجوز به آنها اعطا شده است را هم حذف کنید." + "permission_currently_allowed_for_all_users": "این مجوز در حال حاضر به همه کاربران علاوه بر آن گروه های دیگر نیز اعطا شده. احتمالاً بخواهید مجوز 'all_users' را حذف کنید یا سایر گروه هایی را که در حال حاضر مجوز به آنها اعطا شده است را هم حذف کنید.", + "global_settings_setting_backup_compress_tar_archives_help": "هنگام ایجاد پشتیبان جدید ، بایگانی های فشرده (.tar.gz) را به جای بایگانی های فشرده نشده (.tar) انتخاب کنید. N.B. : فعال کردن این گزینه به معنای ایجاد آرشیوهای پشتیبان سبک تر است ، اما روش پشتیبان گیری اولیه به طور قابل توجهی طولانی تر و سنگین تر بر روی CPU خواهد بود.", + "global_settings_setting_security_experimental_enabled_help": "فعال کردن ویژگی های امنیتی آزمایشی (اگر نمی دانید در حال انجام چه کاری هستید این کار را انجام ندهید!)", + "global_settings_setting_nginx_compatibility_help": "سازگاری در مقابل مبادله امنیتی برای وب سرور NGINX. روی رمزها (و سایر جنبه های مرتبط با امنیت) تأثیر می گذارد", + "global_settings_setting_admin_strength": "قدرت رمز عبور مدیر", + "global_settings_setting_user_strength": "قدرت رمز عبور کاربر", + "global_settings_setting_postfix_compatibility_help": "سازگاری در مقابل مبادله امنیتی برای سرور Postfix. روی رمزها (و سایر جنبه های مرتبط با امنیت) تأثیر می گذارد", + "global_settings_setting_ssh_compatibility_help": "سازگاری در مقابل مبادله امنیتی برای سرور SSH. روی رمزها (و سایر جنبه های مرتبط با امنیت) تأثیر می گذارد", + "global_settings_setting_ssh_port": "درگاه SSH", + "global_settings_setting_webadmin_allowlist_help": "آدرس های IP که مجاز به دسترسی مدیر وب هستند. جدا شده با ویرگول.", + "global_settings_setting_webadmin_allowlist_enabled_help": "فقط به برخی از IP ها اجازه دسترسی به مدیریت وب را بدهید.", + "global_settings_setting_ssh_allow_deprecated_dsa_hostkey_help": "اجازه دهید از کلید میزبان DSA (منسوخ شده) برای پیکربندی SH daemon استفاده شود", + "global_settings_setting_smtp_allow_ipv6_help": "اجازه دهید از IPv6 برای دریافت و ارسال نامه استفاده شود", + "global_settings_setting_smtp_relay_enabled_help": "میزبان رله SMTP برای ارسال نامه به جای این نمونه yunohost استفاده می شود. اگر در یکی از این شرایط قرار دارید مفید است: پورت 25 شما توسط ارائه دهنده ISP یا VPS شما مسدود شده است، شما یک IP مسکونی دارید که در DUHL ذکر شده است، نمی توانید DNS معکوس را پیکربندی کنید یا این سرور مستقیماً در اینترنت نمایش داده نمی شود و می خواهید از یکی دیگر برای ارسال ایمیل استفاده کنید." } \ No newline at end of file diff --git a/locales/fr.json b/locales/fr.json index 2773d0bee..a158d8767 100644 --- a/locales/fr.json +++ b/locales/fr.json @@ -300,9 +300,6 @@ "dpkg_is_broken": "Vous ne pouvez pas faire ça maintenant car dpkg/apt (le gestionnaire de paquets du système) semble avoir laissé des choses non configurées. Vous pouvez essayer de résoudre ce problème en vous connectant via SSH et en exécutant `sudo apt install --fix-broken` et/ou `sudo dpkg --configure -a'.", "dyndns_could_not_check_available": "Impossible de vérifier si {domain} est disponible chez {provider}.", "file_does_not_exist": "Le fichier dont le chemin est {path} n'existe pas.", - "global_settings_setting_security_password_admin_strength": "Qualité du mot de passe administrateur", - "global_settings_setting_security_password_user_strength": "Qualité du mot de passe de l'utilisateur", - "global_settings_setting_service_ssh_allow_deprecated_dsa_hostkey": "Autoriser l'utilisation de la clé hôte DSA (obsolète) pour la configuration du service SSH", "hook_json_return_error": "Échec de la lecture au retour du script {path}. Erreur : {msg}. Contenu brut : {raw_content}", "pattern_password_app": "Désolé, les mots de passe ne peuvent pas contenir les caractères suivants : {forbidden_chars}", "root_password_replaced_by_admin_password": "Votre mot de passe root a été remplacé par votre mot de passe administrateur.", @@ -326,9 +323,6 @@ "regenconf_now_managed_by_yunohost": "Le fichier de configuration '{conf}' est maintenant géré par YunoHost (catégorie {category}).", "regenconf_up_to_date": "La configuration est déjà à jour pour la catégorie '{category}'", "already_up_to_date": "Il n'y a rien à faire. Tout est déjà à jour.", - "global_settings_setting_security_nginx_compatibility": "Compatibilité versus compromis sécuritaire pour le serveur web Nginx. Affecte les cryptogrammes (et d'autres aspects liés à la sécurité)", - "global_settings_setting_security_ssh_compatibility": "Compatibilité versus compromis sécuritaire pour le serveur SSH. Affecte les cryptogrammes (et d'autres aspects liés à la sécurité)", - "global_settings_setting_security_postfix_compatibility": "Compatibilité versus compromis sécuritaire pour le serveur Postfix. Affecte les cryptogrammes (et d'autres aspects liés à la sécurité)", "regenconf_file_kept_back": "Le fichier de configuration '{conf}' devait être supprimé par 'regen-conf' (catégorie {category}) mais a été conservé.", "regenconf_updated": "La configuration a été mise à jour pour '{category}'", "regenconf_would_be_updated": "La configuration aurait dû être mise à jour pour la catégorie '{category}'", @@ -474,7 +468,6 @@ "diagnosis_services_bad_status_tip": "Vous pouvez essayer de redémarrer le service, et si cela ne fonctionne pas, consultez les journaux de service dans le webadmin (à partir de la ligne de commande, vous pouvez le faire avec yunohost service restart {service} et yunohost service log {service} ).", "diagnosis_http_bad_status_code": "Le système de diagnostique n'a pas réussi à contacter votre serveur. Il se peut qu'une autre machine réponde à la place de votre serveur. Vérifiez que le port 80 est correctement redirigé, que votre configuration Nginx est à jour et qu'un reverse-proxy n'interfère pas.", "diagnosis_http_timeout": "Expiration du délai en essayant de contacter votre serveur de l'extérieur. Il semble être inaccessible. Vérifiez que vous transférez correctement le port 80, que Nginx est en cours d'exécution et qu'un pare-feu n'interfère pas.", - "global_settings_setting_pop3_enabled": "Activer le protocole POP3 pour le serveur de messagerie", "log_app_action_run": "Lancer l'action de l'application '{}'", "diagnosis_never_ran_yet": "Il apparaît que le serveur a été installé récemment et qu'il n'y a pas encore eu de diagnostic. Vous devriez en lancer un depuis la webadmin ou en utilisant 'yunohost diagnosis run' depuis la ligne de commande.", "diagnosis_description_web": "Web", @@ -499,7 +492,6 @@ "diagnosis_mail_queue_ok": "{nb_pending} emails en attente dans les files d'attente de messagerie", "diagnosis_mail_queue_unavailable_details": "Erreur : {error}", "diagnosis_mail_queue_too_big": "Trop d'emails en attente dans la file d'attente ({nb_pending} emails)", - "global_settings_setting_smtp_allow_ipv6": "Autoriser l'utilisation d'IPv6 pour recevoir et envoyer du courrier", "diagnosis_display_tip": "Pour voir les problèmes détectés, vous pouvez accéder à la section Diagnostic du webadmin ou exécuter 'yunohost diagnosis show --issues --human-readable' à partir de la ligne de commande.", "diagnosis_ip_global": "IP globale : {global}", "diagnosis_ip_local": "IP locale : {local}", @@ -536,7 +528,6 @@ "regenconf_need_to_explicitly_specify_ssh": "La configuration de ssh a été modifiée manuellement. Vous devez explicitement indiquer la mention --force à \"ssh\" pour appliquer les changements.", "diagnosis_dns_try_dyndns_update_force": "La configuration DNS de ce domaine devrait être automatiquement gérée par YunoHost. Si ce n'est pas le cas, vous pouvez essayer de forcer une mise à jour en utilisant yunohost dyndns update --force.", "app_packaging_format_not_supported": "Cette application ne peut pas être installée car son format n'est pas pris en charge par votre version de YunoHost. Vous devriez probablement envisager de mettre à jour votre système.", - "global_settings_setting_backup_compress_tar_archives": "Lors de la création de nouvelles sauvegardes, compresser automatiquement les archives (.tar.gz) au lieu des archives non compressées (.tar). N.B. : activer cette option permet de créer des archives plus légères, mais la procédure de sauvegarde initiale sera significativement plus longues et plus gourmandes en CPU.", "diagnosis_processes_killed_by_oom_reaper": "Certains processus ont été arrêtés récemment par le système car il manquait de mémoire. Cela apparaît généralement quand le système manque de mémoire ou qu'un processus consomme trop de mémoire. Liste des processus tués :\n{kills_summary}", "ask_user_domain": "Domaine à utiliser pour l'adresse email de l'utilisateur et le compte XMPP", "app_manifest_install_ask_is_public": "Cette application devrait-elle être visible par les visiteurs anonymes ?", @@ -546,7 +537,6 @@ "app_manifest_install_ask_domain": "Choisissez le domaine sur lequel vous souhaitez installer cette application", "global_settings_setting_smtp_relay_user": "Compte utilisateur du relais SMTP", "global_settings_setting_smtp_relay_port": "Port du relais SMTP", - "global_settings_setting_smtp_relay_host": "Un relais SMTP permet d'envoyer du courrier à la place de cette instance YunoHost. Cela est utile si vous êtes dans l'une de ces situations : le port 25 est bloqué par votre FAI ou par votre fournisseur VPS, vous avez une IP résidentielle répertoriée sur DUHL, vous ne pouvez pas configurer de reverse DNS ou le serveur n'est pas directement accessible depuis Internet et que vous voulez en utiliser un autre pour envoyer des mails.", "diagnosis_package_installed_from_sury_details": "Certains paquets ont été installés par inadvertance à partir d'un dépôt tiers appelé Sury. L'équipe YunoHost a amélioré la stratégie de gestion de ces paquets, mais on s'attend à ce que certaines configurations qui ont installé des applications PHP7.3 tout en étant toujours sur Stretch présentent des incohérences. Pour résoudre cette situation, vous devez essayer d'exécuter la commande suivante : {cmd_to_fix}", "app_argument_password_no_default": "Erreur lors de l'analyse de l'argument de mot de passe '{name}' : l'argument de mot de passe ne peut pas avoir de valeur par défaut pour des raisons de sécurité", "pattern_email_forward": "L'adresse électronique doit être valide, le symbole '+' étant accepté (par exemple : johndoe+yunohost@exemple.com)", @@ -578,18 +568,14 @@ "migration_ldap_migration_failed_trying_to_rollback": "Impossible de migrer... tentative de restauration du système.", "migration_ldap_can_not_backup_before_migration": "La sauvegarde du système n'a pas pu être terminée avant l'échec de la migration. Erreur : {error }", "migration_ldap_backup_before_migration": "Création d'une sauvegarde de la base de données LDAP et des paramètres des applications avant la migration proprement dite.", - "global_settings_setting_security_ssh_port": "Port SSH", "diagnosis_sshd_config_inconsistent_details": "Veuillez exécuter yunohost settings set security.ssh.port -v VOTRE_PORT_SSH pour définir le port SSH, et vérifiez yunohost tools regen-conf ssh --dry-run --with-diff et yunohost tools regen-conf ssh --force pour réinitialiser votre configuration aux recommandations YunoHost.", "diagnosis_sshd_config_inconsistent": "Il semble que le port SSH a été modifié manuellement dans /etc/ssh/sshd_config. Depuis YunoHost 4.2, un nouveau paramètre global 'security.ssh.port' est disponible pour éviter de modifier manuellement la configuration.", "diagnosis_sshd_config_insecure": "La configuration SSH semble avoir été modifiée manuellement et n'est pas sécurisée car elle ne contient aucune directive 'AllowGroups' ou 'AllowUsers' pour limiter l'accès aux utilisateurs autorisés.", "backup_create_size_estimation": "L'archive contiendra environ {size} de données.", - "global_settings_setting_security_webadmin_allowlist": "Adresses IP autorisées à accéder à la webadmin. Elles doivent être séparées par une virgule.", - "global_settings_setting_security_webadmin_allowlist_enabled": "Autoriser seulement certaines IP à accéder à la webadmin.", "diagnosis_dns_specialusedomain": "Le domaine {domain} est basé sur un domaine de premier niveau (TLD) à usage spécial comme .local ou .test et ne devrait donc pas avoir d'enregistrements DNS réels.", "invalid_password": "Mot de passe incorrect", "ldap_server_is_down_restart_it": "Le service LDAP est en panne, essayez de le redémarrer...", "ldap_server_down": "Impossible d'atteindre le serveur LDAP", - "global_settings_setting_security_experimental_enabled": "Activer les fonctionnalités de sécurité expérimentales (ne l'activez pas si vous ne savez pas ce que vous faites !)", "diagnosis_apps_deprecated_practices": "La version installée de cette application utilise toujours certaines pratiques de packaging obsolètes. Vous devriez vraiment envisager de mettre l'application à jour.", "diagnosis_apps_outdated_ynh_requirement": "La version installée de cette application nécessite uniquement YunoHost >= 2.x, cela indique que l'application n'est pas à jour avec les bonnes pratiques de packaging et les helpers recommandées. Vous devriez vraiment envisager de mettre l'application à jour.", "diagnosis_apps_bad_quality": "Cette application est actuellement signalée comme cassée dans le catalogue d'applications de YunoHost. Cela peut être un problème temporaire. En attendant que les mainteneurs tentent de résoudre le problème, la mise à jour de cette application est désactivée.", @@ -607,7 +593,6 @@ "user_import_bad_line": "Ligne incorrecte {line} : {details}", "log_user_import": "Importer des utilisateurs", "diagnosis_high_number_auth_failures": "Il y a eu récemment un grand nombre d'échecs d'authentification. Assurez-vous que Fail2Ban est en cours d'exécution et est correctement configuré, ou utilisez un port personnalisé pour SSH comme expliqué dans https://yunohost.org/security.", - "global_settings_setting_security_nginx_redirect_to_https": "Rediriger les requêtes HTTP vers HTTPS par défaut (NE PAS DÉSACTIVER à moins de savoir vraiment ce que vous faites !)", "config_validate_color": "Doit être une couleur hexadécimale RVB valide", "app_config_unable_to_apply": "Échec de l'application des valeurs du panneau de configuration.", "app_config_unable_to_read": "Échec de la lecture des valeurs du panneau de configuration.", @@ -675,7 +660,6 @@ "migration_0021_patch_yunohost_conflicts": "Application du correctif pour contourner le problème de conflit...", "migration_0021_not_buster": "La distribution Debian actuelle n'est pas Buster !", "migration_description_0021_migrate_to_bullseye": "Mise à niveau du système vers Debian Bullseye et YunoHost 11.x", - "global_settings_setting_security_ssh_password_authentication": "Autoriser l'authentification par mot de passe pour SSH", "domain_config_default_app": "Application par défaut", "migration_description_0022_php73_to_php74_pools": "Migration des fichiers de configuration php7.3-fpm 'pool' vers php7.4", "migration_description_0023_postgresql_11_to_13": "Migration des bases de données de PostgreSQL 11 vers 13", @@ -684,5 +668,20 @@ "migration_0023_postgresql_13_not_installed": "PostgreSQL 11 est installé, mais pas PostgreSQL 13 ! ? Quelque chose d'anormal s'est peut-être produit sur votre système :(...", "tools_upgrade_failed": "Impossible de mettre à jour les paquets : {packages_list}", "migration_0023_not_enough_space": "Prévoyez suffisamment d'espace disponible dans {path} pour exécuter la migration.", - "migration_0023_postgresql_11_not_installed": "PostgreSQL n'a pas été installé sur votre système. Il n'y a rien à faire." -} + "migration_0023_postgresql_11_not_installed": "PostgreSQL n'a pas été installé sur votre système. Il n'y a rien à faire.", + "global_settings_setting_backup_compress_tar_archives_help": "Lors de la création de nouvelles sauvegardes, compresser automatiquement les archives (.tar.gz) au lieu des archives non compressées (.tar). N.B. : activer cette option permet de créer des archives plus légères, mais la procédure de sauvegarde initiale sera significativement plus longues et plus gourmandes en CPU.", + "global_settings_setting_security_experimental_enabled_help": "Activer les fonctionnalités de sécurité expérimentales (ne l'activez pas si vous ne savez pas ce que vous faites !)", + "global_settings_setting_nginx_compatibility_help": "Compatibilité versus compromis sécuritaire pour le serveur web Nginx. Affecte les cryptogrammes (et d'autres aspects liés à la sécurité)", + "global_settings_setting_nginx_redirect_to_https_help": "Rediriger les requêtes HTTP vers HTTPS par défaut (NE PAS DÉSACTIVER à moins de savoir vraiment ce que vous faites !)", + "global_settings_setting_admin_strength": "Qualité du mot de passe administrateur", + "global_settings_setting_user_strength": "Qualité du mot de passe de l'utilisateur", + "global_settings_setting_postfix_compatibility_help": "Compatibilité versus compromis sécuritaire pour le serveur Postfix. Affecte les cryptogrammes (et d'autres aspects liés à la sécurité)", + "global_settings_setting_ssh_compatibility_help": "Compatibilité versus compromis sécuritaire pour le serveur SSH. Affecte les cryptogrammes (et d'autres aspects liés à la sécurité)", + "global_settings_setting_ssh_password_authentication_help": "Autoriser l'authentification par mot de passe pour SSH", + "global_settings_setting_ssh_port": "Port SSH", + "global_settings_setting_webadmin_allowlist_help": "Adresses IP autorisées à accéder à la webadmin. Elles doivent être séparées par une virgule.", + "global_settings_setting_webadmin_allowlist_enabled_help": "Autoriser seulement certaines IP à accéder à la webadmin.", + "global_settings_setting_ssh_allow_deprecated_dsa_hostkey_help": "Autoriser l'utilisation de la clé hôte DSA (obsolète) pour la configuration du service SSH", + "global_settings_setting_smtp_allow_ipv6_help": "Autoriser l'utilisation d'IPv6 pour recevoir et envoyer du courrier", + "global_settings_setting_smtp_relay_enabled_help": "Un relais SMTP permet d'envoyer du courrier à la place de cette instance YunoHost. Cela est utile si vous êtes dans l'une de ces situations : le port 25 est bloqué par votre FAI ou par votre fournisseur VPS, vous avez une IP résidentielle répertoriée sur DUHL, vous ne pouvez pas configurer de reverse DNS ou le serveur n'est pas directement accessible depuis Internet et que vous voulez en utiliser un autre pour envoyer des mails." +} \ No newline at end of file diff --git a/locales/gl.json b/locales/gl.json index 4a77645d6..1aa987aac 100644 --- a/locales/gl.json +++ b/locales/gl.json @@ -308,17 +308,8 @@ "domain_cannot_add_xmpp_upload": "Non podes engadir dominios que comecen con 'xmpp-upload.'. Este tipo de nome está reservado para a función se subida de XMPP integrada en YunoHost.", "file_does_not_exist": "O ficheiro {path} non existe.", "firewall_reload_failed": "Non se puido recargar o cortalumes", - "global_settings_setting_smtp_allow_ipv6": "Permitir o uso de IPv6 para recibir e enviar emais", "global_settings_setting_ssowat_panel_overlay_enabled": "Activar as capas no panel SSOwat", - "global_settings_setting_service_ssh_allow_deprecated_dsa_hostkey": "Permitir o uso de DSA hostkey (en desuso) para a configuración do demoño SSH", "global_settings_unknown_setting_from_settings_file": "Chave descoñecida nos axustes: '{setting_key}', descártaa e gárdaa en /etc/yunohost/settings-unknown.json", - "global_settings_setting_security_ssh_port": "Porto SSH", - "global_settings_setting_security_postfix_compatibility": "Compromiso entre compatibilidade e seguridade para o servidor Postfix. Aféctalle ao cifrado (e outros aspectos da seguridade)", - "global_settings_setting_security_ssh_compatibility": "Compromiso entre compatibilidade e seguridade para o servidor SSH. Aféctalle ao cifrado (e outros aspectos da seguridade)", - "global_settings_setting_security_password_user_strength": "Fortaleza do contrasinal da usuaria", - "global_settings_setting_security_password_admin_strength": "Fortaleza do contrasinal de Admin", - "global_settings_setting_security_nginx_compatibility": "Compromiso entre compatiblidade e seguridade para o servidor NGINX. Afecta ao cifrado (e outros aspectos relacionados coa seguridade)", - "global_settings_setting_pop3_enabled": "Activar protocolo POP3 no servidor de email", "global_settings_reset_success": "Fíxose copia de apoio dos axustes en {path}", "global_settings_key_doesnt_exists": "O axuste '{settings_key}' non existe nos axustes globais, podes ver os valores dispoñibles executando 'yunohost settings list'", "global_settings_cant_write_settings": "Non se gardou o ficheiro de configuración, razón: {reason}", @@ -336,11 +327,9 @@ "good_practices_about_user_password": "Vas definir o novo contrasinal de usuaria. O contrasinal debe ter 8 caracteres como mínimo—aínda que se recomenda utilizar un máis longo (ex. unha frase de paso) e/ou utilizar caracteres variados (maiúsculas, minúsculas, números e caracteres especiais).", "good_practices_about_admin_password": "Vas definir o novo contrasinal de administración. O contrasinal debe ter 8 caracteres como mínimo—aínda que se recomenda utilizar un máis longo (ex. unha frase de paso) e/ou utilizar caracteres variados (maiúsculas, minúsculas, números e caracteres especiais).", "global_settings_unknown_type": "Situación non agardada, o axuste {setting} semella ter o tipo {unknown_type} pero non é un valor soportado polo sistema.", - "global_settings_setting_backup_compress_tar_archives": "Ao crear novas copias de apoio, comprime os arquivos (.tar.gz) en lugar de non facelo (.tar). Nota: activando esta opción creas arquivos máis lixeiros, mais o procedemento da primeira copia será significativamente máis longo e esixente coa CPU.", "global_settings_setting_smtp_relay_password": "Contrasinal no repetidor SMTP", "global_settings_setting_smtp_relay_user": "Conta de usuaria no repetidor SMTP", "global_settings_setting_smtp_relay_port": "Porto do repetidor SMTP", - "global_settings_setting_smtp_relay_host": "Servidor repetidor SMTP para enviar emails no lugar da túa instancia yunohost. É útil se estás nunha destas situacións: o teu porto 25 está bloqueado polo teu provedor ISP u VPN, se tes unha IP residencial nunha lista DUHL, se non podes configurar DNS inversa ou se este servidor non ten conexión directa a internet e queres utilizar outro para enviar os emails.", "group_updated": "Grupo '{group}' actualizado", "group_unknown": "Grupo descoñecido '{group}'", "group_deletion_failed": "Non se eliminou o grupo '{group}': {error}", @@ -349,8 +338,6 @@ "group_cannot_edit_primary_group": "O grupo '{group}' non se pode editar manualmente. É o grupo primario que contén só a unha usuaria concreta.", "group_cannot_edit_visitors": "O grupo 'visitors' non se pode editar manualmente. É un grupo especial que representa a tódas visitantes anónimas", "group_cannot_edit_all_users": "O grupo 'all_users' non se pode editar manualmente. É un grupo especial que contén tódalas usuarias rexistradas en YunoHost", - "global_settings_setting_security_webadmin_allowlist": "Enderezos IP con permiso para acceder á webadmin. Separados por vírgulas.", - "global_settings_setting_security_webadmin_allowlist_enabled": "Permitir que só algúns IPs accedan á webadmin.", "disk_space_not_sufficient_update": "Non hai espazo suficiente no disco para actualizar esta aplicación", "disk_space_not_sufficient_install": "Non queda espazo suficiente no disco para instalar esta aplicación", "log_help_to_get_log": "Para ver o rexistro completo da operación '{desc}', usa o comando 'yunohost log show {name}'", @@ -543,7 +530,6 @@ "invalid_password": "Contrasinal non válido", "ldap_server_is_down_restart_it": "O servidor LDAP está caído, intenta reinicialo...", "ldap_server_down": "Non se chegou ao servidor LDAP", - "global_settings_setting_security_experimental_enabled": "Activar características de seguridade experimentais (non actives isto se non sabes o que estás a facer!)", "yunohost_postinstall_end_tip": "Post-install completada! Para rematar a configuración considera:\n- engadir unha primeira usuaria na sección 'Usuarias' na webadmin (ou 'yunohost user create ' na liña de comandos);\n- diagnosticar potenciais problemas na sección 'Diagnóstico' na webadmin (ou 'yunohost diagnosis run' na liña de comandos);\n- ler 'Rematando a configuración' e 'Coñece YunoHost' na documentación da administración: https://yunohost.org/admindoc.", "yunohost_not_installed": "YunoHost non está instalado correctamente. Executa 'yunohost tools postinstall'", "yunohost_installing": "Instalando YunoHost...", @@ -592,7 +578,6 @@ "service_enabled": "O servizo '{service}' vai ser iniciado automáticamente no inicio do sistema.", "diagnosis_apps_allgood": "Tódalas apps instaladas respectan as prácticas básicas de empaquetado", "diagnosis_apps_bad_quality": "Esta aplicación está actualmente marcada como estragada no catálogo de aplicacións de YunoHost. Podería ser un problema temporal mentras as mantedoras intentan arranxar o problema. Ata ese momento a actualización desta app está desactivada.", - "global_settings_setting_security_nginx_redirect_to_https": "Redirixir peticións HTTP a HTTPs por defecto (NON DESACTIVAR ISTO a non ser que realmente saibas o que fas!)", "log_user_import": "Importar usuarias", "user_import_failed": "A operación de importación de usuarias fracasou", "user_import_missing_columns": "Faltan as seguintes columnas: {columns}", @@ -675,7 +660,6 @@ "migration_description_0021_migrate_to_bullseye": "Actualizar o sistema a Debian Bullseye e YunoHost 11.x", "migration_0021_system_not_fully_up_to_date": "O teu sistema non está completamente actualizado. Fai unha actualización normal antes de executar a migración a Bullseye.", "migration_0021_general_warning": "Ten en conta que a migración é unha operación delicada. O equipo de YunoHost fixo todo o que puido para revisalo e probalo, pero aínda así poderían acontecer fallos no sistema ou apps.\n\nAsí as cousas, é recomendable:\n - Facer unha copia de apoio dos datos e apps importantes. Máis info en https://yunohost.org/backup;\n - Ter paciencia unha vez inicias a migración: dependendo da túa conexión a internet e hardware, podería levarlle varias horas completar o proceso.", - "global_settings_setting_security_ssh_password_authentication": "Permitir autenticación con contrasinal para SSH", "tools_upgrade_failed": "Non se actualizaron os paquetes: {packages_list}", "migration_0023_not_enough_space": "Crear espazo suficiente en {path} para realizar a migración.", "migration_0023_postgresql_11_not_installed": "PostgreSQL non estaba instalado no sistema. Nada que facer.", @@ -684,5 +668,20 @@ "migration_description_0023_postgresql_11_to_13": "Migrar bases de datos de PostgreSQL 11 a 13", "service_description_postgresql": "Almacena datos da app (Base datos SQL)", "tools_upgrade": "Actualizando paquetes do sistema", - "domain_config_default_app": "App por defecto" + "domain_config_default_app": "App por defecto", + "global_settings_setting_backup_compress_tar_archives_help": "Ao crear novas copias de apoio, comprime os arquivos (.tar.gz) en lugar de non facelo (.tar). Nota: activando esta opción creas arquivos máis lixeiros, mais o procedemento da primeira copia será significativamente máis longo e esixente coa CPU.", + "global_settings_setting_security_experimental_enabled_help": "Activar características de seguridade experimentais (non actives isto se non sabes o que estás a facer!)", + "global_settings_setting_nginx_compatibility_help": "Compromiso entre compatiblidade e seguridade para o servidor NGINX. Afecta ao cifrado (e outros aspectos relacionados coa seguridade)", + "global_settings_setting_nginx_redirect_to_https_help": "Redirixir peticións HTTP a HTTPs por defecto (NON DESACTIVAR ISTO a non ser que realmente saibas o que fas!)", + "global_settings_setting_admin_strength": "Fortaleza do contrasinal de Admin", + "global_settings_setting_user_strength": "Fortaleza do contrasinal da usuaria", + "global_settings_setting_postfix_compatibility_help": "Compromiso entre compatibilidade e seguridade para o servidor Postfix. Aféctalle ao cifrado (e outros aspectos da seguridade)", + "global_settings_setting_ssh_compatibility_help": "Compromiso entre compatibilidade e seguridade para o servidor SSH. Aféctalle ao cifrado (e outros aspectos da seguridade)", + "global_settings_setting_ssh_password_authentication_help": "Permitir autenticación con contrasinal para SSH", + "global_settings_setting_ssh_port": "Porto SSH", + "global_settings_setting_webadmin_allowlist_help": "Enderezos IP con permiso para acceder á webadmin. Separados por vírgulas.", + "global_settings_setting_webadmin_allowlist_enabled_help": "Permitir que só algúns IPs accedan á webadmin.", + "global_settings_setting_ssh_allow_deprecated_dsa_hostkey_help": "Permitir o uso de DSA hostkey (en desuso) para a configuración do demoño SSH", + "global_settings_setting_smtp_allow_ipv6_help": "Permitir o uso de IPv6 para recibir e enviar emais", + "global_settings_setting_smtp_relay_enabled_help": "Servidor repetidor SMTP para enviar emails no lugar da túa instancia yunohost. É útil se estás nunha destas situacións: o teu porto 25 está bloqueado polo teu provedor ISP u VPN, se tes unha IP residencial nunha lista DUHL, se non podes configurar DNS inversa ou se este servidor non ten conexión directa a internet e queres utilizar outro para enviar os emails." } \ No newline at end of file diff --git a/locales/it.json b/locales/it.json index 844b756ea..a6b341ead 100644 --- a/locales/it.json +++ b/locales/it.json @@ -232,18 +232,12 @@ "global_settings_key_doesnt_exists": "La chiave '{settings_key}' non esiste nelle impostazioni globali, puoi vedere tutte le chiavi disponibili eseguendo 'yunohost settings list'", "global_settings_reset_success": "Le impostazioni precedenti sono state salvate in {path}", "already_up_to_date": "Niente da fare. Tutto è già aggiornato.", - "global_settings_setting_security_nginx_compatibility": "Bilanciamento tra compatibilità e sicurezza per il server web NGIX. Riguarda gli algoritmi di cifratura (e altri aspetti legati alla sicurezza)", - "global_settings_setting_security_password_admin_strength": "Complessità della password di amministratore", - "global_settings_setting_security_password_user_strength": "Complessità della password utente", - "global_settings_setting_security_ssh_compatibility": "Bilanciamento tra compatibilità e sicurezza per il server SSH. Riguarda gli algoritmi di cifratura (e altri aspetti legati alla sicurezza)", "global_settings_unknown_setting_from_settings_file": "Chiave sconosciuta nelle impostazioni: '{setting_key}', scartata e salvata in /etc/yunohost/settings-unknown.json", - "global_settings_setting_service_ssh_allow_deprecated_dsa_hostkey": "Consenti l'uso del hostkey DSA (deprecato) per la configurazione del demone SSH", "global_settings_unknown_type": "Situazione inaspettata, l'impostazione {setting} sembra essere di tipo {unknown_type} ma non è un tipo supportato dal sistema.", "good_practices_about_admin_password": "Stai per impostare una nuova password di amministratore. La password deve essere almeno di 8 caratteri - anche se è buona pratica utilizzare password più lunghe (es. una frase, una serie di parole) e/o utilizzare vari tipi di caratteri (maiuscole, minuscole, numeri e simboli).", "log_corrupted_md_file": "Il file dei metadati YAML associato con i registri è danneggiato: '{md_file}'\nErrore: {error}", "log_link_to_log": "Registro completo di questa operazione: '{desc}'", "log_help_to_get_log": "Per vedere il registro dell'operazione '{desc}', usa il comando 'yunohost log show {name}'", - "global_settings_setting_security_postfix_compatibility": "Bilanciamento tra compatibilità e sicurezza per il server Postfix. Riguarda gli algoritmi di cifratura (e altri aspetti legati alla sicurezza)", "log_link_to_failed_log": "Impossibile completare l'operazione '{desc}'! Per ricevere aiuto, per favore fornisci il registro completo dell'operazione cliccando qui", "log_help_to_get_failed_log": "L'operazione '{desc}' non può essere completata. Per ottenere aiuto, per favore condividi il registro completo dell'operazione utilizzando il comando 'yunohost log share {name}'", "log_does_exists": "Non esiste nessun registro delle operazioni chiamato '{log}', usa 'yunohost log list' per vedere tutti i registri delle operazioni disponibili", @@ -506,13 +500,9 @@ "group_already_exist_on_system_but_removing_it": "Il gruppo {group} esiste già tra i gruppi di sistema, ma YunoHost lo cancellerà...", "group_already_exist_on_system": "Il gruppo {group} esiste già tra i gruppi di sistema", "group_already_exist": "Il gruppo {group} esiste già", - "global_settings_setting_backup_compress_tar_archives": "Quando creo nuovi backup, usa un archivio (.tar.gz) al posto di un archivio non compresso (.tar). NB: abilitare quest'opzione significa create backup più leggeri, ma la procedura durerà di più e il carico CPU sarà maggiore.", "global_settings_setting_smtp_relay_password": "Password del relay SMTP", "global_settings_setting_smtp_relay_user": "User account del relay SMTP", "global_settings_setting_smtp_relay_port": "Porta del relay SMTP", - "global_settings_setting_smtp_relay_host": "Utilizza SMTP relay per inviare mail al posto di questa instanza yunohost. Utile se sei in una di queste situazioni: la tua porta 25 è bloccata dal tuo provider ISP o VPS; hai un IP residenziale listato su DUHL; non sei puoi configurare il DNS inverso; oppure questo server non è direttamente esposto a Internet e vuoi usarne un'altro per spedire email.", - "global_settings_setting_smtp_allow_ipv6": "Permetti l'utilizzo di IPv6 per ricevere e inviare mail", - "global_settings_setting_pop3_enabled": "Abilita il protocollo POP3 per il server mail", "dyndns_provider_unreachable": "Incapace di raggiungere il provider DynDNS {provider}: o il tuo YunoHost non è connesso ad internet o il server dynette è down.", "dpkg_lock_not_available": "Impossibile eseguire il comando in questo momento perché un altro programma sta bloccando dpkg (il package manager di sistema)", "domain_cannot_remove_main_add_new_one": "Non puoi rimuovere '{domain}' visto che è il dominio principale nonché il tuo unico dominio, devi prima aggiungere un altro dominio eseguendo 'yunohost domain add ', impostarlo come dominio principale con 'yunohost domain main-domain n ', e solo allora potrai rimuovere il dominio '{domain}' eseguendo 'yunohost domain remove {domain}'.'", @@ -574,20 +564,16 @@ "migration_ldap_backup_before_migration": "Sto generando il backup del database LDAP e delle impostazioni delle app prima di effettuare la migrazione.", "log_backup_create": "Crea un archivio backup", "global_settings_setting_ssowat_panel_overlay_enabled": "Abilita il pannello sovrapposto SSOwat", - "global_settings_setting_security_ssh_port": "Porta SSH", "diagnosis_sshd_config_inconsistent_details": "Esegui yunohost settings set security.ssh.port -v PORTA_SSH per definire la porta SSH, e controlla con yunohost tools regen-conf ssh --dry-run --with-diff, poi yunohost tools regen-conf ssh --force per resettare la tua configurazione con le raccomandazioni YunoHost.", "diagnosis_sshd_config_inconsistent": "Sembra che la porta SSH sia stata modificata manualmente in /etc/ssh/sshd_config: A partire da YunoHost 4.2, una nuova configurazione globale 'security.ssh.port' è disponibile per evitare di modificare manualmente la configurazione.", "diagnosis_sshd_config_insecure": "Sembra che la configurazione SSH sia stata modificata manualmente, ed non è sicuro dato che non contiene le direttive 'AllowGroups' o 'Allowusers' che limitano l'accesso agli utenti autorizzati.", "backup_create_size_estimation": "L'archivio conterrà circa {size} di dati.", "app_restore_script_failed": "C'è stato un errore all'interno dello script di recupero", - "global_settings_setting_security_webadmin_allowlist": "Indirizzi IP con il permesso di accedere al webadmin, separati da virgola.", - "global_settings_setting_security_webadmin_allowlist_enabled": "Permetti solo ad alcuni IP di accedere al webadmin.", "disk_space_not_sufficient_update": "Non c'è abbastanza spazio libero per aggiornare questa applicazione", "disk_space_not_sufficient_install": "Non c'è abbastanza spazio libero per installare questa applicazione", "app_config_unable_to_apply": "Applicazione dei valori nel pannello di configurazione non riuscita.", "app_config_unable_to_read": "Lettura dei valori nel pannello di configurazione non riuscita.", "diagnosis_apps_issue": "È stato rilevato un errore per l’app {app}", - "global_settings_setting_security_nginx_redirect_to_https": "Reindirizza richieste HTTP a HTTPs di default (NON DISABILITARE a meno che tu non sappia veramente bene cosa stai facendo!)", "diagnosis_http_special_use_tld": "Il dominio {domain} è basato su un dominio di primo livello (TLD) dall’uso speciale, come .local o .test, perciò non è previsto che sia esposto al di fuori della rete locale.", "domain_dns_conf_special_use_tld": "Questo dominio è basato su un dominio di primo livello (TLD) dall’uso speciale, come .local o .test, perciò non è previsto abbia reali record DNS.", "domain_dns_push_not_applicable": "La configurazione automatica del DNS non è applicabile al dominio {domain}. Dovresti configurare i tuoi record DNS manualmente, seguendo la documentazione su https://yunohost.org/dns_config.", @@ -615,7 +601,6 @@ "diagnosis_apps_allgood": "Tutte le applicazioni installate rispettano le pratiche di packaging di base", "config_apply_failed": "L’applicazione della nuova configurazione è fallita: {error}", "diagnosis_apps_outdated_ynh_requirement": "La versione installata di quest’app richiede esclusivamente YunoHost >= 2.x, che tendenzialmente significa che non è aggiornata secondo le pratiche di packaging raccomandate. Dovresti proprio considerare di aggiornarla.", - "global_settings_setting_security_experimental_enabled": "Abilita funzionalità di sicurezza sperimentali (non abilitare se non sai cosa stai facendo!)", "invalid_number_min": "Deve essere più grande di {min}", "invalid_number_max": "Deve essere meno di {max}", "log_app_config_set": "Applica la configurazione all’app '{}'", @@ -659,5 +644,19 @@ "user_import_bad_line": "Linea errata {line}: {details}", "config_validate_url": "È necessario inserire un URL web valido", "ldap_server_down": "Impossibile raggiungere il server LDAP", - "ldap_server_is_down_restart_it": "Il servizio LDAP è down, prova a riavviarlo…" + "ldap_server_is_down_restart_it": "Il servizio LDAP è down, prova a riavviarlo…", + "global_settings_setting_backup_compress_tar_archives_help": "Quando creo nuovi backup, usa un archivio (.tar.gz) al posto di un archivio non compresso (.tar). NB: abilitare quest'opzione significa create backup più leggeri, ma la procedura durerà di più e il carico CPU sarà maggiore.", + "global_settings_setting_security_experimental_enabled_help": "Abilita funzionalità di sicurezza sperimentali (non abilitare se non sai cosa stai facendo!)", + "global_settings_setting_nginx_compatibility_help": "Bilanciamento tra compatibilità e sicurezza per il server web NGIX. Riguarda gli algoritmi di cifratura (e altri aspetti legati alla sicurezza)", + "global_settings_setting_nginx_redirect_to_https_help": "Reindirizza richieste HTTP a HTTPs di default (NON DISABILITARE a meno che tu non sappia veramente bene cosa stai facendo!)", + "global_settings_setting_admin_strength": "Complessità della password di amministratore", + "global_settings_setting_user_strength": "Complessità della password utente", + "global_settings_setting_postfix_compatibility_help": "Bilanciamento tra compatibilità e sicurezza per il server Postfix. Riguarda gli algoritmi di cifratura (e altri aspetti legati alla sicurezza)", + "global_settings_setting_ssh_compatibility_help": "Bilanciamento tra compatibilità e sicurezza per il server SSH. Riguarda gli algoritmi di cifratura (e altri aspetti legati alla sicurezza)", + "global_settings_setting_ssh_port": "Porta SSH", + "global_settings_setting_webadmin_allowlist_help": "Indirizzi IP con il permesso di accedere al webadmin, separati da virgola.", + "global_settings_setting_webadmin_allowlist_enabled_help": "Permetti solo ad alcuni IP di accedere al webadmin.", + "global_settings_setting_ssh_allow_deprecated_dsa_hostkey_help": "Consenti l'uso del hostkey DSA (deprecato) per la configurazione del demone SSH", + "global_settings_setting_smtp_allow_ipv6_help": "Permetti l'utilizzo di IPv6 per ricevere e inviare mail", + "global_settings_setting_smtp_relay_enabled_help": "Utilizza SMTP relay per inviare mail al posto di questa instanza yunohost. Utile se sei in una di queste situazioni: la tua porta 25 è bloccata dal tuo provider ISP o VPS; hai un IP residenziale listato su DUHL; non sei puoi configurare il DNS inverso; oppure questo server non è direttamente esposto a Internet e vuoi usarne un'altro per spedire email." } \ No newline at end of file diff --git a/locales/kab.json b/locales/kab.json index 5daa7cef0..99edca7ad 100644 --- a/locales/kab.json +++ b/locales/kab.json @@ -11,4 +11,4 @@ "diagnosis_description_dnsrecords": "Ikalasen DNS", "diagnosis_description_web": "Réseau", "domain_created": "Taɣult tettwarna" -} +} \ No newline at end of file diff --git a/locales/nb_NO.json b/locales/nb_NO.json index e81d3af05..f6109e8bf 100644 --- a/locales/nb_NO.json +++ b/locales/nb_NO.json @@ -86,9 +86,7 @@ "dyndns_key_generating": "Oppretter DNS-nøkkel… Dette kan ta en stund.", "dyndns_no_domain_registered": "Inget domene registrert med DynDNS", "dyndns_registered": "DynDNS-domene registrert", - "global_settings_setting_security_password_admin_strength": "Admin-passordets styrke", "dyndns_registration_failed": "Kunne ikke registrere DynDNS-domene: {error}", - "global_settings_setting_security_password_user_strength": "Brukerpassordets styrke", "log_backup_restore_app": "Gjenopprett '{}' fra sikkerhetskopiarkiv", "log_remove_on_failed_install": "Fjern '{}' etter mislykket installasjon", "log_selfsigned_cert_install": "Installer selvsignert sertifikat på '{}'-domenet", @@ -115,5 +113,7 @@ "log_help_to_get_log": "For å vise loggen for operasjonen '{desc}', bruk kommandoen 'yunohost log show {name}'", "log_user_create": "Legg til '{}' bruker", "app_change_url_success": "{app} nettadressen er nå {domain}{path}", - "app_install_failed": "Kunne ikke installere {app}: {error}" + "app_install_failed": "Kunne ikke installere {app}: {error}", + "global_settings_setting_admin_strength": "Admin-passordets styrke", + "global_settings_setting_user_strength": "Brukerpassordets styrke" } \ No newline at end of file diff --git a/locales/oc.json b/locales/oc.json index a6afa32e6..857ab09cc 100644 --- a/locales/oc.json +++ b/locales/oc.json @@ -293,8 +293,6 @@ "backup_mount_archive_for_restore": "Preparacion de l’archiu per restauracion...", "dyndns_could_not_check_available": "Verificacion impossibla de la disponibilitat de {domain} sus {provider}.", "file_does_not_exist": "Lo camin {path} existís pas.", - "global_settings_setting_security_password_admin_strength": "Fòrça del senhal administrator", - "global_settings_setting_security_password_user_strength": "Fòrça del senhal utilizaire", "root_password_replaced_by_admin_password": "Lo senhal root es estat remplaçat pel senhal administrator.", "service_restarted": "Lo servici '{service}' es estat reaviat", "admin_password_too_long": "Causissètz un senhal d’almens 127 caractèrs", @@ -308,7 +306,6 @@ "log_regen_conf": "Regenerar las configuracions del sistèma « {} »", "service_reloaded_or_restarted": "Lo servici « {service} » es estat recargat o reaviat", "dpkg_is_broken": "Podètz pas far aquò pel moment perque dpkg/APT (los gestionaris de paquets del sistèma) sembla èsser mal configurat… Podètz ensajar de solucionar aquò en vos connectar via SSH e en executar « sudo dpkg --configure -a ».", - "global_settings_setting_service_ssh_allow_deprecated_dsa_hostkey": "Autorizar l’utilizacion de la clau òst DSA (obsolèta) per la configuracion del servici SSH", "hook_json_return_error": "Fracàs de la lectura del retorn de l’script {path}. Error : {msg}. Contengut brut : {raw_content}", "pattern_password_app": "O planhèm, los senhals devon pas conténer los caractèrs seguents : {forbidden_chars}", "regenconf_file_backed_up": "Lo fichièr de configuracion « {conf} » es estat salvagardat dins « {backup} »", @@ -325,9 +322,6 @@ "regenconf_dry_pending_applying": "Verificacion de la configuracion que seriá estada aplicada a la categoria « {category} »…", "regenconf_failed": "Regeneracion impossibla de la configuracion per la(s) categoria(s) : {categories}", "regenconf_pending_applying": "Aplicacion de la configuracion en espèra per la categoria « {category} »…", - "global_settings_setting_security_nginx_compatibility": "Solucion de compromés entre compatibilitat e seguretat pel servidor web NGINX Afècta los criptografs (e d’autres aspèctes ligats amb la seguretat)", - "global_settings_setting_security_ssh_compatibility": "Solucion de compromés entre compatibilitat e seguretat pel servidor SSH. Afècta los criptografs (e d’autres aspèctes ligats amb la seguretat)", - "global_settings_setting_security_postfix_compatibility": "Solucion de compromés entre compatibilitat e seguretat pel servidor Postfix. Afècta los criptografs (e d’autres aspèctes ligats amb la seguretat)", "service_reload_failed": "Impossible de recargar lo servici « {service} »\n\nJornal d’audit recent : {logs}", "service_restart_failed": "Impossible de reaviar lo servici « {service} »\n\nJornal d’audit recent : {logs}", "service_reload_or_restart_failed": "Impossible de recargar o reaviar lo servici « {service} »\n\nJornal d’audit recent : {logs}", @@ -453,7 +447,6 @@ "diagnosis_ip_broken_resolvconf": "La resolucion del nom de domeni sembla copada sul servidor, poiriá èsser ligada al fait que /etc/resolv.conf manda pas a 127.0.0.1.", "diagnosis_ip_weird_resolvconf": "La resolucion del nom de domeni sembla foncionar, mas sembla qu’utiilizatz un fichièr /etc/resolv.conf personalizat.", "diagnosis_diskusage_verylow": "Lo lòc d’emmagazinatge {mountpoint} (sul periferic {device}) a solament {free} ({free_percent}%). Deuriatz considerar de liberar un pauc d’espaci.", - "global_settings_setting_pop3_enabled": "Activar lo protocòl POP3 pel servidor de corrièr", "diagnosis_diskusage_ok": "Lo lòc d’emmagazinatge {mountpoint} (sul periferic {device}) a encara {free} ({free_percent}%) de liure !", "diagnosis_swap_none": "Lo sistèma a pas cap de memòria d’escambi. Auriatz de considerar d’ajustar almens {recommended} d’escambi per evitar las situacions ont lo sistèma manca de memòria.", "diagnosis_swap_notsomuch": "Lo sistèma a solament {total} de memòria d’escambi. Auriatz de considerar d’ajustar almens {recommended} d’escambi per evitar las situacions ont lo sistèma manca de memòria.", @@ -488,5 +481,11 @@ "diagnosis_domain_not_found_details": "Lo domeni {domain} existís pas a la basa de donadas WHOIS o a expirat !", "diagnosis_domain_expiration_not_found": "Impossible de verificar la data d’expiracion d’unes domenis", "backup_create_size_estimation": "L’archiu contendrà apr’aquí {size} de donadas.", - "app_restore_script_failed": "Una error s’es producha a l’interior del script de restauracion de l’aplicacion" + "app_restore_script_failed": "Una error s’es producha a l’interior del script de restauracion de l’aplicacion", + "global_settings_setting_nginx_compatibility_help": "Solucion de compromés entre compatibilitat e seguretat pel servidor web NGINX Afècta los criptografs (e d’autres aspèctes ligats amb la seguretat)", + "global_settings_setting_admin_strength": "Fòrça del senhal administrator", + "global_settings_setting_user_strength": "Fòrça del senhal utilizaire", + "global_settings_setting_postfix_compatibility_help": "Solucion de compromés entre compatibilitat e seguretat pel servidor Postfix. Afècta los criptografs (e d’autres aspèctes ligats amb la seguretat)", + "global_settings_setting_ssh_compatibility_help": "Solucion de compromés entre compatibilitat e seguretat pel servidor SSH. Afècta los criptografs (e d’autres aspèctes ligats amb la seguretat)", + "global_settings_setting_ssh_allow_deprecated_dsa_hostkey_help": "Autorizar l’utilizacion de la clau òst DSA (obsolèta) per la configuracion del servici SSH" } \ No newline at end of file diff --git a/locales/ru.json b/locales/ru.json index 1546c4d6e..b3042c82e 100644 --- a/locales/ru.json +++ b/locales/ru.json @@ -238,7 +238,6 @@ "regenconf_file_removed": "Файл конфигурации '{conf}' удален", "permission_not_found": "Разрешение '{permission}' не найдено", "group_cannot_edit_all_users": "Группа 'all_users' не может быть отредактирована вручную. Это специальная группа, предназначенная для всех пользователей, зарегистрированных в YunoHost", - "global_settings_setting_smtp_allow_ipv6": "Разрешить использование IPv6 для получения и отправки почты", "log_dyndns_subscribe": "Подписаться на субдомен YunoHost '{}'", "pattern_firstname": "Должно быть настоящее имя", "migrations_pending_cant_rerun": "Эти миграции еще не завершены, поэтому не могут быть запущены снова: {ids}", @@ -269,8 +268,6 @@ "group_cannot_be_deleted": "Группа {group} не может быть удалена вручную.", "log_app_config_set": "Примените конфигурацию приложения '{}'", "log_backup_restore_app": "Восстановление '{}' из резервной копии", - "global_settings_setting_security_webadmin_allowlist": "IP-адреса, разрешенные для доступа к веб-интерфейсу администратора. Разделенные запятыми.", - "global_settings_setting_security_webadmin_allowlist_enabled": "Разрешите доступ к веб-интерфейсу администратора только некоторым IP-адресам.", "log_domain_remove": "Удалить домен '{}' из конфигурации системы", "user_import_success": "Пользователи успешно импортированы", "group_user_already_in_group": "Пользователь {user} уже входит в группу {group}", @@ -284,7 +281,6 @@ "diagnosis_sshd_config_inconsistent_details": "Пожалуйста, выполните yunohost settings set security.ssh.port -v YOUR_SSH_PORT, чтобы определить порт SSH, и проверьте yunohost tools regen-conf ssh --dry-run --with-diff и yunohost tools regen-conf ssh --force, чтобы сбросить ваш conf в соответствии с рекомендациями YunoHost.", "log_domain_main_domain": "Сделать '{}' основным доменом", "diagnosis_sshd_config_insecure": "Похоже, что конфигурация SSH была изменена вручную, и она небезопасна, поскольку не содержит директив 'AllowGroups' или 'AllowUsers' для ограничения доступа авторизованных пользователей.", - "global_settings_setting_security_ssh_port": "SSH порт", "group_already_exist_on_system": "Группа {group} уже существует в системных группах", "group_already_exist_on_system_but_removing_it": "Группа {group} уже существует в системных группах, но YunoHost удалит ее...", "group_unknown": "Группа '{group}' неизвестна", @@ -303,7 +299,6 @@ "regenconf_failed": "Не удалось восстановить конфигурацию для категории(й): {categories}", "diagnosis_services_conf_broken": "Конфигурация нарушена для службы {service}!", "diagnosis_sshd_config_inconsistent": "Похоже, что порт SSH был вручную изменен в /etc/ssh/sshd_config. Начиная с версии YunoHost 4.2, доступен новый глобальный параметр 'security.ssh.port', позволяющий избежать ручного редактирования конфигурации.", - "global_settings_setting_service_ssh_allow_deprecated_dsa_hostkey": "Разрешить использование (устаревшего) ключа хоста DSA для конфигурации демона SSH", "hook_exec_not_terminated": "Скрипт не завершился должным образом: {path}", "ip6tables_unavailable": "Вы не можете играть с ip6tables здесь. Либо Вы находитесь в контейнере, либо ваше ядро это не поддерживает", "iptables_unavailable": "Вы не можете играть с ip6tables здесь. Либо Вы находитесь в контейнере, либо ваше ядро это не поддерживает", @@ -334,5 +329,10 @@ "log_app_remove": "Удалите приложение '{}'", "not_enough_disk_space": "Недостаточно свободного места в '{путь}'", "pattern_email_forward": "Должен быть корректный адрес электронной почты, символ '+' допустим (например, someone+tag@example.com)", - "permission_deletion_failed": "Не удалось удалить разрешение '{permission}': {error}" -} + "permission_deletion_failed": "Не удалось удалить разрешение '{permission}': {error}", + "global_settings_setting_ssh_port": "SSH порт", + "global_settings_setting_webadmin_allowlist_help": "IP-адреса, разрешенные для доступа к веб-интерфейсу администратора. Разделенные запятыми.", + "global_settings_setting_webadmin_allowlist_enabled_help": "Разрешите доступ к веб-интерфейсу администратора только некоторым IP-адресам.", + "global_settings_setting_ssh_allow_deprecated_dsa_hostkey_help": "Разрешить использование (устаревшего) ключа хоста DSA для конфигурации демона SSH", + "global_settings_setting_smtp_allow_ipv6_help": "Разрешить использование IPv6 для получения и отправки почты" +} \ No newline at end of file diff --git a/locales/sk.json b/locales/sk.json index ac9d565bc..a681d84e3 100644 --- a/locales/sk.json +++ b/locales/sk.json @@ -212,4 +212,4 @@ "diagnosis_http_could_not_diagnose_details": "Chyba: {error}", "diagnosis_http_hairpinning_issue": "Zdá sa, že Vaša miestna sieť nemá zapnutý NAT hairpinning.", "diagnosis_high_number_auth_failures": "V poslednom čase bol zistený neobvykle vysoký počet neúspešných prihlásení. Uistite sa, či je služba fail2ban spustená a správne nastavená alebo použite vlastný port pre SSH ako je popísané na https://yunohost.org/security." -} +} \ No newline at end of file diff --git a/locales/te.json b/locales/te.json index fa6ac91c8..0f7621dd7 100644 --- a/locales/te.json +++ b/locales/te.json @@ -15,4 +15,4 @@ "app_action_cannot_be_ran_because_required_services_down": "ఈ చర్యను అమలు చేయడానికి ఈ అవసరమైన సేవలు అమలు చేయబడాలి: {services}. కొనసాగడం కొరకు వాటిని పునఃప్రారంభించడానికి ప్రయత్నించండి (మరియు అవి ఎందుకు పనిచేయడం లేదో పరిశోధించవచ్చు).", "app_argument_choice_invalid": "ఆర్గ్యుమెంట్ '{name}' కొరకు చెల్లుబాటు అయ్యే వైల్యూ ఎంచుకోండి: '{value}' అనేది లభ్యం అవుతున్న ఎంపికల్లో ({Choices}) లేదు", "app_argument_password_no_default": "పాస్వర్డ్ ఆర్గ్యుమెంట్ '{name}'ని పార్సింగ్ చేసేటప్పుడు దోషం: భద్రతా కారణం కొరకు పాస్వర్డ్ ఆర్గ్యుమెంట్ డిఫాల్ట్ విలువను కలిగి ఉండరాదు" -} +} \ No newline at end of file diff --git a/locales/uk.json b/locales/uk.json index 9a32a597b..8c5022e3a 100644 --- a/locales/uk.json +++ b/locales/uk.json @@ -241,24 +241,11 @@ "good_practices_about_user_password": "Зараз ви збираєтеся поставити новий пароль користувача. Пароль повинен складатися не менше ніж з 8 символів, але хорошою практикою є використання більш довгого пароля (тобто гасла) і/або використання різних символів (великих, малих, цифр і спеціальних символів).", "good_practices_about_admin_password": "Зараз ви збираєтеся поставити новий пароль адміністрації. Пароль повинен складатися не менше ніж з 8 символів, але хорошою практикою є використання більш довгого пароля (тобто парольного гасла) і/або використання різних символів (великих, малих, цифр і спеціальних символів).", "global_settings_unknown_type": "Несподівана ситуація, налаштування {setting} має тип {unknown_type}, але це не тип, підтримуваний системою.", - "global_settings_setting_backup_compress_tar_archives": "При створенні нових резервних копій стискати архіви (.tar.gz) замість нестислих архівів (.tar). NB: вмикання цієї опції означає створення легших архівів резервних копій, але початкова процедура резервного копіювання буде значно довшою і важчою для CPU.", - "global_settings_setting_security_webadmin_allowlist": "IP-адреси, яким дозволений доступ до вебадміністрації. Через кому.", - "global_settings_setting_security_webadmin_allowlist_enabled": "Дозволити доступ до вебадміністрації тільки деяким IP-адресам.", "global_settings_setting_smtp_relay_password": "Пароль хоста SMTP-ретрансляції", "global_settings_setting_smtp_relay_user": "Обліковий запис користувача SMTP-ретрансляції", "global_settings_setting_smtp_relay_port": "Порт SMTP-ретрансляції", - "global_settings_setting_smtp_relay_host": "Хост SMTP-ретрансляції, який буде використовуватися для надсилання е-пошти замість цього зразка Yunohost. Корисно, якщо ви знаходитеся в одній із цих ситуацій: ваш 25 порт заблокований вашим провайдером або VPS провайдером, у вас є житловий IP в списку DUHL, ви не можете налаштувати зворотний DNS або цей сервер не доступний безпосередньо в Інтернеті і ви хочете використовувати інший сервер для відправки електронних листів.", - "global_settings_setting_smtp_allow_ipv6": "Дозволити використання IPv6 для отримання і надсилання листів е-пошти", "global_settings_setting_ssowat_panel_overlay_enabled": "Увімкнути накладення панелі SSOwat", - "global_settings_setting_service_ssh_allow_deprecated_dsa_hostkey": "Дозволити використання (застарілого) ключа DSA для конфігурації демона SSH", "global_settings_unknown_setting_from_settings_file": "Невідомий ключ в налаштуваннях: '{setting_key}', відхиліть його і збережіть у /etc/yunohost/settings-unknown.json", - "global_settings_setting_security_ssh_port": "SSH-порт", - "global_settings_setting_security_postfix_compatibility": "Компроміс між сумісністю і безпекою для сервера Postfix. Впливає на шифри (і інші аспекти, пов'язані з безпекою)", - "global_settings_setting_security_ssh_compatibility": "Компроміс між сумісністю і безпекою для SSH-сервера. Впливає на шифри (і інші аспекти, пов'язані з безпекою)", - "global_settings_setting_security_password_user_strength": "Надійність пароля користувача", - "global_settings_setting_security_password_admin_strength": "Надійність пароля адміністратора", - "global_settings_setting_security_nginx_compatibility": "Компроміс між сумісністю і безпекою для вебсервера NGINX. Впливає на шифри (і інші аспекти, пов'язані з безпекою)", - "global_settings_setting_pop3_enabled": "Увімкніть протокол POP3 для поштового сервера", "global_settings_reset_success": "Попередні налаштування тепер збережені в {path}", "global_settings_key_doesnt_exists": "Ключ '{settings_key}' не існує в глобальних налаштуваннях, ви можете побачити всі доступні ключі, виконавши команду 'yunohost settings list'", "global_settings_cant_write_settings": "Неможливо зберегти файл налаштувань, причина: {reason}", @@ -598,7 +585,6 @@ "log_user_import": "Імпорт користувачів", "ldap_server_is_down_restart_it": "Службу LDAP вимкнено, спробуйте перезапустити її...", "ldap_server_down": "Не вдається під'єднатися до сервера LDAP", - "global_settings_setting_security_experimental_enabled": "Увімкнути експериментальні функції безпеки (не вмикайте це, якщо ви не знаєте, що робите!)", "diagnosis_apps_deprecated_practices": "Установлена версія цього застосунку все ще використовує деякі надзастарілі практики упакування. Вам дійсно варто подумати про його оновлення.", "diagnosis_apps_outdated_ynh_requirement": "Установлена версія цього застосунку вимагає лише Yunohost >= 2.x, що, як правило, вказує на те, що воно не відповідає сучасним рекомендаційним практикам упакування та порадникам. Вам дійсно варто подумати про його оновлення.", "diagnosis_apps_bad_quality": "Цей застосунок наразі позначено як зламаний у каталозі застосунків YunoHost. Це може бути тимчасовою проблемою, поки організатори намагаються вирішити цю проблему. Тим часом оновлення цього застосунку вимкнено.", @@ -607,7 +593,6 @@ "diagnosis_apps_issue": "Виявлено проблему із застосунком {app}", "diagnosis_apps_allgood": "Усі встановлені застосунки дотримуються основних способів упакування", "diagnosis_high_number_auth_failures": "Останнім часом сталася підозріло велика кількість помилок автентифікації. Ви можете переконатися, що fail2ban працює і правильно налаштований, або скористатися власним портом для SSH, як описано в https://yunohost.org/security.", - "global_settings_setting_security_nginx_redirect_to_https": "Типово переспрямовувати HTTP-запити до HTTP (НЕ ВИМИКАЙТЕ, якщо ви дійсно не знаєте, що робите!)", "app_config_unable_to_apply": "Не вдалося застосувати значення панелі конфігурації.", "app_config_unable_to_read": "Не вдалося розпізнати значення панелі конфігурації.", "config_apply_failed": "Не вдалося застосувати нову конфігурацію: {error}", @@ -675,7 +660,6 @@ "migration_0021_system_not_fully_up_to_date": "Ваша система не повністю оновлена. Будь ласка, виконайте регулярне оновлення перед запуском міграції на Bullseye.", "migration_0021_general_warning": "Будь ласка, зверніть увагу, що ця міграція є делікатною операцією. Команда YunoHost зробила все можливе, щоб перевірити і протестувати її, але міграція все ще може порушити частину системи або її застосунків.\n\nТому рекомендовано:\n - Виконати резервне копіювання всіх важливих даних або застосунків. Подробиці на сайті https://yunohost.org/backup; \n - Наберіться терпіння після запуску міграції: В залежності від вашого з'єднання з Інтернетом і апаратного забезпечення, оновлення може зайняти до декількох годин.", "migration_description_0021_migrate_to_bullseye": "Оновлення системи до Debian Bullseye і YunoHost 11.x", - "global_settings_setting_security_ssh_password_authentication": "Дозволити автентифікацію паролем для SSH", "service_description_postgresql": "Зберігає дані застосунків (база даних SQL)", "domain_config_default_app": "Типовий застосунок", "migration_0023_postgresql_13_not_installed": "PostgreSQL 11 встановлено, але не PostgreSQL 13!? У вашій системі могло статися щось неприємне :(...", @@ -684,5 +668,20 @@ "tools_upgrade_failed": "Не вдалося оновити наступні пакети: {packages_list}", "migration_0023_not_enough_space": "Звільніть достатньо місця в {path} для виконання міграції.", "migration_0023_postgresql_11_not_installed": "PostgreSQL не було встановлено у вашій системі. Нічого робити.", - "migration_description_0022_php73_to_php74_pools": "Перенесення конфігураційних файлів php7.3-fpm 'pool' на php7.4" + "migration_description_0022_php73_to_php74_pools": "Перенесення конфігураційних файлів php7.3-fpm 'pool' на php7.4", + "global_settings_setting_backup_compress_tar_archives_help": "При створенні нових резервних копій стискати архіви (.tar.gz) замість нестислих архівів (.tar). NB: вмикання цієї опції означає створення легших архівів резервних копій, але початкова процедура резервного копіювання буде значно довшою і важчою для CPU.", + "global_settings_setting_security_experimental_enabled_help": "Увімкнути експериментальні функції безпеки (не вмикайте це, якщо ви не знаєте, що робите!)", + "global_settings_setting_nginx_compatibility_help": "Компроміс між сумісністю і безпекою для вебсервера NGINX. Впливає на шифри (і інші аспекти, пов'язані з безпекою)", + "global_settings_setting_nginx_redirect_to_https_help": "Типово переспрямовувати HTTP-запити до HTTP (НЕ ВИМИКАЙТЕ, якщо ви дійсно не знаєте, що робите!)", + "global_settings_setting_admin_strength": "Надійність пароля адміністратора", + "global_settings_setting_user_strength": "Надійність пароля користувача", + "global_settings_setting_postfix_compatibility_help": "Компроміс між сумісністю і безпекою для сервера Postfix. Впливає на шифри (і інші аспекти, пов'язані з безпекою)", + "global_settings_setting_ssh_compatibility_help": "Компроміс між сумісністю і безпекою для SSH-сервера. Впливає на шифри (і інші аспекти, пов'язані з безпекою)", + "global_settings_setting_ssh_password_authentication_help": "Дозволити автентифікацію паролем для SSH", + "global_settings_setting_ssh_port": "SSH-порт", + "global_settings_setting_webadmin_allowlist_help": "IP-адреси, яким дозволений доступ до вебадміністрації. Через кому.", + "global_settings_setting_webadmin_allowlist_enabled_help": "Дозволити доступ до вебадміністрації тільки деяким IP-адресам.", + "global_settings_setting_ssh_allow_deprecated_dsa_hostkey_help": "Дозволити використання (застарілого) ключа DSA для конфігурації демона SSH", + "global_settings_setting_smtp_allow_ipv6_help": "Дозволити використання IPv6 для отримання і надсилання листів е-пошти", + "global_settings_setting_smtp_relay_enabled_help": "Хост SMTP-ретрансляції, який буде використовуватися для надсилання е-пошти замість цього зразка Yunohost. Корисно, якщо ви знаходитеся в одній із цих ситуацій: ваш 25 порт заблокований вашим провайдером або VPS провайдером, у вас є житловий IP в списку DUHL, ви не можете налаштувати зворотний DNS або цей сервер не доступний безпосередньо в Інтернеті і ви хочете використовувати інший сервер для відправки електронних листів." } \ No newline at end of file diff --git a/locales/zh_Hans.json b/locales/zh_Hans.json index 2daf45483..e27a7473c 100644 --- a/locales/zh_Hans.json +++ b/locales/zh_Hans.json @@ -300,21 +300,11 @@ "group_already_exist": "群组{group}已经存在", "good_practices_about_admin_password": "现在,您将设置一个新的管理员密码。 密码至少应包含8个字符。并且出于安全考虑建议使用较长的密码同时尽可能使用各种字符(大写,小写,数字和特殊字符)。", "global_settings_unknown_type": "意外的情况,设置{setting}似乎具有类型 {unknown_type} ,但是系统不支持该类型。", - "global_settings_setting_backup_compress_tar_archives": "创建新备份时,请压缩档案(.tar.gz) ,而不要压缩未压缩的档案(.tar)。注意:启用此选项意味着创建较小的备份存档,但是初始备份过程将明显更长且占用大量CPU。", "global_settings_setting_smtp_relay_password": "SMTP中继主机密码", "global_settings_setting_smtp_relay_user": "SMTP中继用户帐户", "global_settings_setting_smtp_relay_port": "SMTP中继端口", - "global_settings_setting_smtp_allow_ipv6": "允许使用IPv6接收和发送邮件", "global_settings_setting_ssowat_panel_overlay_enabled": "启用SSOwat面板覆盖", - "global_settings_setting_service_ssh_allow_deprecated_dsa_hostkey": "允许使用DSA主机密钥进行SSH守护程序配置(不建议使用)", "global_settings_unknown_setting_from_settings_file": "设置中的未知密钥:'{setting_key}',将其丢弃并保存在/etc/yunohost/settings-unknown.json中", - "global_settings_setting_security_ssh_port": "SSH端口", - "global_settings_setting_security_postfix_compatibility": "Postfix服务器的兼容性与安全性的权衡。影响密码(以及其他与安全性有关的方面)", - "global_settings_setting_security_ssh_compatibility": "SSH服务器的兼容性与安全性的权衡。影响密码(以及其他与安全性有关的方面)", - "global_settings_setting_security_password_user_strength": "用户密码强度", - "global_settings_setting_security_password_admin_strength": "管理员密码强度", - "global_settings_setting_security_nginx_compatibility": "Web服务器NGINX的兼容性与安全性的权衡,影响密码(以及其他与安全性有关的方面)", - "global_settings_setting_pop3_enabled": "为邮件服务器启用POP3协议", "global_settings_reset_success": "以前的设置现在已经备份到{path}", "global_settings_key_doesnt_exists": "全局设置中不存在键'{settings_key}',您可以通过运行 'yunohost settings list'来查看所有可用键", "global_settings_cant_write_settings": "无法保存设置文件,原因: {reason}", @@ -455,7 +445,6 @@ "regenconf_up_to_date": "类别'{category}'的配置已经是最新的", "regenconf_file_kept_back": "配置文件'{conf}'预计将被regen-conf(类别{category})删除,但被保留了下来。", "good_practices_about_user_password": "现在,您将设置一个新的管理员密码。 密码至少应包含8个字符。并且出于安全考虑建议使用较长的密码同时尽可能使用各种字符(大写,小写,数字和特殊字符)", - "global_settings_setting_smtp_relay_host": "使用SMTP中继主机来代替这个YunoHost实例发送邮件。如果你有以下情况,就很有用:你的25端口被你的ISP或VPS提供商封锁,你有一个住宅IP列在DUHL上,你不能配置反向DNS,或者这个服务器没有直接暴露在互联网上,你想使用其他服务器来发送邮件。", "domain_cannot_remove_main_add_new_one": "你不能删除'{domain}',因为它是主域和你唯一的域,你需要先用'yunohost domain add '添加另一个域,然后用'yunohost domain main-domain -n '设置为主域,然后你可以用'yunohost domain remove {domain}'删除域", "domain_cannot_add_xmpp_upload": "你不能添加以'xmpp-upload.'开头的域名。这种名称是为YunoHost中集成的XMPP上传功能保留的。", "domain_cannot_remove_main": "你不能删除'{domain}',因为它是主域,你首先需要用'yunohost domain main-domain -n '设置另一个域作为主域;这里是候选域的列表: {other_domains}", @@ -604,5 +593,15 @@ "diagnosis_apps_allgood": "所有已安装的应用程序都遵守基本的打包原则", "diagnosis_apps_deprecated_practices": "此应用程序的安装 版本仍然使用一些超旧的弃用打包原则。推荐您升级它。", "diagnosis_apps_issue": "发现应用{ app } 存在问题", - "diagnosis_description_apps": "应用" + "diagnosis_description_apps": "应用", + "global_settings_setting_backup_compress_tar_archives_help": "创建新备份时,请压缩档案(.tar.gz) ,而不要压缩未压缩的档案(.tar)。注意:启用此选项意味着创建较小的备份存档,但是初始备份过程将明显更长且占用大量CPU。", + "global_settings_setting_nginx_compatibility_help": "Web服务器NGINX的兼容性与安全性的权衡,影响密码(以及其他与安全性有关的方面)", + "global_settings_setting_admin_strength": "管理员密码强度", + "global_settings_setting_user_strength": "用户密码强度", + "global_settings_setting_postfix_compatibility_help": "Postfix服务器的兼容性与安全性的权衡。影响密码(以及其他与安全性有关的方面)", + "global_settings_setting_ssh_compatibility_help": "SSH服务器的兼容性与安全性的权衡。影响密码(以及其他与安全性有关的方面)", + "global_settings_setting_ssh_port": "SSH端口", + "global_settings_setting_ssh_allow_deprecated_dsa_hostkey_help": "允许使用DSA主机密钥进行SSH守护程序配置(不建议使用)", + "global_settings_setting_smtp_allow_ipv6_help": "允许使用IPv6接收和发送邮件", + "global_settings_setting_smtp_relay_enabled_help": "使用SMTP中继主机来代替这个YunoHost实例发送邮件。如果你有以下情况,就很有用:你的25端口被你的ISP或VPS提供商封锁,你有一个住宅IP列在DUHL上,你不能配置反向DNS,或者这个服务器没有直接暴露在互联网上,你想使用其他服务器来发送邮件。" } \ No newline at end of file From 0ed05e221a4e6b04a8152818cfca7c1643edca82 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Sat, 6 Aug 2022 12:37:12 +0200 Subject: [PATCH 31/34] i18n: fix weird phrasing for fr translation... --- locales/fr.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/locales/fr.json b/locales/fr.json index a158d8767..a5ee23720 100644 --- a/locales/fr.json +++ b/locales/fr.json @@ -671,12 +671,12 @@ "migration_0023_postgresql_11_not_installed": "PostgreSQL n'a pas été installé sur votre système. Il n'y a rien à faire.", "global_settings_setting_backup_compress_tar_archives_help": "Lors de la création de nouvelles sauvegardes, compresser automatiquement les archives (.tar.gz) au lieu des archives non compressées (.tar). N.B. : activer cette option permet de créer des archives plus légères, mais la procédure de sauvegarde initiale sera significativement plus longues et plus gourmandes en CPU.", "global_settings_setting_security_experimental_enabled_help": "Activer les fonctionnalités de sécurité expérimentales (ne l'activez pas si vous ne savez pas ce que vous faites !)", - "global_settings_setting_nginx_compatibility_help": "Compatibilité versus compromis sécuritaire pour le serveur web Nginx. Affecte les cryptogrammes (et d'autres aspects liés à la sécurité)", + "global_settings_setting_nginx_compatibility_help": "Compromis 'compatibilité versus sécurité' pour le serveur web Nginx. Affecte les cryptogrammes utilisés (et d'autres aspects liés à la sécurité)", "global_settings_setting_nginx_redirect_to_https_help": "Rediriger les requêtes HTTP vers HTTPS par défaut (NE PAS DÉSACTIVER à moins de savoir vraiment ce que vous faites !)", "global_settings_setting_admin_strength": "Qualité du mot de passe administrateur", "global_settings_setting_user_strength": "Qualité du mot de passe de l'utilisateur", - "global_settings_setting_postfix_compatibility_help": "Compatibilité versus compromis sécuritaire pour le serveur Postfix. Affecte les cryptogrammes (et d'autres aspects liés à la sécurité)", - "global_settings_setting_ssh_compatibility_help": "Compatibilité versus compromis sécuritaire pour le serveur SSH. Affecte les cryptogrammes (et d'autres aspects liés à la sécurité)", + "global_settings_setting_postfix_compatibility_help": "Compromis 'compatibilité versus sécurité' pour le serveur Postfix. Affecte les cryptogrammes utilisés (et d'autres aspects liés à la sécurité)", + "global_settings_setting_ssh_compatibility_help": "Compromis 'compatibilité versus sécurité' pour le serveur SSH. Affecte les cryptogrammes utilisés (et d'autres aspects liés à la sécurité)", "global_settings_setting_ssh_password_authentication_help": "Autoriser l'authentification par mot de passe pour SSH", "global_settings_setting_ssh_port": "Port SSH", "global_settings_setting_webadmin_allowlist_help": "Adresses IP autorisées à accéder à la webadmin. Elles doivent être séparées par une virgule.", @@ -684,4 +684,4 @@ "global_settings_setting_ssh_allow_deprecated_dsa_hostkey_help": "Autoriser l'utilisation de la clé hôte DSA (obsolète) pour la configuration du service SSH", "global_settings_setting_smtp_allow_ipv6_help": "Autoriser l'utilisation d'IPv6 pour recevoir et envoyer du courrier", "global_settings_setting_smtp_relay_enabled_help": "Un relais SMTP permet d'envoyer du courrier à la place de cette instance YunoHost. Cela est utile si vous êtes dans l'une de ces situations : le port 25 est bloqué par votre FAI ou par votre fournisseur VPS, vous avez une IP résidentielle répertoriée sur DUHL, vous ne pouvez pas configurer de reverse DNS ou le serveur n'est pas directement accessible depuis Internet et que vous voulez en utiliser un autre pour envoyer des mails." -} \ No newline at end of file +} From 133d8b60c1955a0da54efd8fd9353bf9f8931519 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Sat, 6 Aug 2022 13:03:28 +0200 Subject: [PATCH 32/34] global settings: misc naming/ui/ux/i18n improvements --- hooks/conf_regen/15-nginx | 2 +- locales/en.json | 10 +++++----- locales/fr.json | 5 +++-- share/config_global.toml | 11 ++++++----- src/utils/legacy.py | 2 +- 5 files changed, 16 insertions(+), 14 deletions(-) diff --git a/hooks/conf_regen/15-nginx b/hooks/conf_regen/15-nginx index 482784d8d..fe5154cb9 100755 --- a/hooks/conf_regen/15-nginx +++ b/hooks/conf_regen/15-nginx @@ -56,7 +56,7 @@ do_pre_regen() { # install / update plain conf files cp plain/* "$nginx_conf_dir" # remove the panel overlay if this is specified in settings - panel_overlay=$(yunohost settings get 'misc.ssowat.ssowat_panel_overlay_enabled') + panel_overlay=$(yunohost settings get 'misc.portal.ssowat_panel_overlay_enabled') if [ "$panel_overlay" == "false" ] || [ "$panel_overlay" == "False" ]; then echo "#" >"${nginx_conf_dir}/yunohost_panel.conf.inc" fi diff --git a/locales/en.json b/locales/en.json index 6cfab9109..1180415ad 100644 --- a/locales/en.json +++ b/locales/en.json @@ -386,10 +386,10 @@ "global_settings_setting_smtp_allow_ipv6_help": "Allow the use of IPv6 to receive and send mail", "global_settings_setting_smtp_relay_enabled": "Enable SMTP relay", "global_settings_setting_smtp_relay_enabled_help": "Enable the SMTP relay to use in order to send mail instead of this yunohost instance. Useful if you are in one of this situation: your 25 port is blocked by your ISP or VPS provider, you have a residential IP listed on DUHL, you are not able to configure reverse DNS or this server is not directly exposed on the internet and you want use an other one to send mails.", - "global_settings_setting_smtp_relay_host": "Relay host", - "global_settings_setting_smtp_relay_password": "Relay password", - "global_settings_setting_smtp_relay_port": "Relay port", - "global_settings_setting_smtp_relay_user": "Relay user", + "global_settings_setting_smtp_relay_host": "SMTP relay host", + "global_settings_setting_smtp_relay_password": "SMTP relay password", + "global_settings_setting_smtp_relay_port": "SMTP relay port", + "global_settings_setting_smtp_relay_user": "SMTP relay user", "global_settings_setting_ssh_allow_deprecated_dsa_hostkey": "Allow DSA hostkey", "global_settings_setting_ssh_allow_deprecated_dsa_hostkey_help": "Allow the use of (deprecated) DSA hostkey for the SSH daemon configuration", "global_settings_setting_ssh_compatibility": "SSH Compatibility", @@ -397,7 +397,7 @@ "global_settings_setting_ssh_password_authentication": "Password authentication", "global_settings_setting_ssh_password_authentication_help": "Allow password authentication for SSH", "global_settings_setting_ssh_port": "SSH port", - "global_settings_setting_ssowat_panel_overlay_enabled": "SSOwat panel overlay", + "global_settings_setting_ssowat_panel_overlay_enabled": "Enable the small 'YunoHost' portal shortcut square on apps", "global_settings_setting_user_strength": "User password strength", "global_settings_setting_user_strength_help": "These requirements are only enforced when defining the password", "global_settings_setting_webadmin_allowlist": "Webadmin IP allowlist", diff --git a/locales/fr.json b/locales/fr.json index a5ee23720..fd807c8a5 100644 --- a/locales/fr.json +++ b/locales/fr.json @@ -535,12 +535,13 @@ "app_manifest_install_ask_password": "Choisissez un mot de passe administrateur pour cette application", "app_manifest_install_ask_path": "Choisissez le chemin d'URL (après le domaine) où cette application doit être installée", "app_manifest_install_ask_domain": "Choisissez le domaine sur lequel vous souhaitez installer cette application", + "global_settings_setting_smtp_relay_host": "Adresse du relais SMTP", "global_settings_setting_smtp_relay_user": "Compte utilisateur du relais SMTP", "global_settings_setting_smtp_relay_port": "Port du relais SMTP", "diagnosis_package_installed_from_sury_details": "Certains paquets ont été installés par inadvertance à partir d'un dépôt tiers appelé Sury. L'équipe YunoHost a amélioré la stratégie de gestion de ces paquets, mais on s'attend à ce que certaines configurations qui ont installé des applications PHP7.3 tout en étant toujours sur Stretch présentent des incohérences. Pour résoudre cette situation, vous devez essayer d'exécuter la commande suivante : {cmd_to_fix}", "app_argument_password_no_default": "Erreur lors de l'analyse de l'argument de mot de passe '{name}' : l'argument de mot de passe ne peut pas avoir de valeur par défaut pour des raisons de sécurité", "pattern_email_forward": "L'adresse électronique doit être valide, le symbole '+' étant accepté (par exemple : johndoe+yunohost@exemple.com)", - "global_settings_setting_smtp_relay_password": "Mot de passe du relais de l'hôte SMTP", + "global_settings_setting_smtp_relay_password": "Mot de passe du relais SMTP", "diagnosis_package_installed_from_sury": "Des paquets du système devraient être rétrogradé de version", "additional_urls_already_added": "URL supplémentaire '{url}' déjà ajoutée pour la permission '{permission}'", "unknown_main_domain_path": "Domaine ou chemin inconnu pour '{app}'. Vous devez spécifier un domaine et un chemin pour pouvoir spécifier une URL pour l'autorisation.", @@ -562,7 +563,7 @@ "app_restore_script_failed": "Une erreur s'est produite dans le script de restauration de l'application", "restore_backup_too_old": "Cette sauvegarde ne peut pas être restaurée car elle provient d'une version de YunoHost trop ancienne.", "log_backup_create": "Création d'une archive de sauvegarde", - "global_settings_setting_ssowat_panel_overlay_enabled": "Activer la superposition de la vignette SSOwat", + "global_settings_setting_ssowat_panel_overlay_enabled": "Activer la vignette 'YunoHost' (raccourci vers le portail) sur les apps", "migration_ldap_rollback_success": "Système rétabli dans son état initial.", "permission_cant_add_to_all_users": "L'autorisation {permission} ne peut pas être ajoutée à tous les utilisateurs.", "migration_ldap_migration_failed_trying_to_rollback": "Impossible de migrer... tentative de restauration du système.", diff --git a/share/config_global.toml b/share/config_global.toml index 775f02cdf..49a674627 100644 --- a/share/config_global.toml +++ b/share/config_global.toml @@ -43,7 +43,7 @@ name = "Security" default = false [security.nginx] - name = "NGINX" + name = "NGINX (web server)" [security.nginx.nginx_redirect_to_https] type = "boolean" default = true @@ -55,7 +55,7 @@ name = "Security" default = "intermediate" [security.postfix] - name = "Postfix" + name = "Postfix (SMTP email server)" [security.postfix.postfix_compatibility] type = "select" choices.intermediate = "Intermediate (allows TLS 1.2)" @@ -121,12 +121,13 @@ name = "Email" default = "" optional = true visible="smtp_relay_enabled" + help = "" # This is empty string on purpose, otherwise the core automatically set the 'good_practice_admin_password' string here which is not relevant, because the admin is not actually "choosing" the password ... [misc] name = "Other" - [misc.ssowat] - name = "SSOwat" - [misc.ssowat.ssowat_panel_overlay_enabled] + [misc.portal] + name = "User portal" + [misc.portal.ssowat_panel_overlay_enabled] type = "boolean" default = true diff --git a/src/utils/legacy.py b/src/utils/legacy.py index 4742318cb..1ef3c1023 100644 --- a/src/utils/legacy.py +++ b/src/utils/legacy.py @@ -79,7 +79,7 @@ LEGACY_SETTINGS = { "smtp.relay.user": "email.smtp.smtp_relay_user", "smtp.relay.password": "email.smtp.smtp_relay_password", "backup.compress_tar_archives": "misc.backup.backup_compress_tar_archives", - "ssowat.panel_overlay.enabled": "misc.ssowat.ssowat_panel_overlay_enabled", + "ssowat.panel_overlay.enabled": "misc.portal.ssowat_panel_overlay_enabled", "security.webadmin.allowlist.enabled": "security.webadmin.webadmin_allowlist_enabled", "security.webadmin.allowlist": "security.webadmin.webadmin_allowlist", "security.experimental.enabled": "security.experimental.security_experimental_enabled" From 66901e4f73e784c612742c8cec86e31e1586ab37 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Sat, 6 Aug 2022 13:05:54 +0200 Subject: [PATCH 33/34] global settings: drop the support old DSA hostkey support --- hooks/conf_regen/03-ssh | 5 ----- locales/en.json | 2 -- share/config_global.toml | 4 ---- src/utils/legacy.py | 1 - 4 files changed, 12 deletions(-) diff --git a/hooks/conf_regen/03-ssh b/hooks/conf_regen/03-ssh index eb548d4f4..832e07015 100755 --- a/hooks/conf_regen/03-ssh +++ b/hooks/conf_regen/03-ssh @@ -14,11 +14,6 @@ do_pre_regen() { ssh_keys=$(ls /etc/ssh/ssh_host_{ed25519,rsa,ecdsa}_key 2>/dev/null || true) - # Support legacy setting (this setting might be disabled by a user during a migration) - if [[ "$(yunohost settings get 'security.ssh.ssh_allow_deprecated_dsa_hostkey')" == "True" ]]; then - ssh_keys="$ssh_keys $(ls /etc/ssh/ssh_host_dsa_key 2>/dev/null || true)" - fi - # Support different strategy for security configurations export compatibility="$(yunohost settings get 'security.ssh.ssh_compatibility')" export port="$(yunohost settings get 'security.ssh.ssh_port')" diff --git a/locales/en.json b/locales/en.json index 1180415ad..dd0361424 100644 --- a/locales/en.json +++ b/locales/en.json @@ -390,8 +390,6 @@ "global_settings_setting_smtp_relay_password": "SMTP relay password", "global_settings_setting_smtp_relay_port": "SMTP relay port", "global_settings_setting_smtp_relay_user": "SMTP relay user", - "global_settings_setting_ssh_allow_deprecated_dsa_hostkey": "Allow DSA hostkey", - "global_settings_setting_ssh_allow_deprecated_dsa_hostkey_help": "Allow the use of (deprecated) DSA hostkey for the SSH daemon configuration", "global_settings_setting_ssh_compatibility": "SSH Compatibility", "global_settings_setting_ssh_compatibility_help": "Compatibility vs. security tradeoff for the SSH server. Affects the ciphers (and other security-related aspects). See https://infosec.mozilla.org/guidelines/openssh for more info.", "global_settings_setting_ssh_password_authentication": "Password authentication", diff --git a/share/config_global.toml b/share/config_global.toml index 49a674627..f64ef65a7 100644 --- a/share/config_global.toml +++ b/share/config_global.toml @@ -38,10 +38,6 @@ name = "Security" type = "boolean" default = true - [security.ssh.ssh_allow_deprecated_dsa_hostkey] - type = "boolean" - default = false - [security.nginx] name = "NGINX (web server)" [security.nginx.nginx_redirect_to_https] diff --git a/src/utils/legacy.py b/src/utils/legacy.py index 1ef3c1023..df6c10025 100644 --- a/src/utils/legacy.py +++ b/src/utils/legacy.py @@ -68,7 +68,6 @@ LEGACY_SETTINGS = { "security.ssh.compatibility": "security.ssh.ssh_compatibility", "security.ssh.port": "security.ssh.ssh_port", "security.ssh.password_authentication": "security.ssh.ssh_password_authentication", - "service.ssh.allow_deprecated_dsa_hostkey": "security.ssh.ssh_allow_deprecated_dsa_hostkey", "security.nginx.redirect_to_https": "security.nginx.nginx_redirect_to_https", "security.nginx.compatibility": "security.nginx.nginx_compatibility", "security.postfix.compatibility": "security.postfix.postfix_compatibility", From 324c03e6ae95457eeccdc7abf1a889394a2ec513 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Tue, 9 Aug 2022 16:41:20 +0200 Subject: [PATCH 34/34] Move setting migration to 0025 instead of 0024 because of the new python venv migration --- locales/en.json | 2 +- ...to_configpanel.py => 0025_global_settings_to_configpanel.py} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename src/migrations/{0024_global_settings_to_configpanel.py => 0025_global_settings_to_configpanel.py} (100%) diff --git a/locales/en.json b/locales/en.json index 7ba471995..6755771aa 100644 --- a/locales/en.json +++ b/locales/en.json @@ -521,8 +521,8 @@ "migration_description_0021_migrate_to_bullseye": "Upgrade the system to Debian Bullseye and YunoHost 11.x", "migration_description_0022_php73_to_php74_pools": "Migrate php7.3-fpm 'pool' conf files to php7.4", "migration_description_0023_postgresql_11_to_13": "Migrate databases from PostgreSQL 11 to 13", - "migration_description_0024_global_settings_to_configpanel": "Migrate legacy global settings nomenclature to the new, modern nomenclature", "migration_description_0024_rebuild_python_venv": "Repair python app after bullseye migration", + "migration_description_0025_global_settings_to_configpanel": "Migrate legacy global settings nomenclature to the new, modern nomenclature", "migration_ldap_backup_before_migration": "Creating a backup of LDAP database and apps settings prior to the actual migration.", "migration_ldap_can_not_backup_before_migration": "The backup of the system could not be completed before the migration failed. Error: {error}", "migration_ldap_migration_failed_trying_to_rollback": "Could not migrate... trying to roll back the system.", diff --git a/src/migrations/0024_global_settings_to_configpanel.py b/src/migrations/0025_global_settings_to_configpanel.py similarity index 100% rename from src/migrations/0024_global_settings_to_configpanel.py rename to src/migrations/0025_global_settings_to_configpanel.py