From 7f89b2a0ea917b426cb93d7d553b8449f04a0e3e Mon Sep 17 00:00:00 2001 From: weisd Date: Tue, 25 Feb 2025 11:08:26 +0800 Subject: [PATCH] use rust_embed for console static files --- Cargo.lock | 105 +++++++++++++++++++++++++++++--------- ecstore/src/endpoints.rs | 2 +- ecstore/src/store_init.rs | 2 +- rustfs/Cargo.toml | 2 +- rustfs/src/console.rs | 41 ++++----------- 5 files changed, 94 insertions(+), 58 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 333887fd..10e56e8c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1829,13 +1829,34 @@ dependencies = [ "syn 2.0.98", ] +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys 0.4.1", +] + [[package]] name = "dirs" version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" dependencies = [ - "dirs-sys", + "dirs-sys 0.5.0", +] + +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users 0.4.6", + "windows-sys 0.48.0", ] [[package]] @@ -1846,7 +1867,7 @@ checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" dependencies = [ "libc", "option-ext", - "redox_users", + "redox_users 0.5.0", "windows-sys 0.59.0", ] @@ -3185,25 +3206,6 @@ dependencies = [ "icu_properties", ] -[[package]] -name = "include_dir" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "923d117408f1e49d914f1a379a309cffe4f18c05cf4e3d12e613a15fc81bd0dd" -dependencies = [ - "include_dir_macros", -] - -[[package]] -name = "include_dir_macros" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cab85a7ed0bd5f0e76d93846e0147172bed2e2d3f859bcc33a8d9699cad1a75" -dependencies = [ - "proc-macro2", - "quote", -] - [[package]] name = "indexmap" version = "1.9.3" @@ -5085,6 +5087,17 @@ dependencies = [ "bitflags 2.8.0", ] +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom 0.2.15", + "libredox", + "thiserror 1.0.69", +] + [[package]] name = "redox_users" version = "0.5.0" @@ -5287,6 +5300,41 @@ dependencies = [ "serde", ] +[[package]] +name = "rust-embed" +version = "8.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa66af4a4fdd5e7ebc276f115e895611a34739a9c1c01028383d612d550953c0" +dependencies = [ + "rust-embed-impl", + "rust-embed-utils", + "walkdir", +] + +[[package]] +name = "rust-embed-impl" +version = "8.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6125dbc8867951125eec87294137f4e9c2c96566e61bf72c45095a7c77761478" +dependencies = [ + "proc-macro2", + "quote", + "rust-embed-utils", + "shellexpand", + "syn 2.0.98", + "walkdir", +] + +[[package]] +name = "rust-embed-utils" +version = "8.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e5347777e9aacb56039b0e1f28785929a8a3b709e87482e7442c72e7c12529d" +dependencies = [ + "sha2 0.10.8", + "walkdir", +] + [[package]] name = "rustc-demangle" version = "0.1.24" @@ -5337,7 +5385,6 @@ dependencies = [ "hyper", "hyper-util", "iam", - "include_dir", "jsonwebtoken", "lazy_static", "lock", @@ -5354,6 +5401,7 @@ dependencies = [ "protobuf", "protos", "rmp-serde", + "rust-embed", "s3s", "serde", "serde_json", @@ -5382,7 +5430,7 @@ version = "0.0.1" dependencies = [ "chrono", "dioxus", - "dirs", + "dirs 6.0.0", "futures-util", "keyring", "reqwest", @@ -5837,6 +5885,15 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shellexpand" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da03fa3b94cc19e3ebfc88c4229c49d8f08cdbd1228870a45f0ffdf84988e14b" +dependencies = [ + "dirs 5.0.1", +] + [[package]] name = "shlex" version = "1.3.0" @@ -6747,7 +6804,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eadd75f5002e2513eaa19b2365f533090cc3e93abd38788452d9ea85cff7b48a" dependencies = [ "crossbeam-channel", - "dirs", + "dirs 6.0.0", "libappindicator", "muda 0.15.3", "objc2 0.6.0", diff --git a/ecstore/src/endpoints.rs b/ecstore/src/endpoints.rs index 334c74d6..5a0cac5c 100644 --- a/ecstore/src/endpoints.rs +++ b/ecstore/src/endpoints.rs @@ -504,7 +504,7 @@ impl EndpointServerPools { self.0 .first() .and_then(|v| v.endpoints.as_ref().first()) - .map_or(false, |v| v.is_local) + .is_some_and(|v| v.is_local) } /// returns a sorted list of nodes in this cluster diff --git a/ecstore/src/store_init.rs b/ecstore/src/store_init.rs index fb34cc8d..3c44cc0f 100644 --- a/ecstore/src/store_init.rs +++ b/ecstore/src/store_init.rs @@ -140,7 +140,7 @@ pub fn get_format_erasure_in_quorum(formats: &[Option]) -> Result
impl IntoResponse { let mut path = uri.path().trim_start_matches('/'); if path.is_empty() { path = "index.html" } - if let Some(file) = STATIC_DIR.get_file(path) { - let mime_type = from_path(file.path().as_os_str()).first_or_octet_stream(); + if let Some(file) = StaticFiles::get(path) { + let mime_type = from_path(path).first_or_octet_stream(); Response::builder() .status(StatusCode::OK) .header("Content-Type", mime_type.to_string()) - .body(Body::from(file.contents())) + .body(Body::from(file.data)) .unwrap() - } else if let Some(file) = STATIC_DIR.get_file("index.html") { - let mime_type = from_path(file.path().as_os_str()).first_or_octet_stream(); + } else if let Some(file) = StaticFiles::get("index.html") { + let mime_type = from_path("index.html").first_or_octet_stream(); Response::builder() .status(StatusCode::OK) .header("Content-Type", mime_type.to_string()) - .body(Body::from(file.contents())) + .body(Body::from(file.data)) .unwrap() } else { Response::builder() @@ -108,29 +110,6 @@ async fn config_handler(axum::extract::Extension(fs_addr): axum::extract::Extens } pub async fn start_static_file_server(addrs: &str, fs_addr: &str) { - // 将字符串解析为 SocketAddr - // let socket_addr: SocketAddr = fs_addr.parse().unwrap(); - - // // 提取 IP 地址和端口号 - // let mut src_ip = socket_addr.ip(); - // let port = socket_addr.port(); - - // if src_ip.to_string() == "0.0.0.0" { - // for iface in interfaces() { - // if iface.is_loopback() || !iface.is_up() { - // continue; - // } - // for ip in iface.ips { - // if ip.is_ipv4() { - // src_ip = ip.ip(); - // } - // } - // } - // } - - // // FIXME: TODO: protocol from config - // let s3_url = format!("http://{}:{}", src_ip, port); - // 创建路由 let app = Router::new() .route("/config.json", get(config_handler).layer(axum::extract::Extension(fs_addr.to_owned())))