diff --git a/frontend/src/components/DomainList.vue b/frontend/src/components/DomainList.vue deleted file mode 100644 index e5469b574..000000000 --- a/frontend/src/components/DomainList.vue +++ /dev/null @@ -1,55 +0,0 @@ - - - diff --git a/frontend/src/components/DomainForm.vue b/frontend/src/components/domains/DomainForm.vue similarity index 52% rename from frontend/src/components/DomainForm.vue rename to frontend/src/components/domains/DomainForm.vue index e20b494bb..e2129e5fc 100644 --- a/frontend/src/components/DomainForm.vue +++ b/frontend/src/components/domains/DomainForm.vue @@ -3,15 +3,49 @@

Add domain

+ :message="formErrors && formErrors.name ? formErrors.name[0] : ''" + horizontal> + :message="formErrors && formErrors.quota ? formErrors.quota[0] : ''" + horizontal> +

+ MB +

- - + + +

+ MB +

+
+ + + + + + + + + + + + + + + + +

+ +

+

+ +

@@ -62,7 +96,17 @@ export default { position: 'is-bottom' }) }, this.onSaveError) + }, + cancel () { + this.$router.push({ name: 'DomainList' }) } } } + + diff --git a/frontend/src/components/domains/DomainList.vue b/frontend/src/components/domains/DomainList.vue new file mode 100644 index 000000000..cf416cb3e --- /dev/null +++ b/frontend/src/components/domains/DomainList.vue @@ -0,0 +1,84 @@ + + + diff --git a/frontend/src/router/index.js b/frontend/src/router/index.js index 37aa263d4..9f65b0b64 100644 --- a/frontend/src/router/index.js +++ b/frontend/src/router/index.js @@ -1,7 +1,7 @@ import Vue from 'vue' import Router from 'vue-router' -import DomainList from '@/components/DomainList' -import DomainForm from '@/components/DomainForm' +import DomainList from '@/components/domains/DomainList' +import DomainForm from '@/components/domains/DomainForm' Vue.use(Router) diff --git a/modoboa/admin/models/domain.py b/modoboa/admin/models/domain.py index 5d14044ba..c04175a1b 100644 --- a/modoboa/admin/models/domain.py +++ b/modoboa/admin/models/domain.py @@ -158,6 +158,27 @@ class Domain(AdminObject): return True return False + @cached_property + def dns_status(self): + """Return information about current DNS status.""" + if not self.enable_dns_checks or self.uses_a_reserved_tld: + return {"checks": "disabled"} + elif self.awaiting_checks(): + return {"checks": "pending"} + result = {"checks": "active"} + config = dict(param_tools.get_global_parameters("admin")) + if config["enable_mx_checks"]: + result["mx"] = "ok" if self.mxrecord_set.has_valids() else "ko" + if config["enable_dnsbl_checks"]: + if not self.dnsblresult_set.exists(): + status = "unknown" + elif self.dnsblresult_set.blacklisted().exists(): + status = "ko" + else: + status = "ok" + result["dnsbl"] = status + return result + @cached_property def dnsbl_status_color(self): """Shortcut to DNSBL results.""" diff --git a/modoboa/admin/serializers.py b/modoboa/admin/serializers.py index cf5a7fd80..47db4d216 100644 --- a/modoboa/admin/serializers.py +++ b/modoboa/admin/serializers.py @@ -37,7 +37,9 @@ class DomainSerializer(serializers.ModelSerializer): "mailbox_count", "mbalias_count", "domainalias_count" ) read_only_fields = ( - "pk", "mailbox_count", "mbalias_count", "domainalias_count" + "pk", "dkim_public_key", "dns_status", "allocated_quota_in_percent" + "mailbox_count", "mbalias_count", "domainalias_count", + "enable_dns_checks" ) def validate_name(self, value):