From e28bd34d38758825cf6e22ce3fc802421b921e08 Mon Sep 17 00:00:00 2001 From: jkaczman Date: Thu, 18 Jun 2026 07:25:24 -0400 Subject: [PATCH] fix(server): correctly honor ROCKET_LOG_LEVEL; adds deploy setting to adjust --- .../assets/server/provision_server.sh | 2 +- .../src/provision_server/provision.rs | 10 +++++ .../src-tauri/src/provision_server/types.rs | 1 + deploy/src/lib/api.ts | 1 + deploy/src/routes/server-ssh/+page.svelte | 6 +++ deploy/src/routes/settings/+page.svelte | 43 +++++++++++++++++++ server/src/main.rs | 7 +++ 7 files changed, 69 insertions(+), 1 deletion(-) diff --git a/deploy/src-tauri/assets/server/provision_server.sh b/deploy/src-tauri/assets/server/provision_server.sh index f6faec9..c9b3548 100644 --- a/deploy/src-tauri/assets/server/provision_server.sh +++ b/deploy/src-tauri/assets/server/provision_server.sh @@ -135,7 +135,7 @@ WorkingDirectory=$STATE_DIR ExecStart=$INSTALL_BIN_DIR/secluso-server --bind-address=${BIND_ADDRESS:-127.0.0.1} --port=${LISTEN_PORT:-8000} Restart=always RestartSec=1 -Environment=RUST_LOG=info +Environment=ROCKET_LOG_LEVEL=${ROCKET_LOG_LEVEL:-normal} Environment=SECLUSO_USER_CREDENTIALS_DIR=$STATE_DIR/user_credentials Environment=UPDATE_HINT_PATH=$STATE_DIR/update_hint NoNewPrivileges=true diff --git a/deploy/src-tauri/src/provision_server/provision.rs b/deploy/src-tauri/src/provision_server/provision.rs index 8cf0215..981657e 100644 --- a/deploy/src-tauri/src/provision_server/provision.rs +++ b/deploy/src-tauri/src/provision_server/provision.rs @@ -405,6 +405,16 @@ pub fn run_provision( { envs.push(("GITHUB_TOKEN", token)); } + // Whitelist the Rocket log level + // Only allowlisted 3 values to prevent injection + if let Some(level) = plan + .server_log_level + .as_ref() + .map(|v| v.trim().to_ascii_lowercase()) + .filter(|v| matches!(v.as_str(), "off" | "critical" | "debug")) + { + envs.push(("ROCKET_LOG_LEVEL", level)); + } exec_remote_script_streaming( app, run_id, diff --git a/deploy/src-tauri/src/provision_server/types.rs b/deploy/src-tauri/src/provision_server/types.rs index 80b0726..6560aa0 100644 --- a/deploy/src-tauri/src/provision_server/types.rs +++ b/deploy/src-tauri/src/provision_server/types.rs @@ -88,4 +88,5 @@ pub struct ServerPlan { pub binaries_repo: Option, pub github_token: Option, pub manifest_version_override: Option, + pub server_log_level: Option, } diff --git a/deploy/src/lib/api.ts b/deploy/src/lib/api.ts index 5dddbc8..7aebdc4 100644 --- a/deploy/src/lib/api.ts +++ b/deploy/src/lib/api.ts @@ -47,6 +47,7 @@ export interface ServerPlan { binariesRepo?: string; githubToken?: string; manifestVersionOverride?: string; + serverLogLevel?: "normal" | "debug" | "critical" | "off"; } export interface JobStart { diff --git a/deploy/src/routes/server-ssh/+page.svelte b/deploy/src/routes/server-ssh/+page.svelte index fd24c9a..9d48159 100644 --- a/deploy/src/routes/server-ssh/+page.svelte +++ b/deploy/src/routes/server-ssh/+page.svelte @@ -60,6 +60,7 @@ key2User: string; githubToken: string; manifestVersionOverride: string; + serverLogLevel: "normal" | "debug" | "critical" | "off"; maskUserPathsWithDemo: boolean; }; @@ -76,6 +77,7 @@ key2User: "", githubToken: "", manifestVersionOverride: "", + serverLogLevel: "normal", maskUserPathsWithDemo: false }; let devSettings: DevSettings | null = null; @@ -628,6 +630,10 @@ devSettings?.enabled && devSettings?.manifestVersionOverride.trim() ? devSettings.manifestVersionOverride.trim() : undefined, + serverLogLevel: + devSettings?.enabled && devSettings?.serverLogLevel && devSettings.serverLogLevel !== "normal" + ? devSettings.serverLogLevel + : undefined, overwrite: overwriteInstall }; diff --git a/deploy/src/routes/settings/+page.svelte b/deploy/src/routes/settings/+page.svelte index a1e1759..eb77a04 100644 --- a/deploy/src/routes/settings/+page.svelte +++ b/deploy/src/routes/settings/+page.svelte @@ -17,9 +17,12 @@ key2User: string; githubToken: string; manifestVersionOverride: string; + serverLogLevel: ServerLogLevel; maskUserPathsWithDemo: boolean; }; + type ServerLogLevel = "normal" | "debug" | "critical" | "off"; + const STORAGE_KEY = "secluso-dev-settings"; const backIcon = "/deploy-assets/settings-back-latest.svg"; const gearGhost = "/deploy-assets/settings-gear-ghost-latest.svg"; @@ -38,6 +41,7 @@ key2User: "", githubToken: "", manifestVersionOverride: "", + serverLogLevel: "normal", maskUserPathsWithDemo: false }; @@ -299,6 +303,26 @@

Overrides the version sent in the post-install server health check.

+ +
+
+

Server Log Level

+ OPTIONAL +
+ + +

+ Sets ROCKET_LOG_LEVEL in the provisioned server's systemd unit. +

+
{/if} @@ -594,6 +618,25 @@ color: rgba(250, 250, 250, 0.5); } + .select-input { + width: 100%; + height: 32px; + border: 0; + outline: 0; + padding: 0; + background: transparent; + color: #fafafa; + font-size: 16px; + line-height: 24px; + font-family: inherit; + cursor: pointer; + } + + .select-input option { + background: #0b0b0b; + color: #fafafa; + } + .binaries-card { padding-bottom: 18px; } diff --git a/server/src/main.rs b/server/src/main.rs index eaa8728..292df98 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -1261,10 +1261,17 @@ pub fn build_rocket() -> rocket::Rocket { } }); + // Reflect log levels explicitly as we override the config so operators can raise + let log_level = std::env::var("ROCKET_LOG_LEVEL") + .ok() + .and_then(|v| v.parse::().ok()) + .unwrap_or(rocket::Config::default().log_level); + let config = rocket::Config { port: listen_port.unwrap_or(8000), address: address.parse().unwrap(), limits: Limits::default().limit("json", MAX_JSON_SIZE.kibibytes()), + log_level, ..rocket::Config::default() };