8.6 KiB
8.6 KiB
Plano Integrado – App Desktop & Inventário por Dispositivo (Arquivo)
Documento vivo. Atualize após cada marco relevante.
Contexto
- Objetivo: Expandir o Sistema de Chamados (Next.js + Convex + Better Auth) para suportar:
- Cliente desktop nativo (Tauri) mantendo UI web e realtime.
- Autenticação dispositivo-a-dispositivo usando tokens derivados do inventário.
- Integração com agente de inventário (osquery/FleetDM) para registrar hardware, software e heartbeats.
- Pipeline de distribuição para Windows/macOS/Linux.
- Escopo inicial: Focar no fluxo mínimo viável com inventário básico (hostname, OS, identificadores, carga resumida). Métricas avançadas e distribuição automatizada ficam para iteração seguinte.
Estado Geral
- Web atual permanece operacional com login por usuário/senha.
- Novas features serão adições compatíveis (machine login opcional).
- Melhor abordagem para inventário: usar osquery + FleetDM (stack pronta) integrando registros no Convex.
- Agente desktop coleta inventário básico + estendido por SO (Linux: dpkg/rpm + systemd + lsblk/lspci/lsusb/smartctl; Windows: WMI/registry via PowerShell; macOS: system_profiler/pkgutil/launchctl) e envia via heartbeat e/ou
/api/machines/inventory.
Marcos & Progresso
| Macro-entrega | Status | Observações |
|---|---|---|
| Documento de arquitetura e roadmap | 🔄 Em andamento | Estrutura criada, aguardando detalhamento incremental a cada etapa. |
| Projeto Tauri inicial apontando para UI Next | 🔄 Em andamento | Estrutura apps/desktop criada; pendente testar build após instalar toolchain Rust. |
| Schema Convex + tokens de dispositivo | ✅ Concluído | Tabelas machines / machineTokens criadas com TTL e fingerprint. |
| API de registro/heartbeat e exchange Better Auth | 🔄 Em andamento | Endpoints /api/machines/* disponíveis; falta testar fluxo end-to-end com app desktop. |
| Endpoint upsert de inventário dedicado | ✅ Concluído | POST /api/machines/inventory (modo por token ou provisioningSecret). |
| Integração FleetDM → Convex (inventário básico) | 🔄 Em andamento | Endpoint /api/integrations/fleet/hosts criado; falta validar payload real e ajustes de métricas/empresa. |
| Admin > Dispositivos (listagem, detalhes, métricas) | ✅ Concluído | Página /admin/devices exibe parque completo com status ao vivo, inventário e métricas. |
| Ajustes na UI/Next para sessão por dispositivo | ⏳ A fazer | Detectar token e exibir info da dispositivo em tickets. |
| Pipeline de build/distribuição Tauri | ⏳ A fazer | Definir estratégia CI/CD + auto-update. |
| Guia operacional (instalação, uso, suporte) | ⏳ A fazer | Gerar instruções finais com casos de uso. |
Legenda: ✅ concluído · 🔄 em andamento · ⏳ a fazer.
Dependências Técnicas
- Tauri Desktop: Rust + toolchain específico por SO, libwebkit2gtk (Linux), WebView2 (Windows), Xcode (macOS).
- FleetDM/osquery: Servidor Fleet (Docker ou VM), enrollment secret por tenant, agentes osquery instalados.
- Better Auth: Mechanismo para criar sessões usando subject
machine:*com escopos restritos. - Convex: Novas tabelas
machinesemachineTokens, mutações para registro/heartbeat/exchange. - Infra extra: Endpoints públicos para updater do Tauri, armazenamento de inventário seguro, certificados para assinatura de builds.
Próximos Passos Imediatos
- Desktop: finalizar UX das abas (mais detalhes em Diagnóstico e Configurações) e gráficos leves.
- Coletores Windows/macOS: normalizar campos de software/serviços (nome/versão/fonte/status) e whitelists.
- Regras: janela temporal real para CPU (dados de 5 min), whitelists por tenant, mais sinais SMART (temperatura e contadores).
- Admin UI: diálogo “Inventário completo” com busca em JSON, export CSV de softwares/serviços, badges no grid com contagens.
- Release: ativar secrets de assinatura e publicar binários por SO.
Notas de Implementação (Atual)
- Criada pasta
apps/desktopviacreate-tauri-appcom templatevanilla-ts. - O agente desktop agora possui fluxo próprio: coleta inventário local via comandos Rust, solicita o código de provisionamento, registra a dispositivo e inicia heartbeats periódicos (
src-tauri/src/agent.rs+src/main.ts). - Formulário inicial exibe resumo de hardware/OS e salva o token em
~/.config/Sistema de Chamados Desktop/machine-agent.json(ou equivalente por SO) para reaproveitamento em relançamentos. - URLs configuráveis via
.envdo 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 aoAPP_URL.
- Após provisionar ou encontrar token válido, o agente dispara
/machines/handshake?token=...que autentica a dispositivo 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 quandoPOST /api/machines/sessionsé tentado antes). apps/desktop/src-tauri/tauri.conf.jsonajustado para rodarbun run dev/build, servirdist/e abrir janela 1100x720.- Novas tabelas Convex:
machines(fingerprint, heartbeat, vínculo com AuthUser) emachineTokens(hash + TTL). - Novos endpoints Next:
POST /api/machines/register— provisiona dispositivo, gera token e usuário Better Auth (rolemachine).POST /api/machines/heartbeat— atualiza estado, métricas e renova TTL.POST /api/machines/sessions— trocamachineTokenpor sessão Better Auth e devolve cookies.
- As rotas
/api/machines/*respondem a preflightOPTIONScom CORS liberado para o agente (https://tickets.esdrasrenan.com.br,tauri://localhost,http://localhost:1420). - Rota
GET /machines/handshakerealiza o login automático da dispositivo (seta cookies e redireciona).- As rotas
sessions/handshakeforam ajustadas para usarNextResponse.cookies.set(...), aplicando cada cookie da Better Auth (sessão e assinatura) individualmente. - CORS: as respostas incluem
Access-Control-Allow-Credentials: truepara origens permitidas (Tauri WebView e app).
- As rotas
- Página de diagnóstico:
/portal/debugexibeget-sessionemachines/sessioncom os mesmos cookies da aba — útil para validar se o desktop está autenticado como dispositivo.- O desktop pode redirecionar automaticamente para essa página durante os testes.
- Webhook FleetDM:
POST /api/integrations/fleet/hosts(headerx-fleet-secret) sincroniza inventário/métricas utilizandomachines.upsertInventory. - Script
ensureMachineAccountgarante usuárioAuthUsere senha sincronizada com o token atual.
Inventário — Windows (fallback)
- O agente coleta
extended.windows.osInfovia PowerShell/WMI. Caso o script falhe (política ou permissão), aplicamos um fallback comsysinfopara preencher ao menosProductName,VersioneBuildNumber— evitando bloco vazio no inventário exibido.
Portal do Cliente (UX)
- Quando autenticado como dispositivo (colaborador/gestor):
- O portal deriva o papel a partir do
machineContext(mesmo se/api/auth/get-sessionviernull). - 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 portal deriva o papel a partir do
- O botão “Sair” é ocultado no desktop (faz sentido apenas fechar o app).
- Variáveis
.envnovas:MACHINE_PROVISIONING_SECRET(obrigatória) eMACHINE_TOKEN_TTL_MS(opcional, padrão 30 dias). - Variável adicional
FLEET_SYNC_SECRET(opcional) para autenticar webhook do Fleet; se ausente, reutilizaMACHINE_PROVISIONING_SECRET. - Dashboard administrativo:
/admin/devicesusaAdminMachinesOverviewcom dados em tempo real (status, heartbeat, token, inventário enviado pelo agente/Fleet).
Checklist de dependências Tauri (Linux)
sudo apt update
sudo apt install libwebkit2gtk-4.1-dev build-essential curl wget file \
libxdo-dev libssl-dev libayatana-appindicator3-dev librsvg2-dev
curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh
# reinicie o terminal e confirme: rustc --version
Ajuste conforme seu sistema operacional (ver https://tauri.app/start/prerequisites/).
Histórico de atualizações:
- 2025-02-20 — Fluxo completo do agente desktop, heartbeats e rota
/machines/handshakedocumentados (assistente).- 2025-02-14 — Documento criado com visão geral e plano macro (assistente).