fix: validacao de formulario, auth fail-closed, loop de confirmacao, hardening e docs (achados da revisao final)

- Fix 1 (critico): cliente_form.html agora tem required/type por campo
  (date/number) e o router captura DataError/IntegrityError em
  criar/editar, reexibindo o form com erro_gravacao em vez de 500.
- Fix 2 (importante): auth.py falha fechado quando ADMIN_USER/
  ADMIN_PASSWORD nao estao configurados (nao tenta mais compare_digest
  com string vazia).
- Fix 3 (importante): avisos de codigo duplicado e DV invalido agora
  carregam a flag de confirmacao um do outro adiante, quebrando o loop
  quando ambos disparam no mesmo cliente.
- Fix 4 (menor): corrige precedencia 'or 42' -> 'and 42' no lambda de
  teste de criar_cliente.
- Fix 5 (menor): desabilita /docs, /redoc, /openapi.json no FastAPI().
- Fix 6 (menor): comentario explicando o valor de Prorrogacao no fixture
  de teste de chaves.
- Fix 7 (menor): .env.example usa host.docker.internal por padrao,
  docker-compose.yml ganha extra_hosts para Linux, README.md novo com
  quickstart real.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Gustavo
2026-08-13 10:46:23 -03:00
co-authored by Claude Sonnet 5
parent 145f784577
commit 0d839949fe
11 changed files with 203 additions and 11 deletions
+4 -3
View File
@@ -4,9 +4,10 @@ ADMIN_USER=admin
ADMIN_PASSWORD=SUBSTITUA_POR_UMA_SENHA_FORTE
# Banco de dev (mesmo container do projeto n8n / contatos-chave-web):
# DB_HOST=host.docker.internal (se este app tambem rodar em container)
# DB_HOST=127.0.0.1 (se este app rodar direto na maquina)
DB_HOST=127.0.0.1
# DB_HOST=host.docker.internal (padrao — para rodar via docker-compose.yml,
# que executa este app dentro de um container)
# DB_HOST=127.0.0.1 (se este app rodar direto na maquina, fora do Docker)
DB_HOST=host.docker.internal
DB_PORT=3307
DB_NAME=gtisoftw_clientes_dev
DB_USER=root