From ce77b66a2e8ccf49d33474fd651c834817f32fa9 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Mon, 6 Feb 2017 07:27:30 +0100 Subject: [PATCH 1/4] Control DNS checks per domain. WIP --- modoboa/admin/forms/domain.py | 4 ++-- .../management/commands/subcommands/_mx.py | 3 ++- .../0008_domain_enable_dns_checks.py | 20 +++++++++++++++++++ modoboa/admin/models/domain.py | 4 ++++ .../admin/_domain_dnschecks_status.html | 15 ++++++++++++++ .../admin/templates/admin/domain_detail.html | 14 +------------ .../templates/admin/domain_general_form.html | 1 + .../admin/templates/admin/domains_table.html | 13 +----------- modoboa/admin/tests/test_mx.py | 2 ++ 9 files changed, 48 insertions(+), 28 deletions(-) create mode 100644 modoboa/admin/migrations/0008_domain_enable_dns_checks.py create mode 100644 modoboa/admin/templates/admin/_domain_dnschecks_status.html diff --git a/modoboa/admin/forms/domain.py b/modoboa/admin/forms/domain.py index 682acdf3a..57cd80618 100644 --- a/modoboa/admin/forms/domain.py +++ b/modoboa/admin/forms/domain.py @@ -28,7 +28,6 @@ DOMAIN_TYPES = [ class DomainFormGeneral(forms.ModelForm, DynamicForm): - """A form to create/edit a domain.""" type = forms.ChoiceField( @@ -53,7 +52,8 @@ class DomainFormGeneral(forms.ModelForm, DynamicForm): class Meta: model = Domain - fields = ("name", "type", "quota", "aliases", "enabled") + fields = ( + "name", "type", "quota", "aliases", "enabled", "enable_dns_checks") def __init__(self, *args, **kwargs): self.oldname = None diff --git a/modoboa/admin/management/commands/subcommands/_mx.py b/modoboa/admin/management/commands/subcommands/_mx.py index 0528f3e12..b80f21bf6 100644 --- a/modoboa/admin/management/commands/subcommands/_mx.py +++ b/modoboa/admin/management/commands/subcommands/_mx.py @@ -252,7 +252,8 @@ class CheckMXRecords(BaseCommand): except models.Domain.DoesNotExist: pass else: - domains = models.Domain.objects.filter(enabled=True) + domains = models.Domain.objects.filter( + enabled=True, enable_dnsbl_checks=True) options.pop("domain") diff --git a/modoboa/admin/migrations/0008_domain_enable_dns_checks.py b/modoboa/admin/migrations/0008_domain_enable_dns_checks.py new file mode 100644 index 000000000..c7be468fe --- /dev/null +++ b/modoboa/admin/migrations/0008_domain_enable_dns_checks.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.12 on 2017-02-06 06:13 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('admin', '0007_auto_20161104_1915'), + ] + + operations = [ + migrations.AddField( + model_name='domain', + name='enable_dns_checks', + field=models.BooleanField(default=True, help_text='Check to enable DNS checks for this domain', verbose_name='Enable DNS checks'), + ), + ] diff --git a/modoboa/admin/models/domain.py b/modoboa/admin/models/domain.py index 290759d32..b8d09695f 100644 --- a/modoboa/admin/models/domain.py +++ b/modoboa/admin/models/domain.py @@ -50,6 +50,10 @@ class Domain(AdminObject): ) owners = GenericRelation(ObjectAccess) type = models.CharField(default="domain", max_length=20) + enable_dns_checks = models.BooleanField( + ugettext_lazy("Enable DNS checks"), default=True, + help_text=ugettext_lazy("Check to enable DNS checks for this domain") + ) objects = DomainManager() diff --git a/modoboa/admin/templates/admin/_domain_dnschecks_status.html b/modoboa/admin/templates/admin/_domain_dnschecks_status.html new file mode 100644 index 000000000..a06a00667 --- /dev/null +++ b/modoboa/admin/templates/admin/_domain_dnschecks_status.html @@ -0,0 +1,15 @@ +{% load i18n %} + +{% trans "DNS status" %} +{% if not domain.enable_dns_checks or domain.uses_a_reserved_tld %} + {% trans "Disabled" context "checks" %} +{% elif domain.awaiting_checks %} + {% trans "Awaiting checks" %} +{% else %} + {% if enable_mx_checks %} + MX + {% endif %} + {% if enable_dnsbl_checks %} + DNSBL + {% endif %} +{% endif %} diff --git a/modoboa/admin/templates/admin/domain_detail.html b/modoboa/admin/templates/admin/domain_detail.html index c3cb76215..71272cf05 100644 --- a/modoboa/admin/templates/admin/domain_detail.html +++ b/modoboa/admin/templates/admin/domain_detail.html @@ -23,19 +23,7 @@
{% if enable_mx_checks or enable_dnsbl_checks %}
- {% trans "DNS status" %} - {% if domain.uses_a_reserved_tld %} - {% trans "Disabled" context "checks" %} - {% elif domain.awaiting_checks %} - {% trans "Awaiting checks" %} - {% else %} - {% if enable_mx_checks %} - MX - {% endif %} - {% if enable_dnsbl_checks %} - DNSBL - {% endif %} - {% endif %} + {% include "admin/_domain_dnschecks_status.html" %}
{% endif %}
diff --git a/modoboa/admin/templates/admin/domain_general_form.html b/modoboa/admin/templates/admin/domain_general_form.html index 3657ab58b..06c2590b1 100644 --- a/modoboa/admin/templates/admin/domain_general_form.html +++ b/modoboa/admin/templates/admin/domain_general_form.html @@ -4,3 +4,4 @@ {% render_field form.quota appended_text=_("MB") %} {% render_fields_group form "aliases" %} {% render_field form.enabled %} +{% render_field form.enable_dns_checks %} diff --git a/modoboa/admin/templates/admin/domains_table.html b/modoboa/admin/templates/admin/domains_table.html index 5fee00aae..e35022a56 100644 --- a/modoboa/admin/templates/admin/domains_table.html +++ b/modoboa/admin/templates/admin/domains_table.html @@ -8,18 +8,7 @@ {% if enable_mx_checks or enable_dnsbl_checks %} - {% if domain.uses_a_reserved_tld %} - {% trans "Disabled" context "checks" %} - {% elif domain.awaiting_checks %} - {% trans "Awaiting checks" %} - {% else %} - {% if enable_mx_checks %} - MX - {% endif %} - {% if enable_dnsbl_checks %} - DNSBL - {% endif %} - {% endif %} + {% include "admin/_domain_dnschecks_status.html" %} {% endif %} diff --git a/modoboa/admin/tests/test_mx.py b/modoboa/admin/tests/test_mx.py index 6e811bf6b..306ac56fa 100644 --- a/modoboa/admin/tests/test_mx.py +++ b/modoboa/admin/tests/test_mx.py @@ -74,6 +74,8 @@ class DNSBLTestCase(ModoTestCase): factories.DomainFactory(name="pouet.com") # should not exist cls.domain2 = factories.DomainFactory( name="test.localhost") # Should not be checked + cls.domain3 = factories.DomainFactory( + name="modoboa.com", enable_dns_checks=False) models.DNSBLResult.objects.all().delete() @override_settings(DNSBL_PROVIDERS=["zen.spamhaus.org"]) From a5bd489f26fe6a396ca3b3213d6cf514d39df0e5 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Mon, 6 Feb 2017 18:05:33 +0100 Subject: [PATCH 2/4] Fixed wrong queryset. see #1017 --- modoboa/admin/management/commands/subcommands/_mx.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modoboa/admin/management/commands/subcommands/_mx.py b/modoboa/admin/management/commands/subcommands/_mx.py index b80f21bf6..e559daf14 100644 --- a/modoboa/admin/management/commands/subcommands/_mx.py +++ b/modoboa/admin/management/commands/subcommands/_mx.py @@ -253,7 +253,7 @@ class CheckMXRecords(BaseCommand): pass else: domains = models.Domain.objects.filter( - enabled=True, enable_dnsbl_checks=True) + enabled=True, enable_dns_checks=True) options.pop("domain") From d000569acfedbb0df819d0663c99dec48be76030 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Mon, 6 Feb 2017 18:56:44 +0100 Subject: [PATCH 3/4] Fixed domain listing display. see #1017 --- modoboa/admin/templates/admin/_domain_dnschecks_status.html | 1 - modoboa/admin/templates/admin/domain_detail.html | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/modoboa/admin/templates/admin/_domain_dnschecks_status.html b/modoboa/admin/templates/admin/_domain_dnschecks_status.html index a06a00667..1e123a4ae 100644 --- a/modoboa/admin/templates/admin/_domain_dnschecks_status.html +++ b/modoboa/admin/templates/admin/_domain_dnschecks_status.html @@ -1,6 +1,5 @@ {% load i18n %} -{% trans "DNS status" %} {% if not domain.enable_dns_checks or domain.uses_a_reserved_tld %} {% trans "Disabled" context "checks" %} {% elif domain.awaiting_checks %} diff --git a/modoboa/admin/templates/admin/domain_detail.html b/modoboa/admin/templates/admin/domain_detail.html index 71272cf05..349c9e3c4 100644 --- a/modoboa/admin/templates/admin/domain_detail.html +++ b/modoboa/admin/templates/admin/domain_detail.html @@ -23,6 +23,7 @@
{% if enable_mx_checks or enable_dnsbl_checks %}
+ {% trans "DNS status" %} {% include "admin/_domain_dnschecks_status.html" %}
{% endif %} From 285d782ab4bc45531952518f46eaf8ec63ee4d67 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Wed, 8 Feb 2017 09:37:10 +0100 Subject: [PATCH 4/4] Improved unit test. --- modoboa/admin/tests/test_mx.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modoboa/admin/tests/test_mx.py b/modoboa/admin/tests/test_mx.py index 306ac56fa..1aa59656e 100644 --- a/modoboa/admin/tests/test_mx.py +++ b/modoboa/admin/tests/test_mx.py @@ -85,6 +85,8 @@ class DNSBLTestCase(ModoTestCase): management.call_command("modo", "check_mx") self.assertTrue( models.DNSBLResult.objects.filter(domain=self.domain).exists()) + self.assertFalse( + models.DNSBLResult.objects.filter(domain=self.domain3).exists()) response = self.client.get( reverse("admin:dnsbl_domain_detail", args=[self.domain.pk])) self.assertEqual(response.status_code, 200)