feat(config + admin panel): handle features activated

- review admin dashboard to reflect features enabled/disabled
- hide mount option if feature is disabled
- remove QUOTA option as it is not wired
This commit is contained in:
Edouard Vanbelle
2026-09-11 13:02:33 +02:00
parent 5083eaeaba
commit 8d1fde2747
16 changed files with 303 additions and 134 deletions
+45 -17
View File
@@ -387,9 +387,6 @@ DATABASE_URL=postgres://postgres:postgres@localhost:5432/oxicloud
# Enable/disable authentication system (default: true)
#OXICLOUD_ENABLE_AUTH=true
# Enable per-user storage quotas (default: false)
#OXICLOUD_ENABLE_USER_STORAGE_QUOTAS=false
# Enable file/folder sharing (default: true)
#OXICLOUD_ENABLE_FILE_SHARING=true
@@ -464,6 +461,37 @@ DATABASE_URL=postgres://postgres:postgres@localhost:5432/oxicloud
# Set to false to prevent users from browsing the user directory.
#OXICLOUD_EXPOSE_SYSTEM_USERS=true
# External file mounts — surface host-filesystem paths (or a future
# S3/WebDAV/SFTP backend) as folders inside a user's drive. Admins
# configure mount rows via /api/admin/external-mounts (the "External
# Mounts" tab in the admin panel); each row picks a target drive, a
# name for the mount root, a provider kind, and a provider-specific
# config (e.g. host path for local).
#
# When `false` (default):
# - Admin CRUD routes (/api/admin/external-mounts) are NOT
# registered — Axum returns 404. The admin panel's "External
# Mounts" tab is hidden from the sidebar too (FE gates on
# `serverConfig.features.external_mounts` — same discovery path
# as `message_bus`).
# - At boot, `MountRegistry` stays empty even if mount rows exist
# in the DB — the runtime resolver has nothing to route to.
# Users navigating into a mount-root folder see an empty native
# folder (row exists, no children).
#
# When `true`:
# - Admin panel exposes the CRUD; existing DB rows load at boot
# via `MountRegistry::reload`; users can browse mount contents.
#
# Opt-in per deployment because external mounts expose host
# filesystems (or credentialed remote backends) inside user drives —
# an admin misconfiguration can leak state that isn't part of
# OxiCloud's normal storage substrate. Keep off unless you have a
# concrete need.
#
# Default: false.
#OXICLOUD_ENABLE_EXTERNAL_MOUNTS=false
# ── People (face recognition) ────────────────────────────────────────────
# Biometric data (GDPR Art. 9) — OFF by default, opt-in per deployment.
# Detects faces and clusters them into people in the photo library.
@@ -1100,20 +1128,6 @@ OXICLOUD_WOPI_ENABLED=false
# collaborative editor. See docs/plan/message-bus.md for the JSON-RPC 2.0
# wire protocol.
# Server-initiated protocol Ping interval (seconds). Prevents intermediate
# proxies (Traefik, nginx, Cloudflare) and NAT boxes from reaping the TCP
# session as idle. Read at each WS connect — a change takes effect on new
# connections without restart. Set 0 (or any non-positive value) to fall
# back to the default.
#
# Tuning: the interval should sit at most half the smallest hop's idle
# timeout, so a single missed Ping doesn't kill the connection. Common
# floors:
# * nginx `proxy_read_timeout` default 60s → ping ≤ 30s
# * Cloudflare hard limit 100s → ping ≤ 45s
# * Traefik with idleTimeout bumped to 3600s → 30s is safely under
#OXICLOUD_MESSAGEBUS_KEEPALIVE_SECONDS=30
# Message bus master switch. When `false`, /api/rt/ws and
# POST /api/rt/ticket are NOT registered at boot — Axum returns 404
# for both, keeping monitoring dashboards free of 5xx noise. Clients
@@ -1135,6 +1149,20 @@ OXICLOUD_WOPI_ENABLED=false
# Default: true.
#OXICLOUD_MESSAGEBUS_ENABLE=true
# Server-initiated protocol Ping interval (seconds). Prevents intermediate
# proxies (Traefik, nginx, Cloudflare) and NAT boxes from reaping the TCP
# session as idle. Read at each WS connect — a change takes effect on new
# connections without restart. Set 0 (or any non-positive value) to fall
# back to the default.
#
# Tuning: the interval should sit at most half the smallest hop's idle
# timeout, so a single missed Ping doesn't kill the connection. Common
# floors:
# * nginx `proxy_read_timeout` default 60s → ping ≤ 30s
# * Cloudflare hard limit 100s → ping ≤ 45s
# * Traefik with idleTimeout bumped to 3600s → 30s is safely under
#OXICLOUD_MESSAGEBUS_KEEPALIVE_SECONDS=30
# -----------------------------------------------------------------------------
# MEMORY ALLOCATOR TUNING (IMPORTANT FOR RAM USAGE)
# -----------------------------------------------------------------------------