from datetime import timedelta as td
|
|
from django import forms
|
|
|
|
from django.contrib.auth import authenticate
|
|
from django.contrib.auth.models import User
|
|
|
|
|
|
class LowercaseEmailField(forms.EmailField):
|
|
|
|
def clean(self, value):
|
|
value = super(LowercaseEmailField, self).clean(value)
|
|
return value.lower()
|
|
|
|
|
|
class AvailableEmailForm(forms.Form):
|
|
# Call it "identity" instead of "email"
|
|
# to avoid some of the dumber bots
|
|
identity = LowercaseEmailField(error_messages={'required': 'Please enter your email address.'})
|
|
|
|
def clean_identity(self):
|
|
v = self.cleaned_data["identity"]
|
|
if User.objects.filter(email=v).exists():
|
|
raise forms.ValidationError("An account with this email address already exists.")
|
|
|
|
return v
|
|
|
|
|
|
class ExistingEmailForm(forms.Form):
|
|
# Call it "identity" instead of "email"
|
|
# to avoid some of the dumber bots
|
|
identity = LowercaseEmailField()
|
|
|
|
def clean_identity(self):
|
|
v = self.cleaned_data["identity"]
|
|
try:
|
|
self.user = User.objects.get(email=v)
|
|
except User.DoesNotExist:
|
|
raise forms.ValidationError("Incorrect email address.")
|
|
|
|
return v
|
|
|
|
|
|
class EmailPasswordForm(forms.Form):
|
|
email = LowercaseEmailField()
|
|
password = forms.CharField()
|
|
|
|
def clean(self):
|
|
username = self.cleaned_data.get('email')
|
|
password = self.cleaned_data.get('password')
|
|
|
|
if username and password:
|
|
self.user = authenticate(username=username, password=password)
|
|
if self.user is None:
|
|
raise forms.ValidationError("Incorrect email or password")
|
|
if not self.user.is_active:
|
|
raise forms.ValidationError("Account is inactive")
|
|
|
|
return self.cleaned_data
|
|
|
|
|
|
class ReportSettingsForm(forms.Form):
|
|
reports_allowed = forms.BooleanField(required=False)
|
|
nag_period = forms.IntegerField(min_value=0, max_value=86400)
|
|
|
|
def clean_nag_period(self):
|
|
seconds = self.cleaned_data["nag_period"]
|
|
|
|
if seconds not in (0, 3600, 86400):
|
|
raise forms.ValidationError("Bad nag_period: %d" % seconds)
|
|
|
|
return td(seconds=seconds)
|
|
|
|
|
|
class SetPasswordForm(forms.Form):
|
|
password = forms.CharField()
|
|
|
|
|
|
class ChangeEmailForm(forms.Form):
|
|
error_css_class = "has-error"
|
|
email = LowercaseEmailField()
|
|
|
|
def clean_email(self):
|
|
v = self.cleaned_data["email"]
|
|
if User.objects.filter(email=v).exists():
|
|
raise forms.ValidationError("%s is already registered" % v)
|
|
|
|
return v
|
|
|
|
|
|
class InviteTeamMemberForm(forms.Form):
|
|
email = LowercaseEmailField()
|
|
|
|
|
|
class RemoveTeamMemberForm(forms.Form):
|
|
email = LowercaseEmailField()
|
|
|
|
|
|
class TeamNameForm(forms.Form):
|
|
team_name = forms.CharField(max_length=200, required=True)
|