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 @@
-
-
-
-
-
Domains
-
-
- Add
-
-
-
-
-
-
-
-
-
-
- {{ props.row.name }}
-
-
-
-
-
-
-
-
-
-
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
@@ -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 @@
+
+
+
+
+
Domains
+
+
+ Add
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ props.row.name }}
+
+
+ Disabled
+ Pending
+
+ MX
+ DNSBL
+
+
+
+
+
+
+
+
+
+
+
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):