diff --git a/Cargo.lock b/Cargo.lock index 468f94b..52fbe6c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -123,6 +123,15 @@ dependencies = [ "generic-array 0.12.4", ] +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array 0.14.4", +] + [[package]] name = "block-padding" version = "0.1.5" @@ -228,6 +237,15 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea221b5284a47e40033bf9b66f35f984ec0ea2931eb03505246cd27a963f981b" +[[package]] +name = "cpufeatures" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" +dependencies = [ + "libc", +] + [[package]] name = "ct-logs" version = "0.8.0" @@ -927,6 +945,12 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" +[[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + [[package]] name = "openssl" version = "0.10.36" @@ -1282,6 +1306,7 @@ dependencies = [ "regex", "reqwest", "rmp-serde", + "rust-embed", "rusty_ulid", "serde", "serde_json", @@ -1584,6 +1609,40 @@ dependencies = [ "serde", ] +[[package]] +name = "rust-embed" +version = "6.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1be44a6694859b7cfc955699935944a6844aa9fe416aeda5d40829e3e38dfee6" +dependencies = [ + "rust-embed-impl", + "rust-embed-utils", + "walkdir", +] + +[[package]] +name = "rust-embed-impl" +version = "6.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f567ca01565c50c67b29e535f5f67b8ea8aeadaeed16a88f10792ab57438b957" +dependencies = [ + "proc-macro2", + "quote", + "rust-embed-utils", + "syn", + "walkdir", +] + +[[package]] +name = "rust-embed-utils" +version = "7.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6116e7ab9ea963f60f2f20291d8fcf6c7273192cdd7273b3c80729a9605c97b2" +dependencies = [ + "sha2", + "walkdir", +] + [[package]] name = "rustls" version = "0.19.1" @@ -1627,6 +1686,15 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + [[package]] name = "schannel" version = "0.1.19" @@ -1725,10 +1793,23 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df" dependencies = [ - "block-buffer", + "block-buffer 0.7.3", "digest 0.8.1", "fake-simd", - "opaque-debug", + "opaque-debug 0.2.3", +] + +[[package]] +name = "sha2" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b69f9a4c9740d74c5baa3fd2e547f9525fa8088a8a958e0ca2409a514e33f5fa" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug 0.3.0", ] [[package]] @@ -2190,6 +2271,17 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" +[[package]] +name = "walkdir" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +dependencies = [ + "same-file", + "winapi", + "winapi-util", +] + [[package]] name = "want" version = "0.3.0" @@ -2319,6 +2411,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" diff --git a/crates/ptth_file_server_bin/src/lib.rs b/crates/ptth_file_server_bin/src/lib.rs index 3935328..036dae2 100644 --- a/crates/ptth_file_server_bin/src/lib.rs +++ b/crates/ptth_file_server_bin/src/lib.rs @@ -3,7 +3,7 @@ use std::{ ffi::OsString, net::SocketAddr, - path::PathBuf, + path::{PathBuf}, sync::Arc, }; @@ -80,10 +80,28 @@ struct ConfigFile { pub async fn main (_args: &[OsString]) -> anyhow::Result <()> { let path = PathBuf::from ("./config/ptth_server.toml"); - let config_file: ConfigFile = load_toml::load (&path)?; - info! ("file_server_root: {:?}", config_file.file_server_root); + + let file_server_root; + let name; + + match load_toml::load:: (&path) { + Ok (config_file) => { + file_server_root = config_file.file_server_root; + name = config_file.name; + }, + _ => { + info! ("No ptth_server.toml file, using default configs"); + file_server_root = None; + name = None; + }, + }; + + let name = name.unwrap_or_else (|| "PTTH File Server".to_string ()); + + info! ("file_server_root: {:?}", file_server_root); let addr = SocketAddr::from(([0, 0, 0, 0], 4000)); + info! ("Serving at {:?}", addr); let metrics_interval = Arc::new (ArcSwap::default ()); @@ -93,9 +111,9 @@ pub async fn main (_args: &[OsString]) -> anyhow::Result <()> { }); let state = Arc::new (FileServer::new ( - config_file.file_server_root, + file_server_root, &PathBuf::new (), - config_file.name.unwrap_or_else (|| "PTTH File Server".to_string ()), + name, metrics_interval, Some (path), )?); diff --git a/crates/ptth_server/Cargo.toml b/crates/ptth_server/Cargo.toml index beb0726..7506a76 100644 --- a/crates/ptth_server/Cargo.toml +++ b/crates/ptth_server/Cargo.toml @@ -28,6 +28,7 @@ pulldown-cmark = { version = "0.8.0", optional = true } rand = "0.8.3" regex = "1.4.1" rmp-serde = "0.15.5" +rust-embed = "6.2.0" rusty_ulid = "0.10.1" serde = {version = "1.0.117", features = ["derive"]} serde_json = "1.0.60" diff --git a/crates/ptth_server/src/file_server.rs b/crates/ptth_server/src/file_server.rs index 4c4d301..a347a4c 100644 --- a/crates/ptth_server/src/file_server.rs +++ b/crates/ptth_server/src/file_server.rs @@ -429,20 +429,26 @@ impl FileServer { } fn load_templates ( - asset_root: &Path + _asset_root: &Path ) --> Result , anyhow::Error> +-> anyhow::Result > { + use rust_embed::RustEmbed; + #[derive (RustEmbed)] + #[folder = "../../handlebars/server"] + struct HandlebarsServer; + let mut handlebars = Handlebars::new (); handlebars.set_strict_mode (true); - let asset_root = asset_root.join ("handlebars/server"); - for (k, v) in &[ ("file_server_dir", "file_server_dir.html"), ("file_server_root", "file_server_root.html"), ] { - handlebars.register_template_file (k, asset_root.join (v))?; + let asset_file = HandlebarsServer::get (v) + .ok_or_else (|| anyhow::anyhow! ("failed to load handlebars template file"))?; + let s = std::str::from_utf8 (asset_file.data.as_ref ())?; + handlebars.register_template_string (k, s)?; } Ok (handlebars)