60 lines
2.1 KiB
Python
60 lines
2.1 KiB
Python
"""
|
|
Rota /log: histórico de ações do painel (LOG_PAINEL, app/db/log.py) e,
|
|
quando configurado, os últimos envios automáticos de chave via WhatsApp
|
|
(Data Table pagamentos_processados do n8n, app/n8n_client.py).
|
|
|
|
Mostra só os 20 registros de LOG_PAINEL mais recentes — sem paginação.
|
|
Administradores têm um botão para limpar o histórico inteiro
|
|
(POST /log/limpar); db_log.limpar() apaga tudo e o router grava, logo em
|
|
seguida, uma única entrada de auditoria registrando quem limpou e quando
|
|
— por isso o histórico nunca fica sem nenhuma explicação do que
|
|
aconteceu com ele.
|
|
"""
|
|
from typing import Optional
|
|
from urllib.parse import urlencode
|
|
|
|
from fastapi import APIRouter, Depends, Request
|
|
from fastapi.responses import HTMLResponse, RedirectResponse
|
|
from fastapi.templating import Jinja2Templates
|
|
|
|
from .. import n8n_client
|
|
from ..auth import UsuarioLogado, exigir_admin, exigir_login
|
|
from ..csrf import exigir_csrf, token_do_contexto
|
|
from ..db import log as db_log
|
|
|
|
router = APIRouter()
|
|
templates = Jinja2Templates(directory="app/templates")
|
|
|
|
LIMITE_ACOES = 20
|
|
|
|
|
|
def _redirect_com_mensagem(mensagem: str, tipo: str = "success") -> RedirectResponse:
|
|
return RedirectResponse(f"/log?{urlencode({'mensagem': mensagem, 'mensagem_tipo': tipo})}", status_code=303)
|
|
|
|
|
|
@router.get("/log", response_class=HTMLResponse)
|
|
def pagina(
|
|
request: Request,
|
|
mensagem: Optional[str] = None,
|
|
mensagem_tipo: Optional[str] = None,
|
|
usuario: UsuarioLogado = Depends(exigir_login),
|
|
):
|
|
acoes = db_log.listar(limite=LIMITE_ACOES)
|
|
envios = n8n_client.listar_envios(limite=50)
|
|
return templates.TemplateResponse(
|
|
request,
|
|
"log.html",
|
|
{
|
|
"acoes": acoes, "envios": envios, "envios_configurado": n8n_client.configurado(),
|
|
"eh_admin": usuario.eh_admin, "csrf_token": token_do_contexto(request),
|
|
"mensagem": mensagem, "mensagem_tipo": mensagem_tipo,
|
|
},
|
|
)
|
|
|
|
|
|
@router.post("/log/limpar", dependencies=[Depends(exigir_csrf)])
|
|
def limpar(usuario: UsuarioLogado = Depends(exigir_admin)):
|
|
db_log.limpar()
|
|
db_log.registrar(str(usuario), "limpar", "log", None, True)
|
|
return _redirect_com_mensagem("Log limpo.")
|