from flask_wtf import FlaskForm from flask_wtf.file import FileField, FileAllowed from wtforms import StringField, PasswordField, SubmitField, BooleanField, URLField from wtforms.validators import DataRequired, Length, Email, EqualTo, ValidationError from flask_login import current_user from iot.blueprints.user.models import Users 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=4, 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 = Users.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 = Users.query.filter_by(email_account=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_account = StringField('Email Account', validators=[DataRequired(), Email()]) email_comm = StringField('Email Communication', 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 = Users.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_account: email = Users.query.filter_by(email_account=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 = Users.query.filter_by(email_account=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') class updateRoleForm(FlaskForm): id = StringField('ID', render_kw={'disabled':''}) role = StringField('Role', validators=[DataRequired(), Length(min=4, max=20)]) description = StringField('Description', validators=[DataRequired(), Length(min=4, max=200)]) submit = SubmitField()