From 1fe1a0e0cdef2b614e6727bb42709b1867439722 Mon Sep 17 00:00:00 2001 From: Spitap Date: Wed, 8 Nov 2023 14:13:29 +0100 Subject: [PATCH] Added visibility rule, better labeling --- modoboa/admin/api/v2/serializers.py | 4 +++- modoboa/admin/app_settings.py | 14 +++++++++----- modoboa/admin/lib.py | 2 +- modoboa/admin/tests/test_mx.py | 4 ++-- modoboa/core/tests/test_views.py | 11 ++++++++++- modoboa/dnstools/lib.py | 2 +- 6 files changed, 26 insertions(+), 11 deletions(-) diff --git a/modoboa/admin/api/v2/serializers.py b/modoboa/admin/api/v2/serializers.py index 187d622d0..e3e44227a 100644 --- a/modoboa/admin/api/v2/serializers.py +++ b/modoboa/admin/api/v2/serializers.py @@ -181,7 +181,7 @@ class AdminGlobalParametersSerializer(serializers.Serializer): enable_mx_checks = serializers.BooleanField(default=True) valid_mxs = serializers.CharField(allow_blank=True) domains_must_have_authorized_mx = serializers.BooleanField(default=False) - enable_ipv6_checks = serializers.BooleanField(default=True) + enable_ipv6_mx_checks = serializers.BooleanField(default=True) enable_spf_checks = serializers.BooleanField(default=True) enable_dkim_checks = serializers.BooleanField(default=True) enable_dmarc_checks = serializers.BooleanField(default=True) @@ -275,6 +275,8 @@ class AdminGlobalParametersSerializer(serializers.Serializer): raise serializers.ValidationError({ "valid_mxs": _("Define at least one authorized network / address") }) + if not data.get("enable_mx_checks"): + data["enable_ipv6_mx_checks"] = False return data diff --git a/modoboa/admin/app_settings.py b/modoboa/admin/app_settings.py index 9db25e8d8..eb97ec8e4 100644 --- a/modoboa/admin/app_settings.py +++ b/modoboa/admin/app_settings.py @@ -50,11 +50,11 @@ class AdminParametersForm(param_forms.AdminParametersForm): ) ) - enable_ipv6_checks = YesNoField( + enable_ipv6_mx_checks = YesNoField( label=gettext_lazy("Enable IPV6 checks"), initial=True, help_text=gettext_lazy( - "Check if every domain has a valid AAAA record" + "Check if MX setup for ipv6 is valid" ) ) @@ -202,7 +202,8 @@ class AdminParametersForm(param_forms.AdminParametersForm): # Visibility rules visibility_rules = { "valid_mxs": "enable_mx_checks=True", - "domains_must_have_authorized_mx": "enable_mx_checks=True" + "domains_must_have_authorized_mx": "enable_mx_checks=True", + "enable_ipv6_mx_checks": "enable_mx_checks=True" } def __init__(self, *args, **kwargs): @@ -300,6 +301,8 @@ class AdminParametersForm(param_forms.AdminParametersForm): "valid_mxs", _("Define at least one authorized network / address") ) + if not cleaned_data.get("enable_mx_checks"): + cleaned_data["enable_ipv6_mx_checks"] = False return cleaned_data @@ -330,10 +333,11 @@ GLOBAL_PARAMETERS_STRUCT = collections.OrderedDict([ "does not use one of the defined addresses." ) }), - ("enable_ipv6_checks", { + ("enable_ipv6_mx_checks", { "label": gettext_lazy("Enable IPV6 checks"), + "display": "enable_mx_checks=true", "help_text": gettext_lazy( - "Check if every domain has a valid IPV6 record" + "Check if MX setup for ipv6 is valid" ) }), ("enable_spf_checks", { diff --git a/modoboa/admin/lib.py b/modoboa/admin/lib.py index 18be9ed8d..a1100cfc9 100644 --- a/modoboa/admin/lib.py +++ b/modoboa/admin/lib.py @@ -227,7 +227,7 @@ def get_domain_mx_list(domain): mx_domain = dns_answer.exchange.to_unicode( omit_final_dot=True, idna_codec=IDNA_2008_UTS_46) rtypes = ["A"] - if param_tools.get_global_parameter("enable_ipv6_checks", app="admin"): + if param_tools.get_global_parameter("enable_ipv6_mx_checks", app="admin"): rtypes.append("AAAA") for rtype in rtypes: ip_answers = get_dns_records(mx_domain, rtype, resolver) diff --git a/modoboa/admin/tests/test_mx.py b/modoboa/admin/tests/test_mx.py index f63a8164e..a8718483d 100644 --- a/modoboa/admin/tests/test_mx.py +++ b/modoboa/admin/tests/test_mx.py @@ -179,7 +179,7 @@ class MXTestCase(ModoTestCase): mock_query.side_effect = utils.mock_dns_query_result mock_ip_address.side_effect = utils.mock_ip_address_result localconfig = core_models.LocalConfig.objects.first() - localconfig.parameters.set_value("enable_ipv6_checks", True, "admin") + localconfig.parameters.set_value("enable_ipv6_mx_checks", True, "admin") localconfig.save() with LogCapture("modoboa.admin") as log: get_domain_mx_list("test3.com") @@ -189,7 +189,7 @@ class MXTestCase(ModoTestCase): % "mx3.example.com") ) localconfig = core_models.LocalConfig.objects.first() - localconfig.parameters.set_value("enable_ipv6_checks", False, "admin") + localconfig.parameters.set_value("enable_ipv6_mx_checks", False, "admin") localconfig.save() with LogCapture("modoboa.admin") as log2: get_domain_mx_list("test3.com") diff --git a/modoboa/core/tests/test_views.py b/modoboa/core/tests/test_views.py index 39cb4b777..f60106438 100644 --- a/modoboa/core/tests/test_views.py +++ b/modoboa/core/tests/test_views.py @@ -51,7 +51,7 @@ SETTINGS_SAMPLE = { "core-ldap_admin_groups": "", "core-ldap_groups_search_base": "", "admin-enable_mx_checks": "True", - "admin-enable_ipv6_checks": "True", + "admin-enable_ipv6_mx_checks": "True", "core-ldap_search_base": "", "admin-valid_mxs": "", "limits-deflt_user_domains_limit": "0", @@ -265,6 +265,15 @@ sha512crypt is not one of the available choices."]}, self.assertIn( "sms_ovh_application_secret", errors["form_errors"]) + def test_mx_check_settings_clean(self): + settings = SETTINGS_SAMPLE.copy() + settings["admin-enable_mx_checks"] = False + url = reverse("core:parameters") + response = self.client.post(url, settings, format="json") + self.assertEqual(response.status_code, 200) + self.assertFalse( + param_tools.get_global_parameter("enable_ipv6_mx_checks", "admin") + ) class UserSettings(param_forms.UserParametersForm): """Stupid user settings form.""" diff --git a/modoboa/dnstools/lib.py b/modoboa/dnstools/lib.py index 1c2acb03c..e9edbb7f1 100644 --- a/modoboa/dnstools/lib.py +++ b/modoboa/dnstools/lib.py @@ -45,7 +45,7 @@ def get_dmarc_record(domain): def _get_simple_record(name): """We just want to know if name is declared.""" rtypes = ["A", "CNAME"] - if param_tools.get_global_parameter("enable_IPV6_checks", app="admin"): + if param_tools.get_global_parameter("enable_ipv6_mx_checks", app="admin"): rtypes.append("AAAA") for rdtype in rtypes: records = admin_lib.get_dns_records(name, rdtype)