Files
julioandClaude Opus 5.5 c5fd54c1d9 feat(celular): rosto e app usam SSE e token; remove telas legadas
- carinha.html assina /eventos (expressao, app_config, conversa, reacao,
  recarregar) e volta ao polling de /fila sozinho se o SSE cair; foto dos
  ajustes a cada (re)conexao; token (?t=) vai em todo fetch ao servidor
- APK 0.8-token: token nas preferencias e no menu de toque longo, enviado
  na pagina, no HTTP do Java e ao llama-server (--api-key); trocar servidor
  por Intent exige o token salvo; camera/microfone so para o servidor
  configurado ou a copia local
- cerebro/conversa mandam a chave ao llama-server do S10
- servidor: evento SSE 'recarregar'; remove /camera/frame e /app/connect;
  enderecos antigos redirecionam para a secao do painel novo
- remove dashboard, painel, conversa, emojis, treinamento, braco, servos,
  api, scripts e CSS antigos, audio-robot.js e servir-local.bat
- logica pura do painel em web/src/lib/nucleo.ts com testes node --test
  (substitui test_movimentos.js e test_rastreamento.js)
- testes de navegador portados para o painel novo (rtc, rosto, rastreamento)
- README, docs/PAINEL.md e docs/SEGURANCA.md reescritos; versao 0.8.0;
  carinha-pc.service le /etc/carinha.env

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 20:11:58 -03:00

57 lines
2.3 KiB
Markdown
Raw Permalink 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.
## Como ativar (ordem importa)
1. Publique servidor e painel 0.8 (`deploy.ps1`) e instale o APK `0.8-token` no S10.
2. No S10: toque longo › **Token do servidor** › digite o token. O app passa a mandar o token
na página do rosto (`?t=`), nos pedidos Java e no llama-server local (`--api-key`).
3. Na placa: `echo 'CARINHA_TOKEN=...' | sudo tee /etc/carinha.env && sudo chmod 600 /etc/carinha.env`
e `sudo systemctl restart carinha-pc`. O serviço lê o arquivo (`EnvironmentFile=`).
4. Abra o painel: ele pede o token uma vez e guarda só naquele navegador.
O cérebro da placa usa o mesmo token para falar com o llama-server do S10
(ou `CARINHA_IA_CHAVE`, se forem diferentes).
## App Android
- Com token salvo, trocar o servidor por Intent (`adb shell am start ... -e servidor URL`) exige
`-e token <token>`; outro app não consegue redirecionar o rosto.
- Câmera e microfone só são liberados para a página do servidor configurado ou para a cópia local.
## 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).