1 Commits
3 changed files with 47 additions and 0 deletions

No files matched your search

+3
View File
@@ -17,6 +17,9 @@ Then, to deploy via login.neuf.no, add the following to your personal ~/.ssh/con
Then you can do
fab deploy
# TODO
- Domain Aliases
# Inspiration:
- http://modoboa.readthedocs.org/
+40
View File
@@ -0,0 +1,40 @@
from django.core.exceptions import ValidationError
from django.utils import six
from rest_framework.fields import CharField, EmailValidator
from django.utils.translation import ugettext_lazy as _
def domain_alias_validator(value):
if not value.startswith('@'):
raise ValidationError('Not valid')
EmailValidator().validate_domain_part(value.split('@'))
class EmailOrDomainAliasField(CharField):
default_error_messages = {
'invalid': _('Enter a valid email address or domain alias.'),
}
def to_internal_value(self, data):
return six.text_type(data).strip()
def to_representation(self, value):
email_validator = EmailValidator(message=self.default_error_messages['invalid'])
# Try email validation first
try:
email_validator(value)
return six.text_type(value).strip() # Valid email
except ValidationError:
pass
# Try domain forward validation
try:
domain_alias_validator(value)
return six.text_type(value).strip() # Valid domain alias
except ValidationError:
pass
raise ValidationError(self.default_error_messages, code='invalid')
+4
View File
@@ -1,9 +1,13 @@
from rest_framework import serializers
from passlib.hash import sha512_crypt
from .models import Alias, Domain, User
from .fields import EmailOrDomainAliasField
class AliasSerializer(serializers.ModelSerializer):
source = EmailOrDomainAliasField()
destination = EmailOrDomainAliasField()
class Meta:
model = Alias