Docs: document machine-session fixes, desktop handshake, portal UX changes, and Windows osInfo fallback
This commit is contained in:
parent
328415d9e9
commit
0fb9bf59b2
5 changed files with 53 additions and 4 deletions
|
|
@ -17,6 +17,21 @@
|
|||
- Com esse contexto, o Portal exibe corretamente o nome/e‑mail do colaborador/gestor no cabeçalho e permite abrir chamados em nome do usuário vinculado.
|
||||
- Em sessões de máquina, o botão "Encerrar sessão" no menu do usuário é ocultado por padrão na UI interna.
|
||||
|
||||
#### Detalhes importantes (aprendidos em produção)
|
||||
- CORS com credenciais: as rotas `POST /api/machines/sessions` e `GET /machines/handshake` precisam enviar `Access-Control-Allow-Credentials: true` para que os cookies do Better Auth sejam aceitos na WebView.
|
||||
- Vários `Set-Cookie`: alguns navegadores/ambientes colapsam cabeçalhos. Para confiabilidade, usamos `NextResponse.cookies.set(...)` para cada cookie, em vez de repassar o cabeçalho bruto.
|
||||
- Top-level navigation: mesmo tentando criar a sessão via `POST /api/machines/sessions`, mantemos a navegação final pelo `GET /machines/handshake` (primeira parte) para maximizar a aceitação de cookies no WebView.
|
||||
- Front tolerante: o portal preenche `machineContext` mesmo quando `/api/auth/get-session` retorna `null` na WebView e deriva a role "machine" do contexto — assim o colaborador consegue abrir tickets normalmente.
|
||||
- Página de diagnóstico: `GET /portal/debug` exibe o status/JSON de `/api/auth/get-session` e `/api/machines/session` com os mesmos cookies da aba.
|
||||
|
||||
#### Troubleshooting rápido
|
||||
1. Abra o app desktop e deixe ele redirecionar para `/portal/debug`.
|
||||
2. Se `machines/session` for 200 e `get-session` for `null`, está OK — o portal usa `machineContext` assim mesmo.
|
||||
3. Se `machines/session` for 401/403:
|
||||
- Verifique CORS/credenciais (`Access-Control-Allow-Credentials: true`).
|
||||
- Garante que estamos usando `cookies.set` para aplicar todos os cookies da Better Auth.
|
||||
- Refaça o handshake (feche reabra o desktop). Opcional: renomeie `EBWebView` para limpar cookies no Windows.
|
||||
|
||||
## Requisitos
|
||||
- VPS com Docker/Swarm e Traefik já em execução na rede externa `traefik_public`.
|
||||
- Portainer opcional (para gerenciar a stack “sistema”).
|
||||
|
|
|
|||
|
|
@ -44,3 +44,9 @@ Saída de artefatos: `apps/desktop/src-tauri/target/release/bundle/`.
|
|||
```
|
||||
- Para logs detalhados em dev, rode `pnpm -C apps/desktop tauri dev`.
|
||||
|
||||
## Diagnóstico de sessão (Desktop → Portal)
|
||||
- Durante testes, navegue até `/portal/debug` (o desktop pode redirecionar automaticamente) para ver:
|
||||
- `/api/auth/get-session` — pode ser `null` na WebView; não é bloqueante.
|
||||
- `/api/machines/session` — precisa retornar `200` com `assignedUserId/email`.
|
||||
- Produção: as rotas de sessão/handshake enviam `Access-Control-Allow-Credentials: true` e aplicam cookies com `NextResponse.cookies.set(...)` para confiabilidade em navegadores/embeds.
|
||||
- O desktop mantém a navegação top‑level via `/machines/handshake` para maximizar a aceitação de cookies.
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ Legenda: ✅ concluído · 🔄 em andamento · ⏳ a fazer.
|
|||
- URLs configuráveis via `.env` do app desktop:
|
||||
- `VITE_APP_URL` → aponta para a interface Next (padrao produção: `https://tickets.esdrasrenan.com.br`).
|
||||
- `VITE_API_BASE_URL` → base usada nas chamadas REST (`/api/machines/*`), normalmente igual ao `APP_URL`.
|
||||
- Após provisionar ou encontrar token válido, o agente dispara `/machines/handshake?token=...` que autentica a máquina no Better Auth, devolve cookies e redireciona para a UI.
|
||||
- Após provisionar ou encontrar token válido, o agente dispara `/machines/handshake?token=...` que autentica a máquina no Better Auth, devolve cookies e redireciona para a UI. Em produção, mantemos a navegação top‑level pelo handshake para garantir a aceitação de cookies na WebView (mesmo quando `POST /api/machines/sessions` é tentado antes).
|
||||
- `apps/desktop/src-tauri/tauri.conf.json` ajustado para rodar `pnpm run dev/build`, servir `dist/` e abrir janela 1100x720.
|
||||
- Novas tabelas Convex: `machines` (fingerprint, heartbeat, vínculo com AuthUser) e `machineTokens` (hash + TTL).
|
||||
- Novos endpoints Next:
|
||||
|
|
@ -62,8 +62,23 @@ Legenda: ✅ concluído · 🔄 em andamento · ⏳ a fazer.
|
|||
- `POST /api/machines/sessions` — troca `machineToken` por sessão Better Auth e devolve cookies.
|
||||
- As rotas `/api/machines/*` respondem a preflight `OPTIONS` com CORS liberado para o agente (`https://tickets.esdrasrenan.com.br`, `tauri://localhost`, `http://localhost:1420`).
|
||||
- Rota `GET /machines/handshake` realiza o login automático da máquina (seta cookies e redireciona).
|
||||
- As rotas `sessions/handshake` foram ajustadas para usar `NextResponse.cookies.set(...)`, aplicando cada cookie da Better Auth (sessão e assinatura) individualmente.
|
||||
- CORS: as respostas incluem `Access-Control-Allow-Credentials: true` para origens permitidas (Tauri WebView e app).
|
||||
- Página de diagnóstico: `/portal/debug` exibe `get-session` e `machines/session` com os mesmos cookies da aba — útil para validar se o desktop está autenticado como máquina.
|
||||
- O desktop pode redirecionar automaticamente para essa página durante os testes.
|
||||
- Webhook FleetDM: `POST /api/integrations/fleet/hosts` (header `x-fleet-secret`) sincroniza inventário/métricas utilizando `machines.upsertInventory`.
|
||||
- Script `ensureMachineAccount` garante usuário `AuthUser` e senha sincronizada com o token atual.
|
||||
|
||||
### Inventário — Windows (fallback)
|
||||
- O agente coleta `extended.windows.osInfo` via PowerShell/WMI. Caso o script falhe (política ou permissão), aplicamos um fallback com `sysinfo` para preencher ao menos `ProductName`, `Version` e `BuildNumber` — evitando bloco vazio no inventário exibido.
|
||||
|
||||
### Portal do Cliente (UX)
|
||||
- Quando autenticado como máquina (colaborador/gestor):
|
||||
- O portal deriva o papel a partir do `machineContext` (mesmo se `/api/auth/get-session` vier `null`).
|
||||
- A listagem exibe apenas os tickets onde o colaborador é o solicitante.
|
||||
- Informações internas (Fila, Prioridade) são ocultadas; o responsável aparece quando definido.
|
||||
- A descrição do chamado vira o primeiro comentário (editor rico + anexos). A permissão de comentar pelo solicitante foi ajustada no Convex.
|
||||
- O botão “Sair” é ocultado no desktop (faz sentido apenas fechar o app).
|
||||
- Variáveis `.env` novas: `MACHINE_PROVISIONING_SECRET` (obrigatória) e `MACHINE_TOKEN_TTL_MS` (opcional, padrão 30 dias).
|
||||
- Variável adicional `FLEET_SYNC_SECRET` (opcional) para autenticar webhook do Fleet; se ausente, reutiliza `MACHINE_PROVISIONING_SECRET`.
|
||||
- Dashboard administrativo: `/admin/machines` usa `AdminMachinesOverview` com dados em tempo real (status, heartbeat, token, inventário enviado pelo agente/Fleet).
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue