Commit Graph
2 Commits
Author SHA1 Message Date
melgarafaelandClaude Opus 5 9da23dea56 fix(dev): a chave do WAHA nasce aleatória, e o painel dele não atende a rede
A stack local entregava o comando da sessão de WhatsApp a qualquer máquina
da rede da VM, por duas portas independentes.

**A chave.** `WAHA_API_KEY=deskcomm-local-key` nascia literal em
`ubuntu-local-installer.sh` e em `scripts/local-env.sh` — isto é, publicada
neste repositório. É o mesmo argumento que já tornou a senha do dono
aleatória nesta fatia ("qualquer máquina da mesma rede alcançaria o CRM com
uma credencial que está no GitHub"), só que esta credencial comanda o
WhatsApp. Agora ela vem de `openssl rand -hex 24`.

Sem knob de propósito: nenhum terceiro precisa conhecê-la (o app manda o
plaintext, o WAHA compara o sha512 derivado dela), e um
`${WAHA_API_KEY:-...}` herdaria em silêncio a chave da nuvem de quem tiver
a variável exportada no shell — o `.env.local` deste repo é lido por 93
scripts. Em `local-env.sh` o valor é gerado UMA vez numa variável, porque o
heredoc é sem aspas e dois `$(openssl rand)` dariam chave e hash
divergentes, que rendem 401.

**A porta.** `docker-compose.local.yml` publicava `"3030:3000"` sem
endereço de bind, com `WAHA_DASHBOARD_ENABLED: "true"`. O dashboard do WAHA
tem autenticação própria, com o padrão do WAHA — a chave da API não o
protege —, então a chave aleatória sozinha não fecharia essa porta. Agora é
`"127.0.0.1:3030:3000"`.

Isto alinha o compose local com o que a casa já pratica e com o que o
próprio texto do PR já prometia: `docker-compose.prod.yml` desliga o
dashboard ("nunca expor o dashboard num template público", linha 156) e não
publica porta nenhuma para o WAHA (`networks: [internal]`); e o bloco novo
de `docs/SETUP.md` já dizia "o WAHA em `http://127.0.0.1:3030`". Nada
alcança essa porta de fora do compose — nenhum dos quatro scripts a
referencia —, e de outra máquina o túnel `ssh -L 3030:localhost:3030`
resolve, como `docs/vendaval-vps-deploy-comandos.md:64` já faz.

O app (3000) continua em 0.0.0.0: é o produto, e é o que a VM serve.

**A guarda.** Cinco verificações novas em `tests/shell/stack-local.test.sh`
(12 → 17). Três delas EXECUTAM as linhas em vez de as lerem, com um stub de
`sha512sum` (que é do GNU e não existe no macOS, onde o teste roda antes de
chegar ao Ubuntu do CI), porque o que se prova é a procedência do hash.

Sabotagem A — os três consertos desfeitos: 4 vermelhos, exatamente os
previstos, e a checagem de controle ("a sonda enxerga o bloco do WAHA")
seguiu verde, então os vermelhos são medição e não sonda morta.
Sabotagem B — chave e hash vindos de dois `openssl rand` diferentes: os
dois greps ingênuos PASSAM (`deskcomm-local-key` → 0 ocorrências; o grep de
aleatoriedade casa) e só a checagem executável fica vermelha. É o caso que
justifica ela existir.

Restaurado: `md5` dos três arquivos igual ao de antes da sabotagem, e o
conserto conferido por presença — `grep -c` devolve 1 em cada um dos quatro
pontos, e `deskcomm-local-key` devolve 0 no repositório inteiro.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RccZbdYe8URAiWCpyvZimQ
2026-09-20 23:51:05 -03:00
betoartsandClaude Opus 5 b252958cb8 feat(dev): stack local com Supabase, WAHA e Redis num comando (recorte do #714)
Quem quer rodar o DeskcommCRM na propria maquina nao tinha caminho: o kit
da VPS assume dominio e proxy, e a cadeia historica de migrations nao sobe
em banco novo. Esta fatia traz o ambiente local completo:

- ubuntu-local-installer.sh: prepara a VM, sobe o Supabase local, gera o
  .env.local, sobe app/worker/WAHA/Redis e cria o dono;
- scripts/local-supabase.sh: sobe o Supabase local aplicando o BASELINE, e
  nao a cadeia historica (que nao sobe em banco novo -- a mesma razao que o
  CLAUDE.md registra), restaurando supabase/migrations por trap;
- scripts/local-env.sh: gera o .env.local com segredos aleatorios e faz
  backup do ambiente anterior quando ele nao e local;
- scripts/local-stack.sh: up/down/status/logs/reset, mais os quatro atalhos
  local:* no package.json;
- docker-compose.local.yml e docs/SETUP.md.

Recorte do PR #714, de @betoarts.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X2i1fgsteAjoAU6T8ewnq2
2026-09-20 18:05:40 -03:00