57 lines
1.9 KiB
Python
57 lines
1.9 KiB
Python
from flask import Blueprint, render_template, request, redirect, url_for, session, flash
|
|
from werkzeug.security import check_password_hash
|
|
from sqlalchemy import text
|
|
from app import db
|
|
from datetime import datetime
|
|
|
|
main = Blueprint('main', __name__)
|
|
|
|
/* routes */
|
|
@main.route('/', methods=['GET', 'POST'])
|
|
def index():
|
|
if 'user_id' in session:
|
|
return redirect(url_for('main.menu'))
|
|
|
|
if 'login_attempts' not in session:
|
|
session['login_attempts'] = 0
|
|
|
|
if request.method == 'POST':
|
|
user_login = request.form.get('login')
|
|
user_pass = request.form.get('pass')
|
|
|
|
query = text("SELECT id, pass AS user_pass, nom, prenom FROM login WHERE login = :login AND actif = 1")
|
|
result = db.session.execute(query, {"login": user_login}).fetchone()
|
|
|
|
if result and check_password_hash(result.user_pass, user_pass):
|
|
session.pop('login_attempts', None)
|
|
session['user_id'] = result.id
|
|
session['user_name'] = f"{result.prenom} {result.nom}"
|
|
return redirect(url_for('main.menu'))
|
|
else:
|
|
session['login_attempts'] += 1
|
|
|
|
if session['login_attempts'] >= 3:
|
|
session.pop('login_attempts', None)
|
|
return redirect('https://giraud-finance.com')
|
|
|
|
essais_restants = 3 - session['login_attempts']
|
|
flash(f"Identifiant ou mot de passe incorrect. Il vous reste {essais_restants} essai(s).", "danger")
|
|
|
|
return render_template('index.html')
|
|
|
|
@main.route('/menu')
|
|
def menu():
|
|
if 'user_id' not in session:
|
|
return redirect(url_for('main.index'))
|
|
return render_template('menu.html')
|
|
|
|
@main.route('/logout')
|
|
def logout():
|
|
session.clear()
|
|
return redirect(url_for('main.index'))
|
|
|
|
@main.route('/gestion-utilisateurs')
|
|
def gestion_utilisateurs():
|
|
if 'user_id' not in session:
|
|
return redirect(url_for('main.index'))
|
|
return render_template('gestion_utilisateurs.html') |