style: collapse nested if-let in JWT secret config (clippy)

This commit is contained in:
Jared Wolff
2026-03-05 16:32:42 -05:00
parent a404342559
commit 4f7e79f605
2 changed files with 26 additions and 31 deletions
+6 -9
View File
@@ -604,8 +604,10 @@ impl AppConfig {
} }
// Auth configuration // Auth configuration
if let Ok(jwt_secret) = env::var("OXICLOUD_JWT_SECRET") { if let Some(jwt_secret) = env::var("OXICLOUD_JWT_SECRET")
if !jwt_secret.is_empty() { .ok()
.filter(|s| !s.is_empty())
{
// SECURITY: Validate JWT secret minimum entropy (RFC 7518 §3.2 // SECURITY: Validate JWT secret minimum entropy (RFC 7518 §3.2
// recommends ≥256 bits for HS256). Panic on dangerously short // recommends ≥256 bits for HS256). Panic on dangerously short
// secrets, warn on sub-optimal ones. // secrets, warn on sub-optimal ones.
@@ -628,7 +630,6 @@ impl AppConfig {
} }
config.auth.jwt_secret = jwt_secret; config.auth.jwt_secret = jwt_secret;
} }
}
// SECURITY: Auto-persist JWT secret to storage so it survives restarts. // SECURITY: Auto-persist JWT secret to storage so it survives restarts.
// Priority: env var > persisted file > generate new. // Priority: env var > persisted file > generate new.
@@ -642,10 +643,7 @@ impl AppConfig {
let persisted = persisted.trim().to_string(); let persisted = persisted.trim().to_string();
if persisted.len() >= 32 { if persisted.len() >= 32 {
config.auth.jwt_secret = persisted; config.auth.jwt_secret = persisted;
tracing::info!( tracing::info!("JWT secret loaded from {}", secret_file.display());
"JWT secret loaded from {}",
secret_file.display()
);
} else { } else {
tracing::warn!( tracing::warn!(
"Persisted JWT secret too short ({}B), regenerating", "Persisted JWT secret too short ({}B), regenerating",
@@ -664,8 +662,7 @@ impl AppConfig {
use rand_core::{OsRng, RngCore}; use rand_core::{OsRng, RngCore};
let mut key = [0u8; 32]; let mut key = [0u8; 32];
OsRng.fill_bytes(&mut key); OsRng.fill_bytes(&mut key);
let generated_secret: String = let generated_secret: String = key.iter().map(|b| format!("{:02x}", b)).collect();
key.iter().map(|b| format!("{:02x}", b)).collect();
// Persist to storage volume so it survives container restarts // Persist to storage volume so it survives container restarts
if let Err(e) = std::fs::write(&secret_file, &generated_secret) { if let Err(e) = std::fs::write(&secret_file, &generated_secret) {
-2
View File
@@ -612,7 +612,6 @@ impl AppServiceFactory {
path_resolver: None, path_resolver: None,
webdav_lock_store: webdav_lock_store:
crate::infrastructure::services::webdav_lock_service::create_webdav_lock_store(), crate::infrastructure::services::webdav_lock_service::create_webdav_lock_store(),
}; };
// 9b. Wire admin settings service when auth is available // 9b. Wire admin settings service when auth is available
@@ -893,7 +892,6 @@ pub struct AppState {
Option<Arc<crate::infrastructure::services::path_resolver_service::PathResolverService>>, Option<Arc<crate::infrastructure::services::path_resolver_service::PathResolverService>>,
pub webdav_lock_store: pub webdav_lock_store:
Arc<crate::infrastructure::services::webdav_lock_service::WebDavLockStore>, Arc<crate::infrastructure::services::webdav_lock_service::WebDavLockStore>,
} }
// All AppState construction is done via struct literal in build_app_state(). // All AppState construction is done via struct literal in build_app_state().