from flask_login import current_user from flask_wtf import FlaskForm from wtforms import StringField, PasswordField, BooleanField, TextAreaField, SubmitField from wtforms.fields.html5 import DateField from wtforms.validators import ValidationError, DataRequired, Optional, Email, EqualTo from app.models.users import Member from wtforms.meta import DefaultMeta # TODO: Put those validators into a specific file def validate_username(self, username): member = Member.query.filter_by(username=username.data).first() if member is not None: raise ValidationError('Pseudo indisponible.') def validate_email(form, email): member = Member.query.filter_by(email=email.data).first() if member is not None: raise ValidationError('Adresse email déjà utilisée.') def validate_password(form, password): if len(password.data) != 0 and len(password.data) < 10: raise ValidationError('Mot de passe est trop court (10 caractères minimum)') # TODO: add more rules >:] def verify_authentication(form, old_password): if not current_user.check_password(old_password.data): raise ValidationError('Mot de passe erroné') def login_form(f): pass class LoginForm(FlaskForm): username = StringField('Pseudonyme :', validators=[DataRequired()]) password = PasswordField('Mot de passe :', validators=[DataRequired()]) remember_me = BooleanField('Se souvenir de moi :') submit = SubmitField('Connexion') class RegistrationForm(FlaskForm): username = StringField('Pseudonyme :', validators=[DataRequired(), validate_username]) email = StringField('Adresse Email :', validators=[DataRequired(), Email(), validate_email]) password = PasswordField('Mot de passe', validators=[DataRequired(), validate_password]) password2 = PasswordField('Répéter le mot de passe', validators=[DataRequired(), EqualTo('password')]) guidelines = BooleanField('J’accepte les CGU', validators=[DataRequired()]) newsletter = BooleanField('Inscription à la newsletter', description='Un mail par trimestre environ, pour être prévenu des concours, évènements et nouveautés.') submit = SubmitField('S\'enregistrer') class UpdateAccountForm(FlaskForm): email = StringField('Adresse Email :', validators=[Optional(), Email(), validate_email]) password = PasswordField('Mot de passe :', validators=[Optional(), validate_password]) password2 = PasswordField('Répéter le mot de passe', validators=[Optional(), EqualTo('password')]) birthday = DateField('Anniversaire', validators=[Optional()]) signature = TextAreaField('Signature', validators=[Optional()]) biography = TextAreaField('Présentation', validators=[Optional()]) newsletter = BooleanField('Inscription à la newsletter', description='Un mail par trimestre environ, pour être prévenu des concours, évènements et nouveautés.') old_password = PasswordField('Ancien mot de passe :', validators=[DataRequired(), verify_authentication]) submit = SubmitField('Mettre à jour')