'error', 'message' => 'Broker Base URL is required. Set it to http://broker:3000 (Docker) or your broker public URL.']; } if ($brokerInternalApiToken === '' && $brokerInternalApiTokenEnv === '') { $notices[] = ['type' => 'error', 'message' => 'Broker Internal API Token is not configured. Set BROKER_INTERNAL_API_TOKEN in your env file and/or set a matching token below.']; } if ($externalAuthDocsUrl === '') { $notices[] = ['type' => 'warning', 'message' => 'External Auth Docs URL is empty. Set it to your External Auth docs page for quick access.']; } if ($externalAuthBaseUrl === '' && $externalAuthBaseUrlEnv !== '') { $notices[] = ['type' => 'info', 'message' => 'External Auth Base URL is configured via .env. Admin panel value is empty by design.']; } elseif ($externalAuthBaseUrl === '') { $notices[] = ['type' => 'warning', 'message' => 'External Auth Base URL is not saved in this panel and no .env value was detected. Broker account operations may fail until it is configured.']; } if (($externalAuthAppId === '' || $externalAuthAppSecret === '') && $externalAuthAppIdEnv !== '' && $externalAuthAppSecretEnv !== '') { $notices[] = ['type' => 'info', 'message' => 'External Auth App ID/Secret are configured via .env. Admin panel values are empty by design.']; } elseif ($externalAuthAppId === '' || $externalAuthAppSecret === '') { $notices[] = ['type' => 'warning', 'message' => 'External Auth App ID/Secret are not saved in this panel and no complete .env pair was detected. Set them here (or run finish-initial-setup) for account operations.']; } if ($externalAuthNodeUrl === '' && $externalAuthNodeUrlEnv !== '') { $notices[] = ['type' => 'info', 'message' => 'External Auth Qortal Node URL is configured via .env. Admin panel value is empty by design.']; } elseif ($externalAuthNodeUrl === '') { $notices[] = ['type' => 'warning', 'message' => 'External Auth Qortal Node URL is not saved in this panel and no .env value was detected.']; } if ($externalAuthNodeUrl !== '' && $externalAuthNodeApiKey === '' && $qortalNodeApiKey === '') { $notices[] = ['type' => 'warning', 'message' => 'External Auth node API key is empty. Restricted Qortal endpoints may fail if the node requires an API key. In containerized setups, set QORTAL_AUTH_NODE_API_KEY in .env.devprod and recreate external_auth.']; } elseif ($externalAuthNodeUrl !== '' && $externalAuthNodeApiKey === '' && $qortalNodeApiKey !== '') { $notices[] = ['type' => 'warning', 'message' => 'External Auth node API key is empty. Runtime sync will fall back to the Qortal Node API key value.']; } if ($oidcIssuerUrl === '' && $brokerBaseUrl === '') { $notices[] = ['type' => 'error', 'message' => 'OIDC Issuer URL cannot be resolved. Set Broker Base URL or provide an explicit issuer URL.']; } if ($oidcClientId === '') { $notices[] = ['type' => 'warning', 'message' => 'OIDC Client ID is empty. Default will fall back to nextcloud-local.']; } if ($oidcClientSecret === '') { $notices[] = ['type' => 'error', 'message' => 'OIDC Client Secret is required. Set it in the OIDC Provider Settings section.']; } elseif ($oidcClientSecret === 'dev-secret') { $notices[] = ['type' => 'warning', 'message' => 'OIDC Client Secret in this panel is set to dev-secret (default). If you use this panel to configure OIDC, replace it before production.']; } } if ($nextcloudPublicUrl === '') { $notices[] = ['type' => 'warning', 'message' => 'Nextcloud Public URL is not saved in this panel. Setup actions in this panel may not update trusted domains/overwrite settings unless this is set here.']; } if ($isPoweredMode && $scBillingManagedByChd) { if ($scChdBaseUrl === '' || $scChdInstanceId === '') { $notices[] = ['type' => 'warning', 'message' => 'CHD billing is enabled but not fully connected yet. Use "Connect Installation + Sync" in NuQloud V1 Billing + Entitlements to complete one-click bootstrap.']; } } ?>
Configure NuQloud for Nextcloud integration, onboarding, and app access. Configure broker connectivity, setup accounts, and manage pre-linked identities for Qortal OIDC link mode.
These checks reflect values saved in this admin panel. Runtime container env values may differ.
Powered mode is a guided mode with assistance and services provided by CHD.
Shows extra diagnostics for integration workflows, including Activity + Notifications debug data and the app viewer debug panel.
When disabled, users only see the password + unlock flow with the default unlock window. When enabled, users can choose a longer or shorter unlock window from their personal settings.
Enabled by default. Applies non-admin protections similar to your HAProxy hardening defaults.
Default protected areas include /lists POST/DELETE, /crosschain/tradebot,
sensitive /admin/* mutation endpoints (including /admin/apikey/generate),
and selected fully blocked discovery/maintenance paths.
Custom rules are evaluated after defaults. Use these to add project-specific non-admin API path limits.
Required broker endpoints: /api/health and /api/qortal/health
Used by Nextcloud when calling broker internal APIs. Must match broker env BROKER_INTERNAL_API_TOKEN.
For containerized setup, prefer setting the env value in .env.devprod.
Save only mode/branding/apps and user-facing access settings from this section.
Save All updates all settings and attempts live broker/external-auth runtime sync. Container env files are not changed by this action.
Billing Authority: CHD. Ensure to sync entitlements if data is outdated. Initial sync should be automatic, but can be attempted again if issues occurred during setup.
Status: •
This billing information is instance-wide and shared with admins. If you do not want to use shared instance billing, purchase from the NuQloud Dashboard, which uses individualized billing per user account.
Billing Authority: CHD. Use this section to connect the instance, provide billing profile details, and sync entitlements. When required values are available, initial connect/sync is attempted automatically.
Choose subscription packages and add-ons. Your billing profile above is reused automatically.
Support and troubleshooting options. Most installations should leave this collapsed.
Advanced option. This hides billing/purchase UI on dashboards but does not disconnect CHD or remove admin shared billing settings. Use CHD Managed Billing / disconnect options for a full connector disconnect.
Default is disabled. When enabled, users in this Nextcloud group get delegated admin access for invites, initial grant queue actions, and instance billing operations.
Use the exact Nextcloud group id. Group creation is managed separately (for example via OCC: group:add MSP_Admin).
Saves only delegated MSP admin settings from this section.
These values are used when generating or running the user_oidc provider setup only.
They do not update broker runtime env values.
Defaults to broker base URL if left empty.
Used to update trusted domains and overwrite settings when running setup.
Saves OIDC provider values and policy overrides.
Store External Auth connection details here for runtime sync and env generation. Save Settings stores these in Nextcloud and attempts live runtime sync through the broker. If your daemon does not expose runtime settings endpoints, update env files and recreate/restart containers.
Important: for bundled/containerized External Auth, set QORTAL_AUTH_NODE_API_KEY in
.env.devprod and recreate external_auth. The admin field below is a best-effort
runtime override and may not persist across container restarts.
Used by broker as QORTAL_EXTERNAL_AUTH_BASE_URL.
Warning: registering a new app will replace existing credentials. If External Auth is already configured
via .env, this will generate a new App ID/Secret and you may lose access to existing wallets.
Backup your .env or .env.devprod first.
If left empty, runtime sync falls back to the key in “”.
For containerized setup, still set QORTAL_AUTH_NODE_API_KEY in .env.devprod.
Only used when mode is set to paths. Use / to send X-API-KEY on all node API calls.
Save Settings attempts live runtime sync through the broker. If your External Auth daemon
does not expose runtime settings endpoints, apply env files and restart with
./recreate-devprod.sh --extauth or
docker compose up -d --build broker external_auth.
Configure the publisher node used for encrypted/chunked backup publishing and app rendering. Gateway nodes expose a separate gateway port and do not require an API key. Configure the node used for Q-App rendering and signed requests. Gateway nodes expose a separate gateway port and do not require an API key.
Use a public gateway (e.g. https://qortal.link) or your own gateway node URL.
Use only if your gateway uses a self-signed certificate or the container lacks CA roots. Recommended to keep off for production.
When running a local node container, ensure gateway mode is enabled and expose the gateway port.
Broker internal APIs require BROKER_INTERNAL_API_TOKEN on the broker service.
If this token changes in env, update the matching token here (or via app env QORTAL_BROKER_INTERNAL_API_TOKEN).
Generate the setup commands or run them automatically (requires occ access inside the Nextcloud container).
Read-only effective broker policy values (from env defaults plus optional admin overrides).
unknownunknown-unknown-Save Settings now syncs these overrides to broker runtime. Leave a field blank to keep using env defaults.
Register trusted private apps as OIDC clients. Client secrets are shown only when created or rotated.
Templates prefill common values. Always replace example domains with the app's real public URL.
| Client | Redirect URIs | Scopes | Groups | Status | Actions |
|---|
| Event | Client | User | Created |
|---|
Use one of the supported setup entry points depending on your environment.
Enable app access in Nextcloud and define allowed qortal:// app addresses.
When disabled, end users keep account/backup access but publishing-credit request, send, and name-registration actions are hidden.
Optional admin override for Files Bridge publish size. Leave blank to use the env default
() or the broker ceiling.
Actual publish size is still capped by the broker request limit and PHP runtime limits.
Effective publish limit: | Effective batch payload: | Desired source:
Broker body limit:
| PHP upload_max_filesize:
| PHP post_max_size:
| PHP memory_limit:
Container recreation envs: BROKER_REQUEST_BODY_LIMIT, QORTAL_FILES_PUBLISH_MAX_SIZE,
NEXTCLOUD_PHP_UPLOAD_MAX_FILESIZE, NEXTCLOUD_PHP_POST_MAX_SIZE, and
NEXTCLOUD_PHP_MEMORY_LIMIT.
Optional admin override for the maximum number of eligible files that may be published in one immediate request.
Leave blank to use the env default ()
or the built-in safety default.
Effective immediate publish cap: | Source:
This cap prevents a single publish action from overrunning typical Qortal node unconfirmed transaction ceilings. Larger selections should be split into multiple batches until queued publishing is added.
Optional env override: QORTAL_FILES_PUBLISH_MAX_COUNT.
| Name | Qortal Address | Icon | Description | Actions |
|---|
link_only mode).Create accounts through the broker using configured External Auth app credentials. If you link an account to a user, share the password securely with that user.
| Account ID | Address | Created |
|---|
Link or unlink Qortal addresses so OIDC login can resolve identities in link_only mode.
| Qortal Address | Nextcloud User | Account ID | Status | Updated | Actions |
|---|
These addresses can be preloaded for future use. Enforcement only applies when
OIDC_POLICY_MODE=auto_provision and the guard is enabled.
| Qortal Address | Added By | Added | Actions |
|---|
Generate an invite token for creating a NuQloud Create Account / Login cloud user via invite onboarding. Generate invite tokens for users to paste into the Qortal login form when auto-provisioning.
| Token | Comment | Status | Expires | Used By | Actions |
|---|
Support tools for users who opted into managed recovery. Recovery reveal still requires both admin one-time code and user recovery passphrase.
Generate an invite message and invite token to create a new cloud user via NuQloud Create Account / Login. Use the E-Mail address you used on the payment server so the account stays connected properly to the payment system. Generate a message for existing Qortal users. When auto-provisioning is enabled, an invite token is included. In link-only mode, this message prompts users to link their Qortal account to an existing Nextcloud login.
This assists existing cloud users in setting up their decentralized NuQloud authentication powered by Qortal.
Placeholders: {link}, {invite}, {user}, {displayName}, {email}, {cloudName}, {instanceName}, {orderId}, {invoiceId}, {packageTier}
Search and add users or groups, or add one per line above for invite functionality.
| User ID | Display Name | Actions |
|---|
| Group ID | Display Name | Actions |
|---|