🏗️ Arquitetura do Sistema

Entenda como o CaraProjetada funciona por trás

🔐 Fluxo de Autenticação

Usuario          Dashboard            AD Server
   │                 │                    │
   │  1. GET /          │                    │
   │ ───────────────────►│                    │
   │                 │  2. HTML Login        │
   │ ◄───────────────────│                    │
   │                 │                    │
   │  3. POST /login      │                    │
   │ ───────────────────►│                    │
   │                 │  4. LDAP bind          │
   │                 │ ───────────────►       │
   │                 │ ◄──────────────OK       │
   │ ◄───────────────────│                    │
   │                 │  5. HTML Dashboard     │
   │                 │  (lista salas)          │

🖥️ Fluxo de Conexão VNC

Usuario          Projetor (A)
   │                 │
   │  6. POST /sala/a/conectar         │
   │ ───────────────────────────────►│
   │                 │  7. Killa viewer antigo │
   │                 │     (se existir)        │
   │                 │  8. Executa:            │
   │                 │     xtightvncviewer      │
   │                 │     <IP_USUARIO>:0       │
   │                 │     -autopass (123456)  │
   │                 │ ───────────────────────►│
   │  9. VNC Server (UltraVNC)               │
   │ ◄═════════════════════════════════════════►│
   │      Tela do notebook no projetor

📡 API Endpoints

Rota Método Descrição Autenticação
`/` GET Página de login Não requerida
`/login` POST Autentica via LDAP Não requerida
`/dashboard` GET Lista de salas Obrigatória
`/api/salas` GET JSON com projetores Obrigatória
`/sala/{id}/status` GET Status de uma sala Obrigatória
`/sala/{id}/conectar` POST Conecta VNC Obrigatória
`/sala/{id}/desconectar` POST Desconecta VNC Obrigatória

🧩 Componentes do Sistema

Flask API

Servidor web leve que gerencia autenticação, sessões e controle do VNC. Roda na porta 80 do projetor.

LDAP Authenticator

Integração com o Active Directory da instituição. Valida credenciais em tempo real.

xtightvncviewer

Cliente VNC leve que exibe a tela do usuário no projetor. Controlado via subprocess.

UltraVNC Server

Servidor VNC que roda no notebook do usuário. Permite conexão reversa ao projetor.

Watchdog

Monitora saúde do sistema. Restarta serviços e limpa processos travados.

Guardian

Proteção contra falhas críticas. Verifica memória, CPU e reinicia se necessário.

🔄 Fluxo de Dados

                              ┌─────────────┐
                              │   USUÁRIO   │
                              │ (Notebook)  │
                              └──────┬──────┘
                                     │
                                     │ VNC Protocol
                                     ▼
┌─────────────────────────────────────────────────────────────────────┐
│                        PROJETOR (RK3229)                            │
│                                                                     │
│  ┌─────────────────┐    ┌─────────────────┐    ┌────────────────┐ │
│  │   Flask App     │    │ xtightvncviewer │    │   X Server     │ │
│  │  (Python)       │◄──►│  (viewer)       │◄──►│  (Xorg)        │ │
│  │  Port 80        │    │                 │    │   :0           │ │
│  └────────┬────────┘    └─────────────────┘    └────────────────┘ │
│           │                                                         │
│  ┌────────▼────────┐    ┌─────────────────┐                        │
│  │  LDAP Auth      │    │  LightDM        │                        │
│  │  (AD)           │    │  (Login Manager)│                        │
│  └─────────────────┘    └─────────────────┘                        │
└─────────────────────────────────────────────────────────────────────┘
                                     │
                                     │ HTTP API
                                     ▼
                              ┌─────────────┐
                              │ DASHBOARD   │
                              │   WEB       │
                              └─────────────┘