obsidian-vault/ligbox-ops-platform/specs/043-desk-client-activation-sync/contracts/mail-bundle-api.md
Ligbox Obsidian Vault e5564c15b9 Obsidian: Spec 043 mail-bundle + FOSS ligbox-mail-business
Sync contratos, runbooks VM112/VM123, código wizard e VM112.md com deploy validado.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-01 16:54:41 +00:00

101 lines
2.6 KiB
Markdown

# Contrato — API Wizard `POST /api/internal/provision/mail-bundle`
**Spec:** [043](../spec.md) · [035](../../035-ligbox-mail-bundles-foss-openpanel/spec.md)
**VM:** 112 (`10.10.10.112:8090`)
**Status:** ✅ Implementado no repo · deploy VM112 pendente
**Auth:** `X-Ops-Internal-Token` (mesmo valor Desk `OPS_INTERNAL_TOKEN`)
---
## POST `/api/internal/provision/mail-bundle`
Provisiona domínio Carbonio + conta gerente com quotas do bundle mail.
### Request
```json
{
"domain": "empresa.com.br",
"admin_email": "admin@empresa.com.br",
"admin_name": "João Silva",
"seats": 25,
"mail_gb_per_seat": 30,
"files_gb_per_seat": 200,
"foss_order_id": 55
}
```
| Campo | Obrigatório | Descrição |
|-------|-------------|-----------|
| `domain` | sim | Domínio cliente |
| `admin_email` | sim | Conta gerente (`admin@{domain}`) |
| `admin_name` | não | Display name Carbonio |
| `seats` | não (default 25) | Licenças mail bundle |
| `mail_gb_per_seat` | não (default 30) | Quota GB/caixa gerente |
| `files_gb_per_seat` | não (default 200) | Nextcloud (fase 034) |
| `foss_order_id` | não | Correlação FOSS order |
### Response 200
```json
{
"ok": true,
"domain": "empresa.com.br",
"admin_email": "admin@empresa.com.br",
"mail_host": "mail.empresa.com.br",
"webmail_url": "https://mail.empresa.com.br/",
"files_url": "https://files.empresa.com.br/",
"seats": 25,
"provisioned": true,
"already_provisioned": false,
"account_reused": false
}
```
### Erros
| HTTP | Condição |
|------|----------|
| 401 | Token interno inválido |
| 400 | Domínio/email inválido |
| 502 | Carbonio/zmprov falhou |
| 503 | `OPS_INTERNAL_TOKEN` ausente no wizard |
---
## GET `/api/internal/provision/mail-bundle/{domain}`
Estado do bundle (sem senhas).
---
## Código
| Artefacto | Path repo |
|-----------|-----------|
| Serviço | `projects/wizard/backend/app/services/mail_bundle.py` |
| Router | `projects/wizard/backend/app/routers/internal_provision.py` |
| Deploy VM112 | `deploy/vm112-wizard/deploy-mail-bundle-vm112.py` |
| Cliente Desk | `projects/ops-desk/api/app/vm123/wizard_client.py` |
---
## Deploy VM112
```bash
# Na VM112 (SSH)
cd /opt/ligbox-spec-hub/repos/ligbox-ops-platform # ou clone Forgejo
git pull
python3 deploy/vm112-wizard/deploy-mail-bundle-vm112.py
systemctl restart ligbox-wizard
# Teste
curl -s -X POST http://127.0.0.1:8090/api/internal/provision/mail-bundle \
-H "X-Ops-Internal-Token: $OPS_INTERNAL_TOKEN" \
-H "Content-Type: application/json" \
-d '{"domain":"teste.ligbox.com.br","admin_email":"admin@teste.ligbox.com.br","seats":25}'
```
---
*Roger · 2026-07-01 · Spec 043 fecho ciclo mail-bundle*