mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-19 11:06:17 +00:00
build(deps): bump the dependencies group with 16 updates (#1820)
This commit is contained in:
Generated
+207
-210
File diff suppressed because it is too large
Load Diff
+16
-16
@@ -127,9 +127,9 @@ tokio-rustls = { version = "0.26.4", default-features = false, features = ["logg
|
|||||||
tokio-stream = { version = "0.1.18" }
|
tokio-stream = { version = "0.1.18" }
|
||||||
tokio-test = "0.4.5"
|
tokio-test = "0.4.5"
|
||||||
tokio-util = { version = "0.7.18", features = ["io", "compat"] }
|
tokio-util = { version = "0.7.18", features = ["io", "compat"] }
|
||||||
tonic = { version = "0.14.3", features = ["gzip"] }
|
tonic = { version = "0.14.4", features = ["gzip"] }
|
||||||
tonic-prost = { version = "0.14.3" }
|
tonic-prost = { version = "0.14.4" }
|
||||||
tonic-prost-build = { version = "0.14.3" }
|
tonic-prost-build = { version = "0.14.4" }
|
||||||
tower = { version = "0.5.3", features = ["timeout"] }
|
tower = { version = "0.5.3", features = ["timeout"] }
|
||||||
tower-http = { version = "0.6.8", features = ["cors"] }
|
tower-http = { version = "0.6.8", features = ["cors"] }
|
||||||
|
|
||||||
@@ -170,25 +170,25 @@ zeroize = { version = "1.8.2", features = ["derive"] }
|
|||||||
# Time and Date
|
# Time and Date
|
||||||
chrono = { version = "0.4.43", features = ["serde"] }
|
chrono = { version = "0.4.43", features = ["serde"] }
|
||||||
humantime = "2.3.0"
|
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"] }
|
time = { version = "0.3.47", features = ["std", "parsing", "formatting", "macros", "serde"] }
|
||||||
|
|
||||||
# Utilities and Tools
|
# Utilities and Tools
|
||||||
anyhow = "1.0.101"
|
anyhow = "1.0.101"
|
||||||
arc-swap = "1.8.1"
|
arc-swap = "1.8.2"
|
||||||
astral-tokio-tar = "0.5.6"
|
astral-tokio-tar = "0.5.6"
|
||||||
atoi = "2.0.0"
|
atoi = "2.0.0"
|
||||||
atomic_enum = "0.3.0"
|
atomic_enum = "0.3.0"
|
||||||
aws-config = { version = "1.8.13" }
|
aws-config = { version = "1.8.14" }
|
||||||
aws-credential-types = { version = "1.2.11" }
|
aws-credential-types = { version = "1.2.12" }
|
||||||
aws-sdk-s3 = { version = "1.122.0", default-features = false, features = ["sigv4a", "default-https-client", "rt-tokio"] }
|
aws-sdk-s3 = { version = "1.123.0", default-features = false, features = ["sigv4a", "default-https-client", "rt-tokio"] }
|
||||||
aws-smithy-types = { version = "1.4.4" }
|
aws-smithy-types = { version = "1.4.4" }
|
||||||
backtrace = "0.3.76"
|
backtrace = "0.3.76"
|
||||||
base64 = "0.22.1"
|
base64 = "0.22.1"
|
||||||
base64-simd = "0.8.0"
|
base64-simd = "0.8.0"
|
||||||
brotli = "8.0.2"
|
brotli = "8.0.2"
|
||||||
cfg-if = "1.0.4"
|
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"] }
|
const-str = { version = "1.1.0", features = ["std", "proc"] }
|
||||||
convert_case = "0.11.0"
|
convert_case = "0.11.0"
|
||||||
criterion = { version = "0.8", features = ["html_reports"] }
|
criterion = { version = "0.8", features = ["html_reports"] }
|
||||||
@@ -200,14 +200,14 @@ faster-hex = "0.10.0"
|
|||||||
flate2 = "1.1.9"
|
flate2 = "1.1.9"
|
||||||
flexi_logger = { version = "0.31.8", features = ["trc", "dont_minimize_extra_stacks", "compress", "kv", "json"] }
|
flexi_logger = { version = "0.31.8", features = ["trc", "dont_minimize_extra_stacks", "compress", "kv", "json"] }
|
||||||
glob = "0.3.3"
|
glob = "0.3.3"
|
||||||
google-cloud-storage = "1.7.0"
|
google-cloud-storage = "1.8.0"
|
||||||
google-cloud-auth = "1.5.0"
|
google-cloud-auth = "1.6.0"
|
||||||
hashbrown = { version = "0.16.1", features = ["serde", "rayon"] }
|
hashbrown = { version = "0.16.1", features = ["serde", "rayon"] }
|
||||||
hex-simd = "0.8.0"
|
hex-simd = "0.8.0"
|
||||||
highway = { version = "1.3.0" }
|
highway = { version = "1.3.0" }
|
||||||
ipnetwork = { version = "0.21.1", features = ["serde"] }
|
ipnetwork = { version = "0.21.1", features = ["serde"] }
|
||||||
lazy_static = "1.5.0"
|
lazy_static = "1.5.0"
|
||||||
libc = "0.2.181"
|
libc = "0.2.182"
|
||||||
libsystemd = "0.7.2"
|
libsystemd = "0.7.2"
|
||||||
local-ip-address = "0.6.10"
|
local-ip-address = "0.6.10"
|
||||||
lz4 = "1.28.1"
|
lz4 = "1.28.1"
|
||||||
@@ -219,7 +219,7 @@ moka = { version = "0.12.13", features = ["future"] }
|
|||||||
netif = "0.1.6"
|
netif = "0.1.6"
|
||||||
nu-ansi-term = "0.50.3"
|
nu-ansi-term = "0.50.3"
|
||||||
num_cpus = { version = "1.17.0" }
|
num_cpus = { version = "1.17.0" }
|
||||||
nvml-wrapper = "0.11.0"
|
nvml-wrapper = "0.12.0"
|
||||||
object_store = "0.12.5"
|
object_store = "0.12.5"
|
||||||
parking_lot = "0.12.5"
|
parking_lot = "0.12.5"
|
||||||
path-absolutize = "3.1.1"
|
path-absolutize = "3.1.1"
|
||||||
@@ -234,7 +234,7 @@ rumqttc = { version = "0.25.1" }
|
|||||||
rustix = { version = "1.1.3", features = ["fs"] }
|
rustix = { version = "1.1.3", features = ["fs"] }
|
||||||
rust-embed = { version = "8.11.0" }
|
rust-embed = { version = "8.11.0" }
|
||||||
rustc-hash = { version = "2.1.1" }
|
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"
|
serial_test = "3.3.1"
|
||||||
shadow-rs = { version = "1.7.0", default-features = false }
|
shadow-rs = { version = "1.7.0", default-features = false }
|
||||||
siphasher = "1.0.2"
|
siphasher = "1.0.2"
|
||||||
@@ -257,7 +257,7 @@ tracing-subscriber = { version = "0.3.22", features = ["env-filter", "time"] }
|
|||||||
transform-stream = "0.3.1"
|
transform-stream = "0.3.1"
|
||||||
url = "2.5.8"
|
url = "2.5.8"
|
||||||
urlencoding = "2.1.3"
|
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" }
|
vaultrs = { version = "0.7.4" }
|
||||||
walkdir = "2.5.0"
|
walkdir = "2.5.0"
|
||||||
wildmatch = { version = "2.6.1", features = ["serde"] }
|
wildmatch = { version = "2.6.1", features = ["serde"] }
|
||||||
@@ -277,7 +277,7 @@ opentelemetry-stdout = { version = "0.31.0" }
|
|||||||
|
|
||||||
# FTP and SFTP
|
# FTP and SFTP
|
||||||
libunftp = { version = "0.22.0", features = ["experimental"] }
|
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"
|
rcgen = "0.14.7"
|
||||||
|
|
||||||
# Performance Analysis and Memory Profiling
|
# Performance Analysis and Memory Profiling
|
||||||
|
|||||||
@@ -98,6 +98,30 @@ pub const RUSTFS_HTTP_PREFIX: &str = "http://";
|
|||||||
/// Default value: https://
|
/// Default value: https://
|
||||||
pub const RUSTFS_HTTPS_PREFIX: &str = "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
|
/// Environment variable for rustfs address
|
||||||
/// This is the environment variable for rustfs address.
|
/// This is the environment variable for rustfs address.
|
||||||
/// It is used to bind the server to a specific 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
|
/// Default address for rustfs console
|
||||||
/// This is the 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);
|
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
|
/// Default log filename for rustfs
|
||||||
/// This is the default log filename for rustfs.
|
/// This is the default log filename for rustfs.
|
||||||
/// It is used to store the logs of the application.
|
/// It is used to store the logs of the application.
|
||||||
/// Default value: rustfs.log
|
/// Default value: rustfs.log
|
||||||
/// Environment variable: RUSTFS_OBSERVABILITY_LOG_FILENAME
|
/// Environment variable: RUSTFS_OBS_LOG_FILENAME
|
||||||
pub const DEFAULT_LOG_FILENAME: &str = "rustfs";
|
pub const DEFAULT_LOG_FILENAME: &str = "rustfs";
|
||||||
|
|
||||||
/// Default OBS log filename for 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.
|
/// This is the default log local logging enabled for rustfs.
|
||||||
/// It is used to enable or disable local logging of the application.
|
/// It is used to enable or disable local logging of the application.
|
||||||
/// Default value: false
|
/// 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;
|
pub const DEFAULT_OBS_LOG_STDOUT_ENABLED: bool = false;
|
||||||
|
|
||||||
/// Constant representing 1 Kibibyte (1024 bytes)
|
/// Constant representing 1 Kibibyte (1024 bytes)
|
||||||
|
|||||||
@@ -23,20 +23,16 @@ use axum::{
|
|||||||
response::{IntoResponse, Response},
|
response::{IntoResponse, Response},
|
||||||
routing::get,
|
routing::get,
|
||||||
};
|
};
|
||||||
use axum_server::tls_rustls::RustlsConfig;
|
|
||||||
use http::{HeaderMap, HeaderName, HeaderValue, Method, StatusCode, Uri};
|
use http::{HeaderMap, HeaderName, HeaderValue, Method, StatusCode, Uri};
|
||||||
use mime_guess::from_path;
|
use mime_guess::from_path;
|
||||||
use rust_embed::RustEmbed;
|
use rust_embed::RustEmbed;
|
||||||
use rustfs_config::{RUSTFS_TLS_CERT, RUSTFS_TLS_KEY};
|
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
use std::{
|
use std::{
|
||||||
io::Result,
|
|
||||||
net::{IpAddr, SocketAddr},
|
net::{IpAddr, SocketAddr},
|
||||||
sync::{Arc, OnceLock},
|
sync::OnceLock,
|
||||||
time::Duration,
|
time::Duration,
|
||||||
};
|
};
|
||||||
use tokio_rustls::rustls::ServerConfig;
|
|
||||||
use tower_http::catch_panic::CatchPanicLayer;
|
use tower_http::catch_panic::CatchPanicLayer;
|
||||||
use tower_http::compression::CompressionLayer;
|
use tower_http::compression::CompressionLayer;
|
||||||
use tower_http::cors::{AllowOrigin, Any, CorsLayer};
|
use tower_http::cors::{AllowOrigin, Any, CorsLayer};
|
||||||
@@ -101,24 +97,25 @@ pub(crate) struct Config {
|
|||||||
|
|
||||||
impl Config {
|
impl Config {
|
||||||
fn new(local_ip: IpAddr, port: u16, version: &str, date: &str) -> Self {
|
fn new(local_ip: IpAddr, port: u16, version: &str, date: &str) -> Self {
|
||||||
|
let http_prefix = rustfs_config::RUSTFS_HTTP_PREFIX;
|
||||||
Config {
|
Config {
|
||||||
port,
|
port,
|
||||||
api: Api {
|
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 {
|
s3: S3 {
|
||||||
endpoint: format!("http://{local_ip}:{port}"),
|
endpoint: format!("{http_prefix}{local_ip}:{port}"),
|
||||||
region: "cn-east-1".to_owned(),
|
region: rustfs_config::RUSTFS_REGION.to_string(),
|
||||||
},
|
},
|
||||||
release: Release {
|
release: Release {
|
||||||
version: version.to_string(),
|
version: version.to_string(),
|
||||||
date: date.to_string(),
|
date: date.to_string(),
|
||||||
},
|
},
|
||||||
license: License {
|
license: License {
|
||||||
name: "Apache-2.0".to_string(),
|
name: rustfs_config::RUSTFS_LICENSE.to_string(),
|
||||||
url: "https://www.apache.org/licenses/LICENSE-2.0".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
|
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
|
/// Get console configuration from environment variables
|
||||||
/// Returns a tuple containing console configuration values from environment variables.
|
/// Returns a tuple containing console configuration values from environment variables.
|
||||||
///
|
///
|
||||||
|
|||||||
Reference in New Issue
Block a user