afpy.org/afpy/forms/auth.py

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()])