review-email-aliases-signoff.md (3670B)
1 # Revisão: aliases de email (Parte 2) 2 3 [← Índice](README.md) 4 5 Registo da revisão de código e validação. Atualizar a secção **VPS** após correr o smoke test no servidor. 6 7 | Campo | Valor | 8 |-------|--------| 9 | Data | 2026-05-19 | 10 | Commit | `e357e93` (ajustar após `git rev-parse HEAD` no deploy) | 11 | Revisor | Automatizado + checklist manual | 12 13 ## Fase 1 — Estática (Windows / clone) 14 15 | Item | Resultado | Notas | 16 |------|-----------|--------| 17 | 1.1 Sem Mailgun/Postfix/DNS no código `tools/` | **PASS** | Grep sem matches | 18 | 1.1 Alias fixo `username@domínio` | **PASS** | `alias_address()` | 19 | 1.1 Usernames reservados | **PASS** | `ALIAS_RESERVED_USERNAMES` completo | 20 | 1.1 Validação destino | **PASS** | Script Python com 6 casos | 21 | 1.1 `O_EXCL` em pedidos | **PASS** | `create_pending_request()` | 22 | 1.1 Arquivo sem apagar | **PASS** | `archive_request()` | 23 | 1.1 Admin root | **PASS** | `require_root()` após `parse_args` | 24 | 1.1 Lock + escrita atómica | **PASS** | `approve_pending()` | 25 | 1.1 Setup idempotente | **PASS** | `setup_email_aliases.py` | 26 | 1.2 Sem leitura `users.json` nos bins membro | **PASS** | Só setup `--add-existing-users` | 27 | 1.3 `compileall` | **PASS** | | 28 | 1.3 `--help` (3 entrypoints) | **PASS** | | 29 | 1.3 `setup --dry-run` | **PASS** | | 30 31 ### Correcções aplicadas na revisão 32 33 - Re-validação de `destination` em `approve_pending()` antes de gravar alias activo. 34 - Rejeição de `--reason` vazio em `runv-admin-email-alias reject`. 35 - Script [`scripts/admin/smoke_test_email_aliases.py`](../scripts/admin/smoke_test_email_aliases.py) para VPS/WSL. 36 - Secção em [14-smoke-tests-and-validation.md](14-smoke-tests-and-validation.md). 37 38 ## Fase 2 — VPS Linux 39 40 ### 2.3–2.5 Lógica (WSL, modo direct, temp dir) 41 42 | Secção | Resultado | Notas | 43 |--------|-----------|--------| 44 | 2.3 E2E request → approve → list | **PASS** | `smoke_test_email_aliases.py --user pablo` em WSL | 45 | 2.4 Validações / cancel / reject | **PASS** | mesmo script | 46 | 2.5 Alteração destino | **PASS** | `created_at` preservado | 47 48 ### 2.2 / bins instalados (executar na VPS) 49 50 ```bash 51 cd /caminho/para/runv-server 52 git pull 53 COMMIT=$(git rev-parse --short HEAD) 54 echo "Testando commit $COMMIT" 55 56 sudo python3 scripts/admin/setup_email_aliases.py --verbose 57 sudo python3 scripts/admin/setup_email_aliases.py --add-existing-users 58 cd tools && sudo python3 tools.py --verbose 59 60 sudo python3 scripts/admin/smoke_test_email_aliases.py --user SEU_MEMBRO_TESTE 61 ``` 62 63 | Secção | Resultado | Data / notas | 64 |--------|-----------|----------------| 65 | 2.2 Setup + instalação | _pendente VPS_ | `which`, `ls -la /var/lib/runv/email-*` | 66 | 2.2 Smoke subprocess (bins reais) | _pendente VPS_ | sem `--direct`; exige `sudo` | 67 | 2.6 Regressão Parte 1 | _pendente VPS_ | `runv-profile`, `runv-who`, etc. | 68 | 2.7 Docs vs saída real | **PASS** | revisão estática 08 + 17 | 69 70 ### Permissões esperadas (2.2) 71 72 ```text 73 /var/lib/runv/email-aliases.json 640 root:runv-members 74 /var/lib/runv/email-aliases.lock 660 root:runv-members 75 /var/lib/runv/email-alias-queue/ 2770 root:runv-members 76 ``` 77 78 ## Critérios finais 79 80 - [x] Fase 1 sem bloqueantes 81 - [x] Fase 2.3–2.5 lógica validada (WSL + smoke script) 82 - [ ] Fase 2.2 + smoke **subprocess** na VPS Debian (operador) 83 - [x] Nenhum código envia email ou configura Mailgun/DNS para aliases 84 - [x] Documentação 08 + 17 alinhada com implementação 85 - [ ] Operador confirmou passo manual pós-`approve` no provedor real 86 87 ## Comando único recomendado na VPS 88 89 ```bash 90 sudo python3 scripts/admin/smoke_test_email_aliases.py --user MEMBRO 91 ``` 92 93 Saída esperada final: `Smoke test aliases de email: PASS`