from flask_wtf import FlaskForm from flask_wtf.file import FileField, FileAllowed from wtforms import StringField, PasswordField, SubmitField, BooleanField from wtforms.validators import DataRequired, Length, Email, EqualTo, ValidationError from flask_login import current_user from minibase.database.models import User class registrationForm(FlaskForm): # Defines the form class to be used for the user registretion # Decalarion of the fields for the form and it's propereties username = StringField('User Name', validators=[DataRequired(), Length(min=3, max=20)]) email = StringField('Email', validators=[DataRequired(), Email()]) password = PasswordField('Password', validators=[DataRequired()]) password_confirm = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')]) submit = SubmitField('Sing Up') # Queries to be made in order to validate the form : If username exists def validate_username(self, username): user = User.query.filter_by(username=username.data).first() # Database Querry if user: raise ValidationError('That username is taken please choose another one') # Queries to be made in order to validate the form : If Email exists def validate_email(self, email): email = User.query.filter_by(email=email.data).first() # Database Querry if email: raise ValidationError('That email is taken do you have an acocunt ?') class loginForm(FlaskForm): # Defines the form class to be used for the user login email = StringField('Email', validators=[DataRequired(), Email()]) password = PasswordField('Password', validators=[DataRequired()]) remember = BooleanField('Remember Me') submit = SubmitField('Log In') class updateAccountForm(FlaskForm): # Defines the form class to be used for the user update username = StringField('User Name', validators=[DataRequired(), Length(min=3, max=20)]) email = StringField('Email', validators=[DataRequired(), Email()]) picture = FileField('Update Profile Picture', validators=[FileAllowed(['jpg', 'png'])]) submit = SubmitField('Update') # Queries to be made in order to validate the form : If username exists def validate_username(self, username): if username.data != current_user.username: user = User.query.filter_by(username=username.data).first() if user: raise ValidationError('That username is taken please choose another one') # Queries to be made in order to validate the form : If Email exists def validate_email(self, email): if email.data != current_user.email: email = User.query.filter_by(email=email.data).first() if email: raise ValidationError('That email is taken do you have an acocunt ?') class requestResetForm(FlaskForm): # Defines the form class to be used for the reset form email = StringField('Email', validators=[DataRequired(), Email()]) submit = SubmitField('Request Password Reset') # Queries to be made in order to validate the form : If Email exists def validate_email(self, email): email = User.query.filter_by(email=email.data).first() if email is None: raise ValidationError('There is no Account with this email your must register first.') class resetPasswordForm(FlaskForm): # Defines the form class to be used for password reset form password = PasswordField('Password', validators=[DataRequired()]) password_confirm = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')]) submit = SubmitField('Reset Password')