61 lines
2.1 KiB
Python
61 lines
2.1 KiB
Python
|
|
from flask import Blueprint, render_template, redirect, url_for, request, jsonify
|
||
|
|
from flask_login import login_required, current_user
|
||
|
|
|
||
|
|
from controllers.auth_controller import AuthController
|
||
|
|
from services.database_service import DatabaseService
|
||
|
|
from models.entities.usuario import Usuario
|
||
|
|
|
||
|
|
auth_bp = Blueprint('auth', __name__)
|
||
|
|
|
||
|
|
@auth_bp.route("/login", methods=["GET", "POST"])
|
||
|
|
def login():
|
||
|
|
"""Rota de login"""
|
||
|
|
if request.method == "POST":
|
||
|
|
# Processar o login através do controlador
|
||
|
|
if AuthController.login():
|
||
|
|
# Redirecionar para home em caso de sucesso
|
||
|
|
return redirect(url_for("home"))
|
||
|
|
|
||
|
|
# GET ou falha no login, renderizar template
|
||
|
|
return render_template("login.html")
|
||
|
|
|
||
|
|
@auth_bp.route("/logout")
|
||
|
|
@login_required
|
||
|
|
def logout():
|
||
|
|
"""Rota de logout"""
|
||
|
|
AuthController.logout()
|
||
|
|
return redirect(url_for('auth.login'))
|
||
|
|
|
||
|
|
@auth_bp.route("/alterar_senha", methods=["GET", "POST"])
|
||
|
|
@login_required
|
||
|
|
def alterar_senha():
|
||
|
|
"""Rota para alterar a senha do usuário"""
|
||
|
|
if request.method == "POST":
|
||
|
|
senha_atual = request.form.get("senha_atual")
|
||
|
|
nova_senha = request.form.get("nova_senha")
|
||
|
|
confirmar_senha = request.form.get("confirmar_senha")
|
||
|
|
|
||
|
|
if AuthController.alterar_senha(current_user.id, senha_atual, nova_senha, confirmar_senha):
|
||
|
|
return redirect(url_for("home"))
|
||
|
|
|
||
|
|
return render_template("alterar_senha.html")
|
||
|
|
|
||
|
|
@auth_bp.route("/qr/<token>")
|
||
|
|
def get_qr_code(token):
|
||
|
|
"""Rota para exibir QR code para configuração 2FA"""
|
||
|
|
db = DatabaseService.get_db_connection()
|
||
|
|
try:
|
||
|
|
user = db.query(Usuario).filter_by(username='admin').first()
|
||
|
|
if not user:
|
||
|
|
flash('Usuário não encontrado', 'error')
|
||
|
|
return redirect(url_for('auth.login'))
|
||
|
|
|
||
|
|
qr_uri = user.get_otp_uri()
|
||
|
|
return render_template('mostrar_qr_code.html', qr_uri=qr_uri)
|
||
|
|
finally:
|
||
|
|
db.close()
|
||
|
|
|
||
|
|
@auth_bp.route('/check_session')
|
||
|
|
def check_session():
|
||
|
|
"""Rota para verificar status da sessão via AJAX"""
|
||
|
|
return jsonify(AuthController.check_session())
|