mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-26 06:08:38 +01:00
@@ -13,10 +13,12 @@ from modoboa.core.models import User
|
||||
from modoboa.lib import events, parameters
|
||||
from modoboa.lib.email_utils import split_mailbox
|
||||
from modoboa.lib.exceptions import PermDeniedException, Conflict, NotFound
|
||||
from modoboa.lib.fields import DomainNameField, UTF8EmailField
|
||||
from modoboa.lib.form_utils import (
|
||||
DomainNameField, DynamicForm, TabForms, WizardForm, WizardStep
|
||||
DynamicForm, TabForms, WizardForm, WizardStep
|
||||
)
|
||||
from modoboa.lib.permissions import get_account_roles
|
||||
from modoboa.lib.validators import validate_utf8_email
|
||||
from modoboa.lib.web_utils import render_to_json_response
|
||||
|
||||
from ..models import Domain, Mailbox, Alias
|
||||
@@ -121,13 +123,12 @@ class AccountFormGeneral(forms.ModelForm):
|
||||
return self.cleaned_data["role"]
|
||||
|
||||
def clean_username(self):
|
||||
from django.core.validators import validate_email
|
||||
if "role" not in self.cleaned_data:
|
||||
return self.cleaned_data["username"]
|
||||
if self.cleaned_data["role"] != "SimpleUsers":
|
||||
return self.cleaned_data["username"]
|
||||
uname = self.cleaned_data["username"].lower()
|
||||
validate_email(uname)
|
||||
validate_utf8_email(uname)
|
||||
return uname
|
||||
|
||||
def clean_master_user(self):
|
||||
@@ -167,7 +168,7 @@ class AccountFormMail(forms.Form, DynamicForm):
|
||||
|
||||
"""Form to handle mail part."""
|
||||
|
||||
email = forms.EmailField(label=ugettext_lazy("E-mail"), required=False)
|
||||
email = UTF8EmailField(label=ugettext_lazy("E-mail"), required=False)
|
||||
quota = forms.IntegerField(
|
||||
label=ugettext_lazy("Quota"),
|
||||
required=False,
|
||||
@@ -178,7 +179,7 @@ class AccountFormMail(forms.Form, DynamicForm):
|
||||
widget=forms.widgets.TextInput(attrs={"class": "form-control"})
|
||||
)
|
||||
quota_act = forms.BooleanField(required=False)
|
||||
aliases = forms.EmailField(
|
||||
aliases = UTF8EmailField(
|
||||
label=ugettext_lazy("Alias(es)"),
|
||||
required=False,
|
||||
help_text=ugettext_lazy(
|
||||
@@ -211,7 +212,8 @@ class AccountFormMail(forms.Form, DynamicForm):
|
||||
if ralias.alias.recipients_count >= 2:
|
||||
continue
|
||||
name = "aliases_%d" % cpt
|
||||
self._create_field(forms.EmailField, name, ralias.alias.address)
|
||||
self._create_field(
|
||||
UTF8EmailField, name, ralias.alias.address)
|
||||
cpt += 1
|
||||
self.fields["email"].initial = self.mb.full_address
|
||||
self.fields["quota_act"].initial = self.mb.use_domain_quota
|
||||
@@ -221,7 +223,7 @@ class AccountFormMail(forms.Form, DynamicForm):
|
||||
self.fields["quota_act"].initial = True
|
||||
|
||||
if len(args) and isinstance(args[0], QueryDict):
|
||||
self._load_from_qdict(args[0], "aliases", forms.EmailField)
|
||||
self._load_from_qdict(args[0], "aliases", UTF8EmailField)
|
||||
|
||||
def clean_email(self):
|
||||
"""Ensure lower case emails"""
|
||||
|
||||
@@ -7,19 +7,19 @@ from django.http import QueryDict
|
||||
from django.utils.translation import ugettext as _, ugettext_lazy
|
||||
|
||||
from modoboa.lib.email_utils import split_mailbox
|
||||
from modoboa.lib import fields as lib_fields
|
||||
from modoboa.lib.form_utils import (
|
||||
DynamicForm
|
||||
)
|
||||
|
||||
from ..models import Domain, Alias
|
||||
from .base import EmailField
|
||||
|
||||
|
||||
class AliasForm(forms.ModelForm, DynamicForm):
|
||||
|
||||
"""A form to create/modify an alias."""
|
||||
|
||||
address = EmailField(
|
||||
address = lib_fields.UTF8AndEmptyUserEmailField(
|
||||
label=ugettext_lazy("Email address"),
|
||||
help_text=ugettext_lazy(
|
||||
"The alias address. To create a catchall alias, just enter the "
|
||||
@@ -27,7 +27,7 @@ class AliasForm(forms.ModelForm, DynamicForm):
|
||||
),
|
||||
widget=forms.TextInput(attrs={"class": "form-control"})
|
||||
)
|
||||
recipients = EmailField(
|
||||
recipients = lib_fields.UTF8AndEmptyUserEmailField(
|
||||
label=ugettext_lazy("Recipients"), required=False,
|
||||
help_text=ugettext_lazy(
|
||||
"Addresses this alias will point to. Indicate only one address "
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
"""Custom form tools."""
|
||||
|
||||
import re
|
||||
|
||||
from django.core.validators import EmailValidator
|
||||
from django.forms.fields import EmailField as OriginalEmailField
|
||||
|
||||
|
||||
class CustomEmailValidator(EmailValidator):
|
||||
|
||||
"""Allow empty user_part."""
|
||||
|
||||
user_regex = re.compile(
|
||||
r"(^$"
|
||||
r"|^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*\Z" # dot-atom
|
||||
r'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-\011\013\014\016-\177])*"\Z)', # quoted-string
|
||||
re.IGNORECASE)
|
||||
|
||||
validate_email = CustomEmailValidator()
|
||||
|
||||
|
||||
class EmailField(OriginalEmailField):
|
||||
|
||||
"""A field that accepts email addresses."""
|
||||
|
||||
default_validators = [validate_email]
|
||||
@@ -8,8 +8,9 @@ from django.utils.translation import ugettext as _, ugettext_lazy
|
||||
from modoboa.core.models import User
|
||||
from modoboa.lib import events, parameters
|
||||
from modoboa.lib.exceptions import ModoboaException, Conflict
|
||||
from modoboa.lib.fields import DomainNameField
|
||||
from modoboa.lib.form_utils import (
|
||||
DomainNameField, YesNoField, WizardForm, WizardStep, DynamicForm, TabForms
|
||||
YesNoField, WizardForm, WizardStep, DynamicForm, TabForms
|
||||
)
|
||||
from modoboa.lib.web_utils import render_to_json_response
|
||||
|
||||
|
||||
Reference in New Issue
Block a user