Add support for catchall aliases.

see #844
This commit is contained in:
Antoine Nguyen
2016-03-09 15:50:38 +01:00
parent 9030f694d6
commit 1126b5bca9
4 changed files with 25 additions and 4 deletions
+3 -2
View File
@@ -166,9 +166,10 @@ class WritableAccountSerializer(AccountSerializer):
class AliasSerializer(serializers.ModelSerializer):
"""Base Alias serializer."""
address = lib_fields.DRFEmailFieldUTF8()
address = lib_fields.DRFEmailFieldUTF8AndEmptyUser()
recipients = serializers.ListField(
child=lib_fields.DRFEmailFieldUTF8(), allow_empty=False)
child=lib_fields.DRFEmailFieldUTF8AndEmptyUser(),
allow_empty=False)
class Meta:
model = admin_models.Alias
+6
View File
@@ -328,6 +328,12 @@ class AliasAPITestCase(ModoAPITestCase):
address="user_éé@nonlocal.com",
r_mailbox__isnull=True, r_alias__isnull=True).exists())
# Create catchall alias
data = copy.deepcopy(self.ALIAS_DATA)
data["address"] = "@test.com"
response = self.client.post(url, data, format="json")
self.assertEqual(response.status_code, 201)
def test_update_alias(self):
"""Try to update an alias."""
alias = models.Alias.objects.get(address="alias@test.com")
+14
View File
@@ -49,3 +49,17 @@ class DRFEmailFieldUTF8(serializers.CharField):
validator = validators.UTF8EmailValidator(
message=self.error_messages["invalid"])
self.validators.append(validator)
class DRFEmailFieldUTF8AndEmptyUser(serializers.CharField):
"""Custom DRF email field to support UTF8 and empty local part."""
default_error_messages = {
"invalid": ugettext_lazy("Enter a valid email address.")
}
def __init__(self, **kwargs):
super(DRFEmailFieldUTF8AndEmptyUser, self).__init__(**kwargs)
validator = validators.UTF8AndEmptyUserEmailValidator(
message=self.error_messages["invalid"])
self.validators.append(validator)
+2 -2
View File
@@ -53,11 +53,11 @@ class UTF8EmailValidator(EmailValidator):
validate_utf8_email = UTF8EmailValidator()
class UT8AndEmptyUserEmailValidator(UTF8EmailValidator):
class UTF8AndEmptyUserEmailValidator(UTF8EmailValidator):
"""Same as upper + allows empty local part."""
user_regex = re.compile(
ur"(^$|" + UTF8EmailValidator.user_regex_raw, re.IGNORECASE)
validate_utf8_and_empty_user_email = UT8AndEmptyUserEmailValidator()
validate_utf8_and_empty_user_email = UTF8AndEmptyUserEmailValidator()