bb8fd596b19c23f62f1c127621f80a77e57a4b22
CSRF: novo app/csrf.py + middleware em app/main.py garantem um cookie csrf_token por navegador; todo formulario que muda estado (criar/editar/ excluir cliente, adicionar/editar/excluir contato) embute esse valor como campo oculto, e Depends(exigir_csrf) confere no POST que o valor enviado bate com o cookie antes de deixar a rota executar. Verificado ponta a ponta com o app real rodando (curl): token errado -> 403, token correto -> 303. Paginacao: db_clientes.listar_clientes ganha offset, nova contar_clientes(); GET /clientes aceita ?pagina=N (100 clientes por pagina), template mostra Anterior/Proxima e o total. 53/53 testes passando (8 novos).
painel-clientes-web
Painel administrativo (FastAPI + Jinja2) para gestão de CLIENTE, CLIENTE_CONTATO e geração manual de chave de licenciamento no MySQL do sistema legado.
Proteções: login HTTP Basic em toda rota, CSRF via cookie de duplo envio (app/csrf.py — todo formulário que muda estado embute o mesmo token do cookie csrf_token, definido pelo middleware em app/main.py) e a lista de clientes é paginada (100 por página).
Rodando localmente (sem Docker)
- Instale as dependências de desenvolvimento:
pip install -r requirements-dev.txt - Defina as variáveis de ambiente necessárias (
ADMIN_USER,ADMIN_PASSWORD,DB_HOST,DB_PORT,DB_NAME,DB_USER,DB_PASSWORD— veja.env.example) diretamente no shell antes de subir a aplicação. Importante: apesar depython-dotenvestar nas dependências, nada no código chamaload_dotenv()hoje — um arquivo.envsozinho NÃO é lido automaticamente fora do Docker. Exporte as variáveis manualmente (ex.:set -a; source .env; set +ano bash, ou$env:...no PowerShell) ou defina-as por outro meio. - Rode a aplicação:
uvicorn app.main:app --reload - Rodando direto na máquina (fora de container), use
DB_HOST=127.0.0.1(porta3307, a mesma do container de devlicenciamento-mysql-dev).
Rodando os testes
pytest -v
Os testes usam defaults definidos em tests/conftest.py (equivalentes ao .env.example) e incluem testes de integração que precisam do container MySQL de dev (licenciamento-mysql-dev, 127.0.0.1:3307) rodando.
Rodando via Docker
- Copie o arquivo de exemplo de variáveis de ambiente e edite
ADMIN_PASSWORD(e demais valores, se necessário):cp .env.example .env - Suba o container:
O
docker compose up -d --builddocker-compose.ymljá usaenv_file: .enve mapeiahost.docker.internalpara o host (viaextra_hosts), então o valor padrãoDB_HOST=host.docker.internaldo.env.examplefunciona também em hosts Docker Linux, não só no Docker Desktop (Windows/Mac). - A aplicação fica disponível em
http://localhost:8010.
Languages
Python
82%
HTML
15.8%
CSS
1.2%
PowerShell
0.6%
Shell
0.2%
Other
0.1%