build(deps): bump the dependencies group with 16 updates (#1820)

This commit is contained in:
houseme
2026-02-14 23:43:09 +08:00
committed by GitHub
parent 9fe3d5621e
commit 8512a38f68
4 changed files with 265 additions and 311 deletions

417
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -127,9 +127,9 @@ tokio-rustls = { version = "0.26.4", default-features = false, features = ["logg
tokio-stream = { version = "0.1.18" }
tokio-test = "0.4.5"
tokio-util = { version = "0.7.18", features = ["io", "compat"] }
tonic = { version = "0.14.3", features = ["gzip"] }
tonic-prost = { version = "0.14.3" }
tonic-prost-build = { version = "0.14.3" }
tonic = { version = "0.14.4", features = ["gzip"] }
tonic-prost = { version = "0.14.4" }
tonic-prost-build = { version = "0.14.4" }
tower = { version = "0.5.3", features = ["timeout"] }
tower-http = { version = "0.6.8", features = ["cors"] }
@@ -170,25 +170,25 @@ zeroize = { version = "1.8.2", features = ["derive"] }
# Time and Date
chrono = { version = "0.4.43", features = ["serde"] }
humantime = "2.3.0"
jiff = { version = "0.2.19", features = ["serde"] }
jiff = { version = "0.2.20", features = ["serde"] }
time = { version = "0.3.47", features = ["std", "parsing", "formatting", "macros", "serde"] }
# Utilities and Tools
anyhow = "1.0.101"
arc-swap = "1.8.1"
arc-swap = "1.8.2"
astral-tokio-tar = "0.5.6"
atoi = "2.0.0"
atomic_enum = "0.3.0"
aws-config = { version = "1.8.13" }
aws-credential-types = { version = "1.2.11" }
aws-sdk-s3 = { version = "1.122.0", default-features = false, features = ["sigv4a", "default-https-client", "rt-tokio"] }
aws-config = { version = "1.8.14" }
aws-credential-types = { version = "1.2.12" }
aws-sdk-s3 = { version = "1.123.0", default-features = false, features = ["sigv4a", "default-https-client", "rt-tokio"] }
aws-smithy-types = { version = "1.4.4" }
backtrace = "0.3.76"
base64 = "0.22.1"
base64-simd = "0.8.0"
brotli = "8.0.2"
cfg-if = "1.0.4"
clap = { version = "4.5.57", features = ["derive", "env"] }
clap = { version = "4.5.58", features = ["derive", "env"] }
const-str = { version = "1.1.0", features = ["std", "proc"] }
convert_case = "0.11.0"
criterion = { version = "0.8", features = ["html_reports"] }
@@ -200,14 +200,14 @@ faster-hex = "0.10.0"
flate2 = "1.1.9"
flexi_logger = { version = "0.31.8", features = ["trc", "dont_minimize_extra_stacks", "compress", "kv", "json"] }
glob = "0.3.3"
google-cloud-storage = "1.7.0"
google-cloud-auth = "1.5.0"
google-cloud-storage = "1.8.0"
google-cloud-auth = "1.6.0"
hashbrown = { version = "0.16.1", features = ["serde", "rayon"] }
hex-simd = "0.8.0"
highway = { version = "1.3.0" }
ipnetwork = { version = "0.21.1", features = ["serde"] }
lazy_static = "1.5.0"
libc = "0.2.181"
libc = "0.2.182"
libsystemd = "0.7.2"
local-ip-address = "0.6.10"
lz4 = "1.28.1"
@@ -219,7 +219,7 @@ moka = { version = "0.12.13", features = ["future"] }
netif = "0.1.6"
nu-ansi-term = "0.50.3"
num_cpus = { version = "1.17.0" }
nvml-wrapper = "0.11.0"
nvml-wrapper = "0.12.0"
object_store = "0.12.5"
parking_lot = "0.12.5"
path-absolutize = "3.1.1"
@@ -234,7 +234,7 @@ rumqttc = { version = "0.25.1" }
rustix = { version = "1.1.3", features = ["fs"] }
rust-embed = { version = "8.11.0" }
rustc-hash = { version = "2.1.1" }
s3s = { version = "0.13.0-alpha.3", features = ["minio"], git = "https://github.com/s3s-project/s3s.git", rev = "7b8e22b49bc76839e6085a4ddfa553323f1b8049" }
s3s = { version = "0.13.0-alpha.3", features = ["minio"], git = "https://github.com/s3s-project/s3s.git", rev = "4e245f04eb1436358f1006a8fb392404a8a414a0" }
serial_test = "3.3.1"
shadow-rs = { version = "1.7.0", default-features = false }
siphasher = "1.0.2"
@@ -257,7 +257,7 @@ tracing-subscriber = { version = "0.3.22", features = ["env-filter", "time"] }
transform-stream = "0.3.1"
url = "2.5.8"
urlencoding = "2.1.3"
uuid = { version = "1.20.0", features = ["v4", "fast-rng", "macro-diagnostics"] }
uuid = { version = "1.21.0", features = ["v4", "fast-rng", "macro-diagnostics"] }
vaultrs = { version = "0.7.4" }
walkdir = "2.5.0"
wildmatch = { version = "2.6.1", features = ["serde"] }
@@ -277,7 +277,7 @@ opentelemetry-stdout = { version = "0.31.0" }
# FTP and SFTP
libunftp = { version = "0.22.0", features = ["experimental"] }
suppaftp = { version = "8.0.1", features = ["tokio", "tokio-rustls-aws-lc-rs"] }
suppaftp = { version = "8.0.2", features = ["tokio", "tokio-rustls-aws-lc-rs"] }
rcgen = "0.14.7"
# Performance Analysis and Memory Profiling

View File

@@ -98,6 +98,30 @@ pub const RUSTFS_HTTP_PREFIX: &str = "http://";
/// Default value: https://
pub const RUSTFS_HTTPS_PREFIX: &str = "https://";
/// Default documentation URL for rustfs
/// This is the default documentation URL for rustfs.
/// It is used to provide the documentation of the application.
/// Default value: https://docs.rustfs.com
pub const RUSTFS_DOCS_URL: &str = "https://docs.rustfs.com";
/// Default GitHub URL for rustfs
/// This is the default GitHub URL for rustfs.
/// It is used to provide the source code of the application.
/// Default value: https://github.com/rustfs/rustfs
pub const RUSTFS_GITHUB_URL: &str = "https://github.com/rustfs/rustfs";
/// Default license for rustfs
/// This is the default license for rustfs.
/// It is used to provide the license of the application.
/// Default value: Apache-2.0
pub const RUSTFS_LICENSE: &str = "Apache-2.0";
/// Default license URL for rustfs
/// This is the default license URL for rustfs.
/// It is used to provide the license URL of the application.
/// Default value: https://www.apache.org/licenses/LICENSE-2.0
pub const RUSTFS_LICENSE_URL: &str = "https://www.apache.org/licenses/LICENSE-2.0";
/// Environment variable for rustfs address
/// This is the environment variable for rustfs address.
/// It is used to bind the server to a specific address.
@@ -119,13 +143,21 @@ pub const DEFAULT_CONSOLE_PORT: u16 = 9001;
/// Default address for rustfs console
/// This is the default address for rustfs console.
/// This is used to bind the console server to a specific address.
/// Default value: :9001
pub const DEFAULT_CONSOLE_ADDRESS: &str = concat!(":", DEFAULT_CONSOLE_PORT);
/// Default region for rustfs
/// This is the default region for rustfs.
/// It is used to identify the region of the application.
/// Default value: cn-east-1
pub const RUSTFS_REGION: &str = "cn-east-1";
/// Default log filename for rustfs
/// This is the default log filename for rustfs.
/// It is used to store the logs of the application.
/// Default value: rustfs.log
/// Environment variable: RUSTFS_OBSERVABILITY_LOG_FILENAME
/// Environment variable: RUSTFS_OBS_LOG_FILENAME
pub const DEFAULT_LOG_FILENAME: &str = "rustfs";
/// Default OBS log filename for rustfs
@@ -166,7 +198,7 @@ pub const DEFAULT_LOG_KEEP_FILES: usize = 30;
/// This is the default log local logging enabled for rustfs.
/// It is used to enable or disable local logging of the application.
/// Default value: false
/// Environment variable: RUSTFS_OBS_LOGL_STDOUT_ENABLED
/// Environment variable: RUSTFS_OBS_LOG_STDOUT_ENABLED
pub const DEFAULT_OBS_LOG_STDOUT_ENABLED: bool = false;
/// Constant representing 1 Kibibyte (1024 bytes)

View File

@@ -23,20 +23,16 @@ use axum::{
response::{IntoResponse, Response},
routing::get,
};
use axum_server::tls_rustls::RustlsConfig;
use http::{HeaderMap, HeaderName, HeaderValue, Method, StatusCode, Uri};
use mime_guess::from_path;
use rust_embed::RustEmbed;
use rustfs_config::{RUSTFS_TLS_CERT, RUSTFS_TLS_KEY};
use serde::Serialize;
use serde_json::json;
use std::{
io::Result,
net::{IpAddr, SocketAddr},
sync::{Arc, OnceLock},
sync::OnceLock,
time::Duration,
};
use tokio_rustls::rustls::ServerConfig;
use tower_http::catch_panic::CatchPanicLayer;
use tower_http::compression::CompressionLayer;
use tower_http::cors::{AllowOrigin, Any, CorsLayer};
@@ -101,24 +97,25 @@ pub(crate) struct Config {
impl Config {
fn new(local_ip: IpAddr, port: u16, version: &str, date: &str) -> Self {
let http_prefix = rustfs_config::RUSTFS_HTTP_PREFIX;
Config {
port,
api: Api {
base_url: format!("http://{local_ip}:{port}/{RUSTFS_ADMIN_PREFIX}"),
base_url: format!("{http_prefix}{local_ip}:{port}/{RUSTFS_ADMIN_PREFIX}"),
},
s3: S3 {
endpoint: format!("http://{local_ip}:{port}"),
region: "cn-east-1".to_owned(),
endpoint: format!("{http_prefix}{local_ip}:{port}"),
region: rustfs_config::RUSTFS_REGION.to_string(),
},
release: Release {
version: version.to_string(),
date: date.to_string(),
},
license: License {
name: "Apache-2.0".to_string(),
url: "https://www.apache.org/licenses/LICENSE-2.0".to_string(),
name: rustfs_config::RUSTFS_LICENSE.to_string(),
url: rustfs_config::RUSTFS_LICENSE_URL.to_string(),
},
doc: "https://rustfs.com/docs/".to_string(),
doc: rustfs_config::RUSTFS_DOCS_URL.to_string(),
}
}
@@ -349,78 +346,6 @@ async fn console_logging_middleware(req: Request, next: middleware::Next) -> Res
response
}
/// Setup TLS configuration for console using axum-server, following endpoint TLS implementation logic
#[instrument(skip(tls_path))]
async fn _setup_console_tls_config(tls_path: Option<&String>) -> Result<Option<RustlsConfig>> {
let tls_path = match tls_path {
Some(path) if !path.is_empty() => path,
_ => {
debug!("TLS path is not provided, console starting with HTTP");
return Ok(None);
}
};
if tokio::fs::metadata(tls_path).await.is_err() {
debug!("TLS path does not exist, console starting with HTTP");
return Ok(None);
}
debug!("Found TLS directory for console, checking for certificates");
// Make sure to use a modern encryption suite
let _ = rustls::crypto::aws_lc_rs::default_provider().install_default();
// 1. Attempt to load all certificates in the directory (multi-certificate support, for SNI)
if let Ok(cert_key_pairs) = rustfs_utils::load_all_certs_from_directory(tls_path)
&& !cert_key_pairs.is_empty()
{
debug!(
"Found {} certificates for console, creating SNI-aware multi-cert resolver",
cert_key_pairs.len()
);
// Create an SNI-enabled certificate resolver
let resolver = rustfs_utils::create_multi_cert_resolver(cert_key_pairs)?;
// Configure the server to enable SNI support
let mut server_config = ServerConfig::builder()
.with_no_client_auth()
.with_cert_resolver(Arc::new(resolver));
// Configure ALPN protocol priority
server_config.alpn_protocols = vec![b"h2".to_vec(), b"http/1.1".to_vec(), b"http/1.0".to_vec()];
// Log SNI requests
if rustfs_utils::tls_key_log() {
server_config.key_log = Arc::new(rustls::KeyLogFile::new());
}
info!(target: "rustfs::console::tls", "Console TLS enabled with multi-certificate SNI support");
return Ok(Some(RustlsConfig::from_config(Arc::new(server_config))));
}
// 2. Revert to the traditional single-certificate mode
let key_path = format!("{tls_path}/{RUSTFS_TLS_KEY}");
let cert_path = format!("{tls_path}/{RUSTFS_TLS_CERT}");
if tokio::try_join!(tokio::fs::metadata(&key_path), tokio::fs::metadata(&cert_path)).is_ok() {
debug!("Found legacy single TLS certificate for console, starting with HTTPS");
return match RustlsConfig::from_pem_file(cert_path, key_path).await {
Ok(config) => {
info!(target: "rustfs::console::tls", "Console TLS enabled with single certificate");
Ok(Some(config))
}
Err(e) => {
error!(target: "rustfs::console::error", error = %e, "Failed to create TLS config for console");
Err(std::io::Error::other(e))
}
};
}
debug!("No valid TLS certificates found in the directory for console, starting with HTTP");
Ok(None)
}
/// Get console configuration from environment variables
/// Returns a tuple containing console configuration values from environment variables.
///