- 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>
57 lines
2.3 KiB
Markdown
57 lines
2.3 KiB
Markdown
# 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).
|