Compare commits
1
Commits
main
...
domainforwards
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ce05142fe1 |
No files matched your search
@@ -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/
|
||||
|
||||
@@ -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')
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in new issue
Block a user