forked from AFPy/afpy.org
57 lines
1.9 KiB
Python
57 lines
1.9 KiB
Python
from peewee import DoesNotExist
|
|
from werkzeug.security import check_password_hash
|
|
from wtforms import fields
|
|
from wtforms import form
|
|
from wtforms import validators
|
|
|
|
from afpy.models.AdminUser import AdminUser
|
|
|
|
|
|
def validate_email_or_username(form, field):
|
|
try:
|
|
AdminUser.get(AdminUser.email == field.data)
|
|
except DoesNotExist:
|
|
try:
|
|
AdminUser.get(AdminUser.username == field.data)
|
|
except DoesNotExist:
|
|
raise validators.ValidationError("Unknown email or username")
|
|
|
|
|
|
def validate_password(form, field):
|
|
try:
|
|
user = AdminUser.get(AdminUser.email == field.data)
|
|
except DoesNotExist:
|
|
pass
|
|
else:
|
|
if not check_password_hash(user.password, form.password.data):
|
|
raise validators.ValidationError("Invalid password")
|
|
|
|
|
|
# Define login and registration forms (for flask-login)
|
|
class LoginForm(form.Form):
|
|
email_or_username = fields.StringField(
|
|
"Email or Username", validators=[validators.DataRequired(), validate_email_or_username]
|
|
)
|
|
password = fields.PasswordField(validators=[validators.DataRequired(), validate_password])
|
|
|
|
|
|
def validate_email_taken(form, field):
|
|
try:
|
|
AdminUser.get(AdminUser.email == field.data)
|
|
except DoesNotExist:
|
|
pass
|
|
else:
|
|
raise validators.ValidationError("Email taken")
|
|
|
|
|
|
class RegistrationForm(form.Form):
|
|
username = fields.StringField(validators=[validators.DataRequired()])
|
|
email = fields.StringField(validators=[validators.email(), validators.input_required(), validate_email_taken])
|
|
password = fields.PasswordField(validators=[validators.DataRequired()])
|
|
|
|
|
|
class ChangePasswordForm(form.Form):
|
|
old_password = fields.PasswordField(validators=[validators.DataRequired()])
|
|
new_password = fields.PasswordField(validators=[validators.DataRequired()])
|
|
new_password_confirmation = fields.PasswordField(validators=[validators.DataRequired()])
|