T2Mark Docs
Painel
Docs / Guia Rápido / Arquitetura

Arquitetura

O T2Mark é composto por três camadas que se comunicam via HTTP/HTTPS.

Stack tecnológica

Camada Tecnologia
Backend PHP (framework MVC custom — Setor9 Simple MVC), MariaDB
Frontend Bootstrap, Feather Icons, Smooch Sans + Mozilla Text
API REST sobre HTTP, autenticação por X-API-Key (SHA-256)
Agente Windows (C#/.NET), comunica via HTTPS
Infra Docker + Docker Compose, Nginx reverse proxy, Ubuntu 24.04

Fluxo de autenticação do agente

O agente Windows segue um fluxo de dois estágios para se autenticar na API:

Estágio 1 — Registro

Agente                          API
  │                              │
  │  POST /api/register          │
  │  { tenantKey, hostname,      │
  │    hwid, osVersion }         │
  │─────────────────────────────▶│
  │                              │  Valida tenantKey
  │                              │  Gera apiKey (random 64 chars)
  │                              │  Armazena SHA-256(apiKey) no banco
  │  201 { apiKey, machineId }   │
  │◀─────────────────────────────│
  │                              │

Estágio 2 — Operação

Agente                          API
  │                              │
  │  GET /api/policy             │
  │  X-API-Key: <apiKey>         │
  │─────────────────────────────▶│
  │                              │  SHA-256(apiKey) → busca no banco
  │                              │  Valida status da máquina e tenant
  │  200 { template, version,   │
  │        visualConfig }        │
  │◀─────────────────────────────│
  │                              │

Multi-tenancy

O sistema é multi-tenant: cada empresa (tenant) tem seus próprios dados isolados. O isolamento é garantido por:

Todas as queries de Model usam filtro duplo: WHERE id = :id AND tenantId = :tenantId, prevenindo ataques de IDOR (Insecure Direct Object Reference).

Estrutura de diretórios

Application/
  ├─ core/          Framework base (Router, Controller, Database)
  ├─ controllers/   Handlers de requisição (Api, Home, Politica...)
  ├─ models/        Acesso a dados (Users, Tenants, Politicas, Apikeys...)
  ├─ views/         Templates PHP (HTML)
  └─ theme/         Layout: header.php + footer.php

public/
  └─ index.php      Entry point (front controller)