mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-17 05:41:25 +02:00
Merge pull request #1572 from modoboa/fix/force_lower_case
fixed: force lower case domain names and addresses.
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 = (
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -11,4 +11,8 @@
|
||||
{% if enable_dnsbl_checks %}
|
||||
<span class="label label-mini label-{{ domain.dnsbl_status_color }}"><a href="{% url 'admin:dnsbl_domain_detail' domain.pk %}" data-toggle="ajaxmodal">DNSBL</a></span>
|
||||
{% endif %}
|
||||
<span class="label label-mini label-success">SPF</span>
|
||||
<span class="label label-mini label-success">DKIM</span>
|
||||
<span class="label label-mini label-success">DMARC</span>
|
||||
<span class="label label-mini label-success">CONFIG</span>
|
||||
{% endif %}
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
<tr>
|
||||
<th>{% trans "DKIM key" %}</th>
|
||||
<td>
|
||||
{% if domain.dkim_public_key %}
|
||||
{% if True %}
|
||||
<button type="button" class="btn btn-primary btn-xs" data-toggle="modal" data-target="#domain_dkim_key">
|
||||
{% trans "Show key" %}
|
||||
</button>
|
||||
|
||||
Reference in New Issue
Block a user