61 lines
2.8 KiB
Python
61 lines
2.8 KiB
Python
from flask_wtf import FlaskForm
|
|
from flask_login import current_user
|
|
from wtforms import StringField, PasswordField, SubmitField, BooleanField
|
|
from wtforms.validators import DataRequired, Length, Email, EqualTo, ValidationError
|
|
from surveyapp import mongo, login_manager
|
|
|
|
|
|
class RegistrationForm(FlaskForm):
|
|
first_name = StringField('First name', validators=[DataRequired(), Length(max=30)])
|
|
last_name = StringField('Last name', validators=[DataRequired(), Length(max=30)])
|
|
email = StringField('Email', validators=[DataRequired(), Email()])
|
|
password = PasswordField('Password', validators=[DataRequired(), Length(min=6)])
|
|
password2 = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')])
|
|
submit = SubmitField('Register')
|
|
|
|
# This method follows the custom validator pattern outlined in WTForms documentation
|
|
# When the form is validated, it checks if a user already exists with that email
|
|
def validate_email(self, email):
|
|
user_exists = mongo.db.users.find_one({"email" : email.data})
|
|
if user_exists:
|
|
raise ValidationError("Account already exists with that email address.")
|
|
|
|
|
|
class LoginForm(FlaskForm):
|
|
email = StringField('Email', validators=[DataRequired(), Email()])
|
|
password = PasswordField('Password', validators=[DataRequired()])
|
|
remember = BooleanField('Remember Me')
|
|
submit = SubmitField('Login')
|
|
|
|
|
|
class UpdateAccountForm(FlaskForm):
|
|
first_name = StringField('First name', validators=[DataRequired(), Length(max=30)])
|
|
last_name = StringField('Last name', validators=[DataRequired(), Length(max=30)])
|
|
email = StringField('Email', validators=[DataRequired(), Email()])
|
|
submit = SubmitField('Update')
|
|
|
|
# Similar to method above in RegsitrationForm, checks if user exists with that Email
|
|
# before allowing user to change email
|
|
def validate_email(self, email):
|
|
if email.data != current_user.email:
|
|
user_exists = mongo.db.users.find_one({"email" : email.data})
|
|
if user_exists:
|
|
raise ValidationError("Account already exists with that email address.")
|
|
|
|
|
|
class RequestPasswordForm(FlaskForm):
|
|
email = StringField('Email', validators=[DataRequired(), Email()])
|
|
submit = SubmitField('Request password reset')
|
|
|
|
# Opposite of methods above, checks if user doesn't exist with the given email
|
|
def validate_email(self, email):
|
|
user_exists = mongo.db.users.find_one({"email" : email.data})
|
|
if not user_exists:
|
|
raise ValidationError("No account exists with that email.")
|
|
|
|
|
|
class PasswordResetForm(FlaskForm):
|
|
password = PasswordField('Password', validators=[DataRequired(), Length(min=6)])
|
|
password2 = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')])
|
|
submit = SubmitField('Update password')
|