From ce77b66a2e8ccf49d33474fd651c834817f32fa9 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Mon, 6 Feb 2017 07:27:30 +0100 Subject: [PATCH] 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"])