Skip to content

Admin Settings

OxiCloud exposes an admin API for runtime configuration, dashboard stats, and user administration. All routes live under /api/admin and require an authenticated admin JWT.

Settings Endpoints

MethodPathDescription
GET/api/admin/settings/oidcRead current OIDC settings
PUT/api/admin/settings/oidcSave OIDC settings
POST/api/admin/settings/oidc/testTest provider connectivity
GET/api/admin/settings/generalRead general server settings

The OIDC runtime UI complements the base configuration described in OIDC / SSO and the provider samples in OIDC Config Examples.

Dashboard Endpoint

MethodPathDescription
GET/api/admin/dashboardRead server statistics and feature state

Typical dashboard fields include:

  • server version
  • whether auth and OIDC are enabled
  • whether quotas are enabled
  • total, active, and admin user counts
  • quota usage totals and percentage

User Management Endpoints

MethodPathDescription
GET/api/admin/usersList users
GET/api/admin/users/{id}Get one user
DELETE/api/admin/users/{id}Delete a user
PUT/api/admin/users/{id}/roleChange role
PUT/api/admin/users/{id}/activeActivate or deactivate a user
PUT/api/admin/users/{id}/quotaUpdate a storage quota

Built-in safety guards

  • Admins cannot delete their own account
  • Admins cannot change their own role
  • Admins cannot deactivate themselves

OIDC Settings Priority

When the same setting exists in multiple places, OxiCloud resolves it in this order:

  1. Environment variables such as OXICLOUD_OIDC_*
  2. Values stored in the admin settings table
  3. Built-in defaults

If a value is overridden by environment variables, the admin API can expose that in the response so operators know why a saved value is not taking effect.

Test Connection Example

json
{
  "issuer_url": "https://keycloak.example.com/realms/main"
}

Successful responses include discovered endpoints such as the authorization endpoint, token endpoint, and userinfo endpoint.

Data Storage

Runtime settings are stored in auth.admin_settings.

sql
CREATE TABLE IF NOT EXISTS auth.admin_settings (
    key        TEXT PRIMARY KEY,
    value      TEXT NOT NULL,
    category   TEXT NOT NULL,
    is_secret  BOOLEAN DEFAULT FALSE,
    updated_by VARCHAR(36),
    updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

Released under the MIT License.