ligbox-ops-platform/specs/032-purge-domain-extra-auth/spec.md
Ligbox Spec Hub 2168d432f7 Docs: Spec 032 purge extra-auth codes and cross-refs in 017.
Document Infra authorization codes for protected domains (myvexx.com) and update backlog.
2026-06-19 22:22:14 +00:00

6.6 KiB
Raw Blame History

Spec 032 — Purge domínio: autorização extra (códigos Infra)

Criado: 2026-06-19
Solicitado por: Roger
Prioridade: P1 (domínios críticos / conferência)
Status: Implementado (Desk VM122, 2026-06-19)
Sistema: Desk VM122 · página Infra + Serviços (Spec 018)
Relacionado: Spec 017 (purge domínio) · Spec 018 (orquestração Serviços) · Spec 003 (RBAC)


Resumo

Domínios em PURGE_EXTRA_AUTH_DOMAINS (inicial: myvexx.com) não podem ser apagados em Serviços apenas com confirmação do domínio + senha Root.

Exigem um código de autorização gerado pelo super_admin (root) em Infraestrutura, com senha Root, para uso em conferência com quem executa o purge.

Motivo: evitar purge acidental ou não autorizado de tenants críticos / produção, mantendo o fluxo Spec 017 para o resto dos domínios.


Níveis de proteção purge

Nível Domínios Requisitos purge
Blocklist ligbox.com.br, itecnologys.com Purge proibido (HTTP 400)
Extra auth myvexx.com (+ lista configurável) Senha Root + código autorização (uso único)
Normal restantes Senha Root + confirmação domínio (Spec 017)

Fluxo operacional (conferência)

  1. Root abre Infraestrutura → card «Códigos autorização purge».
  2. Preenche domínio (myvexx.com), nota opcional (ex.: ticket, call), validade (horas), senha Root.
  3. Sistema gera código formato XXXX-XXXXmostrado uma vez; root comunica na call.
  4. Operador (Admin) abre Serviços → modal purge do domínio.
  5. Preenche confirmação domínio, senha Root e código autorização.
  6. Purge segue fluxo Spec 017 (job async + drawer + histórico).

RBAC

Acção Perfil
Gerar código (Infra) super_admin apenas
Listar códigos activos (Infra) super_admin apenas
Executar purge (com código) super_admin, ops_lead + senha Root
Ver domínios protegidos qualquer utilizador autenticado (API metadata)

Geração exige senha Root do utilizador root em desk_users (mesma validação do purge Spec 017).


API Desk (VM122)

Metadata

Método Path Descrição
GET /api/v1/infra/purge-auth-domains Lista PURGE_EXTRA_AUTH_DOMAINS + can_generate

Geração / listagem (super_admin)

Método Path Descrição
POST /api/v1/infra/purge-auth-codes Gera código (body abaixo)
GET /api/v1/infra/purge-auth-codes?active_only=1&limit=50 Códigos activos (sem revelar hash)

Body POST geração:

{
  "domain": "myvexx.com",
  "root_password": "********",
  "note": "Autorizado call Roger 19/06",
  "ttl_hours": 24
}

Resposta (única exibição do código):

{
  "ok": true,
  "id": "a1b2c3d4e5f67890",
  "domain": "myvexx.com",
  "code": "D25C-0B12",
  "expires_at": "2026-06-20T22:06:39+00:00",
  "ttl_hours": 24,
  "note": "Autorizado call Roger 19/06"
}

Purge (Spec 017 — campo extra)

Todos os endpoints purge aceitam campo opcional:

{
  "confirm_domain": "myvexx.com",
  "root_password": "********",
  "purge_auth_code": "D25C-0B12"
}
Situação HTTP
Domínio extra-auth sem código 403 — exige código gerado em Infra
Código inválido / expirado / já usado 403
Domínio blocklist 400

Detalhe domínio (GET /api/v1/vm112/domains/{domain}) inclui:

  • purge_extra_auth_required: true para domínios extra-auth
  • purge_blocked: true para blocklist

Persistência

Campo Valor
Base /var/lib/ligbox-ops-platform/ops.db (Docker: /data/ops.db)
Tabela purge_auth_codes
Código Hash bcrypt — não recuperável após geração
Uso Únicoused_at + used_by ao validar no purge
TTL 1168 h (env PURGE_AUTH_CODE_TTL_HOURS default 24)

Colunas: id, domain, code_hash, note, created_by, created_at, expires_at, used_at, used_by.


UI Desk

Infraestrutura

Card «Códigos autorização purge»:

  • Lista domínios protegidos
  • Formulário geração (super_admin)
  • Tabela códigos activos (domínio, nota, expira, criador)
  • Código gerado em destaque — copiar na conferência

Serviços (Spec 018)

Modal purge do domínio:

  • Se purge_extra_auth_required: campo «Código autorização purge»
  • Aviso: gerar em Infra (root)
  • Validação client-side: campo obrigatório se visível

Implementação (referência)

Ficheiro Alteração
api/app/vm112_domains.py PURGE_EXTRA_AUTH_DOMAINS, requires_purge_extra_auth()
api/app/purge_auth_codes.py Schema, geração, validação, consumo
api/app/purge_auth_routes.py Rotas /api/v1/infra/purge-auth-*
api/app/vm112_domains_routes.py purge_auth_code no body purge
api/app/main.py Router + init_purge_auth_schema no startup
frontend/assets/app.js renderPurgeAuthInfraPanel()
frontend/assets/servicos.js Campo código no purge
frontend/assets/styles.css Estilos card/código

Commit: a39618a (VM130 ligbox-ops-platform)


Critérios de aceitação

  1. myvexx.com purge falha sem purge_auth_code (403).
  2. Root gera código em Infra com senha Root → código XXXX-XXXX exibido uma vez.
  3. Purge com código válido + senha Root → job inicia (Spec 017).
  4. Segundo purge com mesmo código → 403 (código consumido).
  5. Código expirado → 403.
  6. technician / noc não vêem form de geração em Infra.
  7. Domínios blocklist continuam impossíveis de purge.
  8. Detalhe domínio em Serviços mostra campo código só para extra-auth.

Fora de escopo

  • Códigos reutilizáveis ou multi-domínio
  • Notificação push/email do código
  • Integração OTRS/ticket automático ao gerar
  • Histórico de códigos usados na UI Eventos (só listagem activos em Infra)
  • Geração via CLI/SSH (apenas UI Infra + API)

Evolução

Item Prioridade
Adicionar domínios a PURGE_EXTRA_AUTH_DOMAINS via env/config P2
Audit log dedicado «código gerado / consumido» P2
Link Serviços → Infra para domínios protegidos P3

Conclusão

A Spec 032 complementa a 017: o purge completo mantém-se igual, mas domínios críticos exigem dupla confirmação (senha Root + código de conferência gerado pelo root em Infra).

Domínio inicial protegido: myvexx.com