diff --git a/app/__init__.py b/app/__init__.py
index 2f8b1a9..10e8cde 100644
--- a/app/__init__.py
+++ b/app/__init__.py
@@ -14,4 +14,4 @@ login.login_view = 'login'
login.login_message = "Veuillez vous authentifier avant de continuer."
from app import models
-from app.routes import index
+from app.routes import index, login, search, account
diff --git a/app/forms.py b/app/forms.py
deleted file mode 100644
index d2b8346..0000000
--- a/app/forms.py
+++ /dev/null
@@ -1,71 +0,0 @@
-from flask_login import current_user
-from flask_wtf import FlaskForm
-from wtforms import StringField, PasswordField, BooleanField, TextAreaField, SubmitField, FileField
-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_name(form, name):
- member = Member.query.filter_by(name=name.data).first()
- if member is not None:
- raise ValidationError('Pseudo indisponible.')
- if not Member.valid_name(name.data):
- raise ValidationError("Nom d'utilisateur invalide.")
-
-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_name])
- 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):
- avatar = FileField('Avatar :', validators=[])
- 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')
-
-# TODO: compléter le formulaire de recherche avancée
-class AdvancedSearchForm(FlaskForm):
- q = StringField('Rechercher :', validators=[DataRequired()])
- date = DateField('Date', validators=[Optional()])
- submit = SubmitField('Affiner la recherche')
-
-class SearchForm(FlaskForm):
- q = StringField('Rechercher', validators=[DataRequired()])
-
\ No newline at end of file
diff --git a/app/forms/account.py b/app/forms/account.py
new file mode 100644
index 0000000..ded3e25
--- /dev/null
+++ b/app/forms/account.py
@@ -0,0 +1,26 @@
+from flask_wtf import FlaskForm
+from wtforms import StringField, PasswordField, BooleanField, TextAreaField, SubmitField, FileField
+from wtforms.fields.html5 import DateField
+from wtforms.validators import DataRequired, Optional, Email, EqualTo
+import app.utils.validators as vd
+
+class RegistrationForm(FlaskForm):
+ username = StringField('Pseudonyme :', validators=[DataRequired(), vd.name])
+ email = StringField('Adresse Email :', validators=[DataRequired(), Email(), vd.email])
+ password = PasswordField('Mot de passe', validators=[DataRequired(), vd.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):
+ avatar = FileField('Avatar :', validators=[])
+ email = StringField('Adresse Email :', validators=[Optional(), Email(), vd.email])
+ password = PasswordField('Mot de passe :', validators=[Optional(), vd.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(), vd.authentication])
+ submit = SubmitField('Mettre à jour')
\ No newline at end of file
diff --git a/app/forms/login.py b/app/forms/login.py
new file mode 100644
index 0000000..2f49f7c
--- /dev/null
+++ b/app/forms/login.py
@@ -0,0 +1,9 @@
+from flask_wtf import FlaskForm
+from wtforms import StringField, PasswordField, BooleanField, SubmitField
+from wtforms.validators import DataRequired
+
+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')
\ No newline at end of file
diff --git a/app/forms/search.py b/app/forms/search.py
new file mode 100644
index 0000000..808b387
--- /dev/null
+++ b/app/forms/search.py
@@ -0,0 +1,14 @@
+from flask_wtf import FlaskForm
+from wtforms import StringField, SubmitField
+from wtforms.fields.html5 import DateField
+from wtforms.validators import DataRequired, Optional
+
+# TODO: compléter le formulaire de recherche avancée
+class AdvancedSearchForm(FlaskForm):
+ q = StringField('Rechercher :', validators=[DataRequired()])
+ date = DateField('Date', validators=[Optional()])
+ submit = SubmitField('Affiner la recherche')
+
+class SearchForm(FlaskForm):
+ q = StringField('Rechercher', validators=[DataRequired()])
+
\ No newline at end of file
diff --git a/app/routes/account.py b/app/routes/account.py
index e2c01a5..27a5f1c 100644
--- a/app/routes/account.py
+++ b/app/routes/account.py
@@ -1,7 +1,7 @@
from flask import redirect, url_for, request, flash
from flask_login import login_required, current_user
from app import app, db
-from app.forms import UpdateAccountForm, RegistrationForm
+from app.forms.account import UpdateAccountForm, RegistrationForm
from app.models.users import Member
from app.utils.render import render
diff --git a/app/routes/index.py b/app/routes/index.py
index 6412a8f..692a11a 100644
--- a/app/routes/index.py
+++ b/app/routes/index.py
@@ -1,15 +1,7 @@
-from flask import render_template, flash, redirect, url_for, request
-from flask_login import login_user, logout_user, current_user, login_required
-from werkzeug.urls import url_parse
-from app import app, db
-from app.forms import LoginForm, RegistrationForm, UpdateAccountForm, SearchForm, AdvancedSearchForm
-from app.models.users import Member
-
-from app.routes import login, account, search
+from app import app
from app.utils.render import render
@app.route('/')
def index():
- login_form = LoginForm()
return render('index.html')
\ No newline at end of file
diff --git a/app/routes/login.py b/app/routes/login.py
index 3ee269b..d504be7 100644
--- a/app/routes/login.py
+++ b/app/routes/login.py
@@ -1,11 +1,11 @@
from flask import redirect, url_for, request, flash
from flask_login import login_user, logout_user, login_required, current_user
from app import app
-from app.forms import LoginForm
+from app.forms.login import LoginForm
from app.models.users import Member
from app.utils.render import render
-from app.routes import * # For open redirections
+# from app.routes.index import index
@app.route('/login', methods=['GET', 'POST'])
def login():
diff --git a/app/routes/search.py b/app/routes/search.py
index 30ba673..ef3fb41 100644
--- a/app/routes/search.py
+++ b/app/routes/search.py
@@ -1,5 +1,5 @@
from app import app
-from app.forms import AdvancedSearchForm
+from app.forms.search import AdvancedSearchForm
from app.utils.render import render
@app.route('/search')
diff --git a/app/utils/render.py b/app/utils/render.py
index 2d14db4..b7b918f 100644
--- a/app/utils/render.py
+++ b/app/utils/render.py
@@ -1,5 +1,6 @@
from flask import render_template
-from app.forms import LoginForm, SearchForm
+from app.forms.login import LoginForm
+from app.forms.search import SearchForm
def render(*args, **kwargs):
# TODO: debugguer cette merde : au logout, ça foire
diff --git a/app/utils/validators.py b/app/utils/validators.py
new file mode 100644
index 0000000..81a34e9
--- /dev/null
+++ b/app/utils/validators.py
@@ -0,0 +1,22 @@
+from wtforms.validators import ValidationError
+
+def name(form, name):
+ member = Member.query.filter_by(name=name.data).first()
+ if member is not None:
+ raise ValidationError('Pseudo indisponible.')
+ if not Member.valid_name(name.data):
+ raise ValidationError("Nom d'utilisateur invalide.")
+
+def 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 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 authentication(form, old_password):
+ if not current_user.check_password(old_password.data):
+ raise ValidationError('Mot de passe erroné')
\ No newline at end of file