mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-17 05:41:25 +02:00
* Added support for migrations * Big refactoring of the admin code done: Support for SHA256 algorithm to store passwords (fix #195) done: admin models refactoring (fix #196)
52 lines
2.2 KiB
Python
52 lines
2.2 KiB
Python
from django import forms
|
|
from modoboa.admin.models import Domain, Mailbox
|
|
from django.utils.translation import ugettext as _, ugettext_noop
|
|
from modoboa.lib.emailutils import split_mailbox
|
|
from modoboa.lib import parameters
|
|
|
|
class BadDestination(Exception):
|
|
pass
|
|
|
|
class ChangePasswordForm(forms.Form):
|
|
oldpassword = forms.CharField(label=ugettext_noop("Old password"),
|
|
widget=forms.PasswordInput)
|
|
newpassword = forms.CharField(label=ugettext_noop("New password"),
|
|
widget=forms.PasswordInput)
|
|
confirmation = forms.CharField(label=ugettext_noop("Confirmation"),
|
|
widget=forms.PasswordInput)
|
|
|
|
def __init__(self, target, *args, **kwargs):
|
|
super(ChangePasswordForm, self).__init__(*args, **kwargs)
|
|
self.target = target
|
|
|
|
def clean_oldpassword(self):
|
|
if parameters.get_admin("AUTHENTICATION_TYPE", app="admin") != "local":
|
|
return self.cleaned_data["oldpassword"]
|
|
|
|
if not self.target.check_password(self.cleaned_data["oldpassword"]):
|
|
raise forms.ValidationError(_("Old password mismatchs"))
|
|
return self.cleaned_data["oldpassword"]
|
|
|
|
def clean_confirmation(self):
|
|
if self.cleaned_data["newpassword"] != self.cleaned_data["confirmation"]:
|
|
raise forms.ValidationError(_("Passwords mismatch"))
|
|
return self.cleaned_data["confirmation"]
|
|
|
|
class ForwardForm(forms.Form):
|
|
dest = forms.CharField(label=_("Destination(s)"), widget=forms.Textarea)
|
|
keepcopies = forms.BooleanField(label=_("Keep local copies"), required=False)
|
|
|
|
def parse_dest(self):
|
|
self.dests = []
|
|
for d in self.cleaned_data["dest"].strip().split(","):
|
|
local_part, domname = split_mailbox(d)
|
|
if not local_part or not domname or not len(domname):
|
|
raise BadDestination("Invalid mailbox syntax for %s" % d)
|
|
try:
|
|
mb = Domain.objects.get(name=domname)
|
|
except Domain.DoesNotExist:
|
|
self.dests += [d]
|
|
else:
|
|
raise BadDestination(_("You can't define a forward to a local destination. Please ask your administrator to create an alias instead."))
|
|
|