diff --git a/modoboa/admin/forms/account.py b/modoboa/admin/forms/account.py index 33ba3b618..60a61d110 100644 --- a/modoboa/admin/forms/account.py +++ b/modoboa/admin/forms/account.py @@ -147,7 +147,7 @@ class AccountFormGeneral(forms.ModelForm): def clean_username(self): """username must be a valid email address for simple users.""" - username = self.cleaned_data["username"] + username = self.cleaned_data["username"].lower() if "role" not in self.cleaned_data: return username if self.cleaned_data["role"] != "SimpleUsers" and "@" not in username: diff --git a/modoboa/admin/forms/domain.py b/modoboa/admin/forms/domain.py index 5cc3f4a9d..b8a927b6b 100644 --- a/modoboa/admin/forms/domain.py +++ b/modoboa/admin/forms/domain.py @@ -76,7 +76,7 @@ class DomainFormGeneral(forms.ModelForm, DynamicForm): def clean_name(self): """Check unicity and more.""" - name = self.cleaned_data["name"] + name = self.cleaned_data["name"].lower() label = lib.check_if_domain_exists( name, [(DomainAlias, _("domain alias"))]) if label is not None: diff --git a/modoboa/admin/models/alias.py b/modoboa/admin/models/alias.py index 3056d6155..98a360c09 100644 --- a/modoboa/admin/models/alias.py +++ b/modoboa/admin/models/alias.py @@ -175,7 +175,7 @@ class Alias(AdminObject): """Create a new alias from a CSV file entry.""" if len(row) < expected_elements: raise BadRequest(_("Invalid line: %s" % row)) - address = row[1].strip() + address = row[1].strip().lower() localpart, domname = split_mailbox(address) try: domain = Domain.objects.get(name=domname) diff --git a/modoboa/admin/models/domain.py b/modoboa/admin/models/domain.py index 60ee94427..5d14044ba 100644 --- a/modoboa/admin/models/domain.py +++ b/modoboa/admin/models/domain.py @@ -297,7 +297,7 @@ class Domain(AdminObject): if len(row) < 5: raise BadRequest(_("Invalid line")) - self.name = row[1].strip() + self.name = row[1].strip().lower() if Domain.objects.filter(name=self.name).exists(): raise Conflict domains_must_have_authorized_mx = ( diff --git a/modoboa/admin/models/domain_alias.py b/modoboa/admin/models/domain_alias.py index 3fec21047..917039911 100644 --- a/modoboa/admin/models/domain_alias.py +++ b/modoboa/admin/models/domain_alias.py @@ -72,7 +72,7 @@ class DomainAlias(AdminObject): """ if len(row) < 4: raise BadRequest(_("Invalid line")) - self.name = row[1].strip() + self.name = row[1].strip().lower() for model in [DomainAlias, Domain]: if model.objects.filter(name=self.name).exists(): raise Conflict diff --git a/modoboa/admin/serializers.py b/modoboa/admin/serializers.py index 8deeccae2..cf5a7fd80 100644 --- a/modoboa/admin/serializers.py +++ b/modoboa/admin/serializers.py @@ -46,6 +46,7 @@ class DomainSerializer(serializers.ModelSerializer): param_tools.get_global_parameter("domains_must_have_authorized_mx") ) user = self.context["request"].user + value = value.lower() if domains_must_have_authorized_mx and not user.is_superuser: if not lib.domain_has_authorized_mx(value): raise serializers.ValidationError( @@ -87,6 +88,10 @@ class DomainAliasSerializer(serializers.ModelSerializer): raise serializers.ValidationError(_("Permission denied.")) return value + def validate_name(self, value): + """Lower case name.""" + return value.lower() + def create(self, validated_data): """Custom creation.""" domain_alias = models.DomainAlias(**validated_data) @@ -114,6 +119,10 @@ class MailboxSerializer(serializers.ModelSerializer): model = models.Mailbox fields = ("pk", "full_address", "use_domain_quota", "quota", ) + def validate_full_address(self, value): + """Lower case address.""" + return value.lower() + class AccountSerializer(serializers.ModelSerializer): """Base account serializer.""" @@ -216,6 +225,10 @@ class WritableAccountSerializer(AccountSerializer): self.fields["domains"] = serializers.ListField( child=serializers.CharField(), allow_empty=False, required=False) + def validate_username(self, value): + """Lower case username.""" + return value.lower() + def validate(self, data): """Check constraints.""" master_user = data.get("master_user", False) diff --git a/modoboa/admin/templates/admin/_domain_dnschecks_status.html b/modoboa/admin/templates/admin/_domain_dnschecks_status.html index 1e123a4ae..9cc150a2b 100644 --- a/modoboa/admin/templates/admin/_domain_dnschecks_status.html +++ b/modoboa/admin/templates/admin/_domain_dnschecks_status.html @@ -11,4 +11,8 @@ {% if enable_dnsbl_checks %} DNSBL {% endif %} + SPF + DKIM + DMARC + CONFIG {% endif %} diff --git a/modoboa/admin/templates/admin/domain_detail.html b/modoboa/admin/templates/admin/domain_detail.html index fbebca6ab..46a402190 100644 --- a/modoboa/admin/templates/admin/domain_detail.html +++ b/modoboa/admin/templates/admin/domain_detail.html @@ -102,7 +102,7 @@ {% trans "DKIM key" %} - {% if domain.dkim_public_key %} + {% if True %}