Files
carinha-control-panel/docs/SEGURANCA.md
julioandClaude Opus 5.5 35d443a358 feat(servidor): adiciona SSE, token, E-Stop real e trava de hardware
- comum.py: ler_json (Origin/JSON/tamanho), gravar_atomico e token
  (CARINHA_TOKEN ou seguranca.json), substituindo 6 copias nos modulos
- eventos.py: hub SSE em /eventos com heartbeat e Last-Event-ID;
  modulos publicam expressao, telemetria, conversa, reacao, ia, motores
- /estado agrega o snapshot inicial; /comando unifica gesto/rosto/cor/reacao
- /parar-tudo desliga o PCA9685, para reacoes e trava motores ate /rearmar
- braco: lease (ttl_ms) e interpolacao com limite de velocidade no servidor
- braco e diagnostico nao disputam o PCA9685 (409 para o segundo dono)
- fila limitada (20) com validade de 10 s; POST /face usa prefixo "rosto"
- /app/config passa a checar Origin e JSON; versao vem de version.json
- figurinhas automaticas do Gemini limitadas a 6 por hora
- rosto entende a ordem "calma" enviada pelo E-Stop

Token so e exigido quando configurado (docs/SEGURANCA.md).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 19:34:35 -03:00

1.7 KiB
Raw Permalink Blame History

Segurança do servidor

Token de controle

Com um token configurado, o servidor (porta 8100) exige Authorization: Bearer <token> em todo POST e nas leituras de dados (/eventos, /estado, /fila, /app/*, /rtc/*, /camera/*, /conversa/*, /treinamento/*, /braco/*, /servos/*, /ia/status, /api/*). EventSource e o app Android podem mandar ?t=<token> na URL.

Continuam públicos apenas: páginas estáticas, /app/health, /faces, /gestos, GET /config (aparência), /ia/modelo e /app.apk.

Configure um dos dois (mínimo 8 caracteres):

# /etc/carinha.env, carregado pelo carinha-pc.service (EnvironmentFile=)
CARINHA_TOKEN=troque-por-um-segredo-longo

ou seguranca.json na pasta do servidor (fora do git):

{"token": "troque-por-um-segredo-longo"}

Sem token configurado o servidor fica aberto na rede local, como antes.

Ordem de ativação. O painel antigo e o carinha.html/APK atuais ainda não enviam token. Ative o token na placa só depois de publicar o painel novo e o rosto/APK com suporte a token (fases 2–5 do plano de modernização). Até lá o servidor já aplica as demais proteções: checagem de Origin em todos os POST, comandos validados e E-Stop.

E-Stop

POST /parar-tudo desliga as 16 saídas do PCA9685, cancela a interpolação do braço, para reações e manda calma ao rosto. Braço e servos ficam travados (HTTP 409) até POST /rearmar.

Trava de hardware

Braço (/braco/*) e diagnóstico (/servos/*) usam o mesmo PCA9685 com limites diferentes. Quem estiver com motores ativos é o dono; o outro recebe 409 até os motores desligarem (parar, ou ~2 s sem comando).