style: apply cargo fmt to entire codebase
Standardize code formatting across all 173 Rust source files using rustfmt. No functional changes - purely cosmetic. This establishes a consistent code style baseline for the project going forward.
This commit is contained in:
+133
-105
@@ -1,6 +1,6 @@
|
||||
use std::time::Duration;
|
||||
use std::path::PathBuf;
|
||||
use std::env;
|
||||
use std::path::PathBuf;
|
||||
use std::time::Duration;
|
||||
|
||||
/// Cache configuration
|
||||
#[derive(Debug, Clone)]
|
||||
@@ -16,9 +16,9 @@ pub struct CacheConfig {
|
||||
impl Default for CacheConfig {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
file_ttl_ms: 60_000, // 1 minute
|
||||
file_ttl_ms: 60_000, // 1 minute
|
||||
directory_ttl_ms: 120_000, // 2 minutes
|
||||
max_entries: 10_000, // 10,000 entries
|
||||
max_entries: 10_000, // 10,000 entries
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -100,10 +100,10 @@ pub struct ResourceConfig {
|
||||
impl Default for ResourceConfig {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
large_file_threshold_mb: 100, // 100 MB
|
||||
large_dir_threshold_entries: 1000, // 1000 entries
|
||||
chunk_size_bytes: 1024 * 1024, // 1 MB
|
||||
max_in_memory_file_size_mb: 50, // 50 MB
|
||||
large_file_threshold_mb: 100, // 100 MB
|
||||
large_dir_threshold_entries: 1000, // 1000 entries
|
||||
chunk_size_bytes: 1024 * 1024, // 1 MB
|
||||
max_in_memory_file_size_mb: 50, // 50 MB
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -118,7 +118,7 @@ impl ResourceConfig {
|
||||
pub fn is_large_file(&self, size_bytes: u64) -> bool {
|
||||
self.bytes_to_mb(size_bytes) >= self.large_file_threshold_mb
|
||||
}
|
||||
|
||||
|
||||
/// Determines if a file is large enough for parallel processing
|
||||
pub fn needs_parallel_processing(&self, size_bytes: u64, config: &ConcurrencyConfig) -> bool {
|
||||
self.bytes_to_mb(size_bytes) >= config.min_size_for_parallel_chunks_mb
|
||||
@@ -133,27 +133,27 @@ impl ResourceConfig {
|
||||
pub fn is_large_directory(&self, entry_count: usize) -> bool {
|
||||
entry_count >= self.large_dir_threshold_entries
|
||||
}
|
||||
|
||||
|
||||
/// Calculates the number of chunks for parallel processing
|
||||
pub fn calculate_optimal_chunks(&self, size_bytes: u64, config: &ConcurrencyConfig) -> usize {
|
||||
// If the file is not large enough, return 1
|
||||
if !self.needs_parallel_processing(size_bytes, config) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
// Calculate the number of chunks based on size
|
||||
let chunk_count = (size_bytes as usize).div_ceil(config.parallel_chunk_size_bytes);
|
||||
|
||||
|
||||
// Limit to the maximum number of parallel chunks
|
||||
chunk_count.min(config.max_parallel_chunks)
|
||||
}
|
||||
|
||||
|
||||
/// Calculates the optimal size of each chunk for parallel processing
|
||||
pub fn calculate_chunk_size(&self, file_size: u64, chunk_count: usize) -> usize {
|
||||
if chunk_count <= 1 {
|
||||
return file_size as usize;
|
||||
}
|
||||
|
||||
|
||||
// Distribute the size evenly among the chunks
|
||||
(file_size as usize).div_ceil(chunk_count)
|
||||
}
|
||||
@@ -183,7 +183,7 @@ impl Default for ConcurrencyConfig {
|
||||
max_concurrent_dirs: 5,
|
||||
max_concurrent_io: 20,
|
||||
max_parallel_chunks: 8,
|
||||
min_size_for_parallel_chunks_mb: 200, // 200 MB
|
||||
min_size_for_parallel_chunks_mb: 200, // 200 MB
|
||||
parallel_chunk_size_bytes: 8 * 1024 * 1024, // 8 MB
|
||||
}
|
||||
}
|
||||
@@ -206,9 +206,9 @@ impl Default for StorageConfig {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
root_dir: "storage".to_string(),
|
||||
chunk_size: 1024 * 1024, // 1 MB
|
||||
chunk_size: 1024 * 1024, // 1 MB
|
||||
parallel_threshold: 100 * 1024 * 1024, // 100 MB
|
||||
trash_retention_days: 30, // 30 days
|
||||
trash_retention_days: 30, // 30 days
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -255,9 +255,9 @@ impl Default for AuthConfig {
|
||||
// to set OXICLOUD_JWT_SECRET in production. The from_env() method
|
||||
// will validate this and warn/panic if not configured.
|
||||
jwt_secret: String::new(),
|
||||
access_token_expiry_secs: 3600, // 1 hour
|
||||
access_token_expiry_secs: 3600, // 1 hour
|
||||
refresh_token_expiry_secs: 2592000, // 30 days
|
||||
hash_memory_cost: 65536, // 64MB
|
||||
hash_memory_cost: 65536, // 64MB
|
||||
hash_time_cost: 3,
|
||||
}
|
||||
}
|
||||
@@ -316,20 +316,36 @@ impl OidcConfig {
|
||||
if let Ok(v) = env::var("OXICLOUD_OIDC_ENABLED") {
|
||||
cfg.enabled = v.parse::<bool>().unwrap_or(false);
|
||||
}
|
||||
if let Ok(v) = env::var("OXICLOUD_OIDC_ISSUER_URL") { cfg.issuer_url = v; }
|
||||
if let Ok(v) = env::var("OXICLOUD_OIDC_CLIENT_ID") { cfg.client_id = v; }
|
||||
if let Ok(v) = env::var("OXICLOUD_OIDC_CLIENT_SECRET") { cfg.client_secret = v; }
|
||||
if let Ok(v) = env::var("OXICLOUD_OIDC_REDIRECT_URI") { cfg.redirect_uri = v; }
|
||||
if let Ok(v) = env::var("OXICLOUD_OIDC_SCOPES") { cfg.scopes = v; }
|
||||
if let Ok(v) = env::var("OXICLOUD_OIDC_FRONTEND_URL") { cfg.frontend_url = v; }
|
||||
if let Ok(v) = env::var("OXICLOUD_OIDC_ISSUER_URL") {
|
||||
cfg.issuer_url = v;
|
||||
}
|
||||
if let Ok(v) = env::var("OXICLOUD_OIDC_CLIENT_ID") {
|
||||
cfg.client_id = v;
|
||||
}
|
||||
if let Ok(v) = env::var("OXICLOUD_OIDC_CLIENT_SECRET") {
|
||||
cfg.client_secret = v;
|
||||
}
|
||||
if let Ok(v) = env::var("OXICLOUD_OIDC_REDIRECT_URI") {
|
||||
cfg.redirect_uri = v;
|
||||
}
|
||||
if let Ok(v) = env::var("OXICLOUD_OIDC_SCOPES") {
|
||||
cfg.scopes = v;
|
||||
}
|
||||
if let Ok(v) = env::var("OXICLOUD_OIDC_FRONTEND_URL") {
|
||||
cfg.frontend_url = v;
|
||||
}
|
||||
if let Ok(v) = env::var("OXICLOUD_OIDC_AUTO_PROVISION") {
|
||||
cfg.auto_provision = v.parse::<bool>().unwrap_or(true);
|
||||
}
|
||||
if let Ok(v) = env::var("OXICLOUD_OIDC_ADMIN_GROUPS") { cfg.admin_groups = v; }
|
||||
if let Ok(v) = env::var("OXICLOUD_OIDC_ADMIN_GROUPS") {
|
||||
cfg.admin_groups = v;
|
||||
}
|
||||
if let Ok(v) = env::var("OXICLOUD_OIDC_DISABLE_PASSWORD_LOGIN") {
|
||||
cfg.disable_password_login = v.parse::<bool>().unwrap_or(false);
|
||||
}
|
||||
if let Ok(v) = env::var("OXICLOUD_OIDC_PROVIDER_NAME") { cfg.provider_name = v; }
|
||||
if let Ok(v) = env::var("OXICLOUD_OIDC_PROVIDER_NAME") {
|
||||
cfg.provider_name = v;
|
||||
}
|
||||
cfg
|
||||
}
|
||||
}
|
||||
@@ -347,11 +363,11 @@ pub struct FeaturesConfig {
|
||||
impl Default for FeaturesConfig {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
enable_auth: true, // Enable authentication by default
|
||||
enable_auth: true, // Enable authentication by default
|
||||
enable_user_storage_quotas: false,
|
||||
enable_file_sharing: true, // Enable file sharing by default
|
||||
enable_trash: true, // Enable trash feature
|
||||
enable_search: true, // Enable search feature
|
||||
enable_file_sharing: true, // Enable file sharing by default
|
||||
enable_trash: true, // Enable trash feature
|
||||
enable_search: true, // Enable search feature
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -410,47 +426,50 @@ impl Default for AppConfig {
|
||||
impl AppConfig {
|
||||
pub fn from_env() -> Self {
|
||||
let mut config = Self::default();
|
||||
|
||||
|
||||
// Use environment variables to override default values
|
||||
if let Ok(storage_path) = env::var("OXICLOUD_STORAGE_PATH") {
|
||||
config.storage_path = PathBuf::from(storage_path);
|
||||
}
|
||||
|
||||
|
||||
if let Ok(static_path) = env::var("OXICLOUD_STATIC_PATH") {
|
||||
config.static_path = PathBuf::from(static_path);
|
||||
}
|
||||
|
||||
|
||||
if let Ok(server_port) = env::var("OXICLOUD_SERVER_PORT")
|
||||
&& let Ok(port) = server_port.parse::<u16>() {
|
||||
config.server_port = port;
|
||||
}
|
||||
|
||||
&& let Ok(port) = server_port.parse::<u16>()
|
||||
{
|
||||
config.server_port = port;
|
||||
}
|
||||
|
||||
if let Ok(server_host) = env::var("OXICLOUD_SERVER_HOST") {
|
||||
config.server_host = server_host;
|
||||
}
|
||||
|
||||
|
||||
// Database configuration
|
||||
if let Ok(connection_string) = env::var("OXICLOUD_DB_CONNECTION_STRING") {
|
||||
config.database.connection_string = connection_string;
|
||||
}
|
||||
|
||||
if let Ok(max_connections) = env::var("OXICLOUD_DB_MAX_CONNECTIONS")
|
||||
.map(|v| v.parse::<u32>())
|
||||
&& let Ok(val) = max_connections {
|
||||
config.database.max_connections = val;
|
||||
}
|
||||
|
||||
if let Ok(min_connections) = env::var("OXICLOUD_DB_MIN_CONNECTIONS")
|
||||
.map(|v| v.parse::<u32>())
|
||||
&& let Ok(val) = min_connections {
|
||||
config.database.min_connections = val;
|
||||
}
|
||||
|
||||
|
||||
if let Ok(max_connections) =
|
||||
env::var("OXICLOUD_DB_MAX_CONNECTIONS").map(|v| v.parse::<u32>())
|
||||
&& let Ok(val) = max_connections
|
||||
{
|
||||
config.database.max_connections = val;
|
||||
}
|
||||
|
||||
if let Ok(min_connections) =
|
||||
env::var("OXICLOUD_DB_MIN_CONNECTIONS").map(|v| v.parse::<u32>())
|
||||
&& let Ok(val) = min_connections
|
||||
{
|
||||
config.database.min_connections = val;
|
||||
}
|
||||
|
||||
// Auth configuration
|
||||
if let Ok(jwt_secret) = env::var("OXICLOUD_JWT_SECRET") {
|
||||
config.auth.jwt_secret = jwt_secret;
|
||||
}
|
||||
|
||||
|
||||
// SECURITY: Validate JWT secret when auth is enabled
|
||||
if config.features.enable_auth && config.auth.jwt_secret.is_empty() {
|
||||
// Generate a random secret for this session and warn loudly
|
||||
@@ -459,7 +478,7 @@ impl AppConfig {
|
||||
OsRng.fill_bytes(&mut key);
|
||||
let generated_secret: String = key.iter().map(|b| format!("{:02x}", b)).collect();
|
||||
config.auth.jwt_secret = generated_secret;
|
||||
|
||||
|
||||
tracing::warn!("==========================================================");
|
||||
tracing::warn!("OXICLOUD_JWT_SECRET is not set.");
|
||||
tracing::warn!("A random secret has been generated for this session.");
|
||||
@@ -467,50 +486,54 @@ impl AppConfig {
|
||||
tracing::warn!("Set OXICLOUD_JWT_SECRET env var for production use.");
|
||||
tracing::warn!("==========================================================");
|
||||
}
|
||||
|
||||
if let Ok(access_token_expiry) = env::var("OXICLOUD_ACCESS_TOKEN_EXPIRY_SECS")
|
||||
.map(|v| v.parse::<i64>())
|
||||
&& let Ok(val) = access_token_expiry {
|
||||
config.auth.access_token_expiry_secs = val;
|
||||
}
|
||||
|
||||
if let Ok(refresh_token_expiry) = env::var("OXICLOUD_REFRESH_TOKEN_EXPIRY_SECS")
|
||||
.map(|v| v.parse::<i64>())
|
||||
&& let Ok(val) = refresh_token_expiry {
|
||||
config.auth.refresh_token_expiry_secs = val;
|
||||
}
|
||||
|
||||
|
||||
if let Ok(access_token_expiry) =
|
||||
env::var("OXICLOUD_ACCESS_TOKEN_EXPIRY_SECS").map(|v| v.parse::<i64>())
|
||||
&& let Ok(val) = access_token_expiry
|
||||
{
|
||||
config.auth.access_token_expiry_secs = val;
|
||||
}
|
||||
|
||||
if let Ok(refresh_token_expiry) =
|
||||
env::var("OXICLOUD_REFRESH_TOKEN_EXPIRY_SECS").map(|v| v.parse::<i64>())
|
||||
&& let Ok(val) = refresh_token_expiry
|
||||
{
|
||||
config.auth.refresh_token_expiry_secs = val;
|
||||
}
|
||||
|
||||
// Feature flags
|
||||
if let Ok(enable_auth) = env::var("OXICLOUD_ENABLE_AUTH")
|
||||
.map(|v| v.parse::<bool>())
|
||||
&& let Ok(val) = enable_auth {
|
||||
config.features.enable_auth = val;
|
||||
}
|
||||
|
||||
if let Ok(enable_user_storage_quotas) = env::var("OXICLOUD_ENABLE_USER_STORAGE_QUOTAS")
|
||||
.map(|v| v.parse::<bool>())
|
||||
&& let Ok(val) = enable_user_storage_quotas {
|
||||
config.features.enable_user_storage_quotas = val;
|
||||
}
|
||||
|
||||
if let Ok(enable_file_sharing) = env::var("OXICLOUD_ENABLE_FILE_SHARING")
|
||||
.map(|v| v.parse::<bool>())
|
||||
&& let Ok(val) = enable_file_sharing {
|
||||
config.features.enable_file_sharing = val;
|
||||
}
|
||||
|
||||
if let Ok(enable_trash) = env::var("OXICLOUD_ENABLE_TRASH")
|
||||
.map(|v| v.parse::<bool>())
|
||||
&& let Ok(val) = enable_trash {
|
||||
config.features.enable_trash = val;
|
||||
}
|
||||
|
||||
if let Ok(enable_search) = env::var("OXICLOUD_ENABLE_SEARCH")
|
||||
.map(|v| v.parse::<bool>())
|
||||
&& let Ok(val) = enable_search {
|
||||
config.features.enable_search = val;
|
||||
}
|
||||
|
||||
if let Ok(enable_auth) = env::var("OXICLOUD_ENABLE_AUTH").map(|v| v.parse::<bool>())
|
||||
&& let Ok(val) = enable_auth
|
||||
{
|
||||
config.features.enable_auth = val;
|
||||
}
|
||||
|
||||
if let Ok(enable_user_storage_quotas) =
|
||||
env::var("OXICLOUD_ENABLE_USER_STORAGE_QUOTAS").map(|v| v.parse::<bool>())
|
||||
&& let Ok(val) = enable_user_storage_quotas
|
||||
{
|
||||
config.features.enable_user_storage_quotas = val;
|
||||
}
|
||||
|
||||
if let Ok(enable_file_sharing) =
|
||||
env::var("OXICLOUD_ENABLE_FILE_SHARING").map(|v| v.parse::<bool>())
|
||||
&& let Ok(val) = enable_file_sharing
|
||||
{
|
||||
config.features.enable_file_sharing = val;
|
||||
}
|
||||
|
||||
if let Ok(enable_trash) = env::var("OXICLOUD_ENABLE_TRASH").map(|v| v.parse::<bool>())
|
||||
&& let Ok(val) = enable_trash
|
||||
{
|
||||
config.features.enable_trash = val;
|
||||
}
|
||||
|
||||
if let Ok(enable_search) = env::var("OXICLOUD_ENABLE_SEARCH").map(|v| v.parse::<bool>())
|
||||
&& let Ok(val) = enable_search
|
||||
{
|
||||
config.features.enable_search = val;
|
||||
}
|
||||
|
||||
// OIDC configuration
|
||||
if let Ok(v) = env::var("OXICLOUD_OIDC_ENABLED") {
|
||||
config.oidc.enabled = v.parse::<bool>().unwrap_or(false);
|
||||
@@ -548,23 +571,28 @@ impl AppConfig {
|
||||
|
||||
// Validate OIDC config when enabled
|
||||
if config.oidc.enabled
|
||||
&& (config.oidc.issuer_url.is_empty() || config.oidc.client_id.is_empty() || config.oidc.client_secret.is_empty()) {
|
||||
tracing::error!("OIDC is enabled but OXICLOUD_OIDC_ISSUER_URL, OXICLOUD_OIDC_CLIENT_ID, or OXICLOUD_OIDC_CLIENT_SECRET are not set");
|
||||
config.oidc.enabled = false;
|
||||
}
|
||||
&& (config.oidc.issuer_url.is_empty()
|
||||
|| config.oidc.client_id.is_empty()
|
||||
|| config.oidc.client_secret.is_empty())
|
||||
{
|
||||
tracing::error!(
|
||||
"OIDC is enabled but OXICLOUD_OIDC_ISSUER_URL, OXICLOUD_OIDC_CLIENT_ID, or OXICLOUD_OIDC_CLIENT_SECRET are not set"
|
||||
);
|
||||
config.oidc.enabled = false;
|
||||
}
|
||||
|
||||
config
|
||||
}
|
||||
|
||||
|
||||
pub fn with_features(mut self, features: FeaturesConfig) -> Self {
|
||||
self.features = features;
|
||||
self
|
||||
}
|
||||
|
||||
|
||||
pub fn db_enabled(&self) -> bool {
|
||||
self.features.enable_auth
|
||||
}
|
||||
|
||||
|
||||
pub fn auth_enabled(&self) -> bool {
|
||||
self.features.enable_auth
|
||||
}
|
||||
@@ -595,4 +623,4 @@ impl AppConfig {
|
||||
/// Gets a default global configuration
|
||||
pub fn default_config() -> AppConfig {
|
||||
AppConfig::default()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user