# Tasks — Spec 004 Desk Account Management **Status:** ✅ **FECHADA** (2026-06-10) **API:** `0.9.4-desk-2fa-recovery` **Validação:** Roger — aprovado fim-a-fim --- ## Fase 1 — Cadastro e aprovação (004a) - [x] **T001** Schema `desk_registration_requests` - [x] **T002** `POST /api/v1/auth/register` - [x] **T003** `register.html` + link no login - [x] **T004** E-mail root + ticket pending - [x] **T005** Tela Mensagens — aprovar / rejeitar - [x] **T006** Aprovação + e-mail + ticket com link - [x] **T007** PRG pós-cadastro ## Fase 2 — Postfix e e-mail (004-postfix) - [x] **T010** Postfix VM122 - [x] **T011** `mail_notify.py` + env SMTP - [x] **T012** Ticket postfix infra - [x] **T013** LMTP VM108 `@ligbox.com.br` - [x] **T014** Remetente `ligbox-ops@ligbox.com.br` - [x] **T015** `transport_maps` → VM108:7025 - [x] **T016** `canonical_maps` legado → `@ligbox.com.br` ## Fase 3 — Ativação 2-de-3 + TOTP (004b) - [x] **T020** `pyotp` + `totp_util.py` - [x] **T021** Flags `*_verified` - [x] **T022** `POST /activate` lógica 2-de-3 - [x] **T023** `activate.html` layout 3 colunas - [x] **T024** QR local (`qrcode.min.js`) - [x] **T025** Barra progresso X/2 - [x] **T026** `/login/mfa` + step login - [x] **T027** ntfy tópico + push - [x] **T028** Fix headers ntfy (Unicode) ## Fase 4 — UI pt-BR e docs - [x] **T030** pt-BR UI/API/e-mails - [x] **T031** Regra `portugues-brasil.mdc` - [x] **T032** `docs/email-ligbox-vm108.md` - [x] **T033** `docs/postfix-vm122.md` - [x] **T034** Validação E2E Roger - [x] **T035** Spec + quickstart ## Fase 5 — Minha conta (004 v2) - [x] **T040** `POST /change-password` - [x] **T041** TOTP obrigatório na troca (se ativo) - [x] **T042** View Minha conta (todos perfis) - [x] **T043** `GET /me` → `totp_enabled` - [x] **T044** Formulário persistente (sem refresh apagar campos) - [x] **T045** Validação Roger — Minha conta OK ## Fase 6 — Recuperação 2FA + backup codes (2026-06-16) - [x] **T050** `backup_codes.py` — 10 códigos uso único - [x] **T051** Backup na ativação (TOTP) + e-mail - [x] **T052** `login/mfa` aceita `backup_code` - [x] **T053** `mfa_recovery_store.py` + rotas API - [x] **T054** Login UI — perdi autenticador + backup - [x] **T055** Notificação root início/fim recuperação - [x] **T056** Minha conta — contagem backup restantes - [x] **T057** Spec + quickstart atualizados --- ## Deploy ```bash cd /opt/ligbox-ops-platform docker-compose -f docker-compose.mvp.yml build api frontend docker-compose -f docker-compose.mvp.yml up -d api frontend postfix check && systemctl reload postfix ``` ## Verificação ```bash curl -s https://api.ops.ligbox.com.br/health # version: 0.8.0-desk-2fa-2of3 ```