mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-17 05:41:25 +02:00
@@ -1,5 +1,6 @@
|
||||
"""Admin API v2 serializers."""
|
||||
|
||||
import ipaddress
|
||||
import os
|
||||
|
||||
from django.conf import settings
|
||||
@@ -230,6 +231,21 @@ class AdminGlobalParametersSerializer(serializers.Serializer):
|
||||
)
|
||||
return value
|
||||
|
||||
def validate_valid_mxs(self, value):
|
||||
"""Make sure it only contains IP addresses."""
|
||||
if not value:
|
||||
return value
|
||||
try:
|
||||
ip_addresses = [
|
||||
ipaddress.ip_network(v.strip())
|
||||
for v in value.split() if v.strip()
|
||||
]
|
||||
except ValueError:
|
||||
raise serializers.ValidationError(
|
||||
_("This field only allows valid IP addresses (or networks)")
|
||||
)
|
||||
return value
|
||||
|
||||
def validate(self, data):
|
||||
"""Check MX options."""
|
||||
condition = (
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
"""Modoboa admin settings."""
|
||||
|
||||
import collections
|
||||
import ipaddress
|
||||
import os
|
||||
|
||||
from django import forms
|
||||
@@ -196,7 +197,7 @@ class AdminParametersForm(param_forms.AdminParametersForm):
|
||||
}
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(AdminParametersForm, self).__init__(*args, **kwargs)
|
||||
super().__init__(*args, **kwargs)
|
||||
self.field_widths = {
|
||||
"default_domain_quota": 2,
|
||||
"default_mailbox_quota": 2
|
||||
@@ -260,6 +261,24 @@ class AdminParametersForm(param_forms.AdminParametersForm):
|
||||
)
|
||||
return storage_dir
|
||||
|
||||
def clean_valid_mxs(self):
|
||||
"""Make sure it only contains IP addresses."""
|
||||
value = self.cleaned_data.get("valid_mxs")
|
||||
if not value:
|
||||
return value
|
||||
try:
|
||||
ip_addresses = [
|
||||
ipaddress.ip_network(v.strip())
|
||||
for v in value.split() if v.strip()
|
||||
]
|
||||
except ValueError:
|
||||
raise forms.ValidationError(
|
||||
ugettext_lazy(
|
||||
"This field only allows valid IP addresses (or networks)"
|
||||
)
|
||||
)
|
||||
return value
|
||||
|
||||
def clean(self):
|
||||
"""Check MX options."""
|
||||
cleaned_data = super(AdminParametersForm, self).clean()
|
||||
|
||||
@@ -54,7 +54,7 @@ class TokenObtainPairView(jwt_views.TokenObtainPairView):
|
||||
_("Password scheme mismatch. Updating %s password"),
|
||||
user.username
|
||||
)
|
||||
user.set_password(serializer.data["password"])
|
||||
user.set_password(request.data["password"])
|
||||
user.save()
|
||||
if pwhash.needs_rehash(user.password):
|
||||
logger.info(
|
||||
|
||||
@@ -46,5 +46,45 @@ class ParametersAPITestCase(ModoAPITestCase):
|
||||
"deflt_domain_mailbox_aliases_limit": 0
|
||||
}
|
||||
url = reverse("v2:parameter-detail", args=["limits"])
|
||||
resp = self.client.put(url, json=data)
|
||||
resp = self.client.put(url, data, format="json")
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
|
||||
def test_update_admin_settings(self):
|
||||
data = {
|
||||
"default_domain_quota": -1,
|
||||
"default_mailbox_quota": -1,
|
||||
"valid_mxs": "mail.test.com",
|
||||
"custom_dns_server": "",
|
||||
"dkim_keys_storage_dir": "/wrong"
|
||||
}
|
||||
url = reverse("v2:parameter-detail", args=["admin"])
|
||||
resp = self.client.put(url, data, format="json")
|
||||
self.assertEqual(resp.status_code, 400)
|
||||
errors = resp.json()
|
||||
self.assertEqual(
|
||||
errors["valid_mxs"],
|
||||
["This field only allows valid IP addresses (or networks)"]
|
||||
)
|
||||
self.assertEqual(
|
||||
errors["default_domain_quota"], ["Must be a positive integer"]
|
||||
)
|
||||
self.assertEqual(
|
||||
errors["default_mailbox_quota"], ["Must be a positive integer"]
|
||||
)
|
||||
self.assertEqual(
|
||||
errors["dkim_keys_storage_dir"], ["Directory not found."]
|
||||
)
|
||||
|
||||
data = {
|
||||
"enable_mx_checks": True,
|
||||
"domains_must_have_authorized_mx": True,
|
||||
"valid_mxs": "",
|
||||
"custom_dns_server": "",
|
||||
"dkim_keys_storage_dir": ""
|
||||
}
|
||||
resp = self.client.put(url, data, format="json")
|
||||
self.assertEqual(resp.status_code, 400)
|
||||
self.assertEqual(
|
||||
resp.json()["valid_mxs"],
|
||||
["Define at least one authorized network / address"]
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user