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/") 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())