Cria produto FOSS (product_id=3), endpoint mail-bundle no wizard VM112 com contrato documentado, e runbook de deploy para fechar o ciclo de activação. Co-authored-by: Cursor <cursoragent@cursor.com>
101 lines
2.6 KiB
Markdown
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*
|