Files
carinha-control-panel/docs/SEGURANCA.md
T
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

44 lines
1.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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):
```json
{"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).