feat(modules): admin settings API — GET/PUT settings, test connectivity #99

Closed
opened 2026-02-14 19:46:31 +00:00 by forbes · 0 comments
Owner

Ref: docs/MODULES.md §7, §11 step 6

Implement admin settings CRUD and connectivity test endpoints.

Endpoints:

GET /api/admin/settings — full config grouped by module, secrets redacted (****)
GET /api/admin/settings/{module} — single module config block
PUT /api/admin/settings/{module} — update module config, returns {updated, restart_required}
POST /api/admin/settings/{module}/test — test external connectivity

PUT behavior (§5.4):

  1. Validate payload against module config schema
  2. Write changed keys to settings_overrides table
  3. Update module_state if enabled changed
  4. Apply to in-memory config (hot reload where safe)
  5. Broadcast settings.changed SSE event
  6. Return restart_required: true for server/database/storage/schemas changes

Test connectivity (§7.4):

Module Test
storage Ping MinIO, verify bucket
auth (ldap) LDAP bind
auth (oidc) Fetch discovery document
odoo XML-RPC connection

Response: {success, message, latency_ms}

Hot reload vs restart (§5.5):

  • Hot reload: module toggles, auth providers, CORS, odoo, freecad, jobs timeouts
  • Restart required: server.host/port, database., storage., schemas.directory

Depends on #94, #96.

**Ref:** docs/MODULES.md §7, §11 step 6 Implement admin settings CRUD and connectivity test endpoints. **Endpoints:** `GET /api/admin/settings` — full config grouped by module, secrets redacted (`****`) `GET /api/admin/settings/{module}` — single module config block `PUT /api/admin/settings/{module}` — update module config, returns `{updated, restart_required}` `POST /api/admin/settings/{module}/test` — test external connectivity **PUT behavior (§5.4):** 1. Validate payload against module config schema 2. Write changed keys to `settings_overrides` table 3. Update `module_state` if `enabled` changed 4. Apply to in-memory config (hot reload where safe) 5. Broadcast `settings.changed` SSE event 6. Return `restart_required: true` for server/database/storage/schemas changes **Test connectivity (§7.4):** | Module | Test | |--------|------| | `storage` | Ping MinIO, verify bucket | | `auth` (ldap) | LDAP bind | | `auth` (oidc) | Fetch discovery document | | `odoo` | XML-RPC connection | Response: `{success, message, latency_ms}` **Hot reload vs restart (§5.5):** - Hot reload: module toggles, auth providers, CORS, odoo, freecad, jobs timeouts - Restart required: server.host/port, database.*, storage.*, schemas.directory Depends on #94, #96.
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: kindred/silo#99