From 26eb395f18fc5ea145861fc1f05fa514f8f84cc8 Mon Sep 17 00:00:00 2001 From: _ <> Date: Mon, 2 Nov 2020 14:41:22 +0000 Subject: [PATCH] Move `relay_url` into the server config TOML too --- src/bin/ptth_server.rs | 6 +----- src/lib.rs | 10 ++++++---- src/server/mod.rs | 27 ++++++++++++++++++++++----- 3 files changed, 29 insertions(+), 14 deletions(-) diff --git a/src/bin/ptth_server.rs b/src/bin/ptth_server.rs index 1925ad8..c5cec75 100644 --- a/src/bin/ptth_server.rs +++ b/src/bin/ptth_server.rs @@ -7,9 +7,6 @@ use structopt::StructOpt; #[derive (Debug, StructOpt)] struct Opt { - #[structopt (name = "RELAY_URL")] - relay_url: String, - #[structopt (long)] file_server_root: Option , } @@ -33,8 +30,7 @@ async fn main () -> Result <(), Box > { let opt = Opt::from_args (); let opt = ptth::server::Opt { - relay_url: opt.relay_url, - file_server_root: opt.file_server_root.unwrap_or_else (|| "/home/user".into ()), + }; ptth::server::main (config_file, opt).await diff --git a/src/lib.rs b/src/lib.rs index 9e59127..d30f1b9 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -23,6 +23,8 @@ pub fn prefix_match <'a> (hay: &'a str, needle: &str) -> Option <&'a str> } } +// Thanks to https://github.com/robsheldon/bad-passwords-index + const BAD_PASSWORDS: &[u8] = include_bytes! ("bad_passwords.txt"); pub fn password_is_bad (mut password: String) -> bool { @@ -103,16 +105,16 @@ mod tests { assert! (relay_state.list_servers ().await.is_empty ()); let relay_url = "http://127.0.0.1:4000"; - let relay_url_2 = relay_url.into (); let config_file = server::ConfigFile { name: server_name.into (), - api_key: api_key.into (), + api_key: api_key.into (), + relay_url: relay_url.into (), + file_server_root: None, }; spawn (async move { let opt = server::Opt { - relay_url: relay_url_2, - file_server_root: "./".into (), + }; server::main (config_file, opt).await.unwrap (); diff --git a/src/server/mod.rs b/src/server/mod.rs index 5758ee3..8d0dd30 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -23,6 +23,7 @@ use crate::{ pub mod file_server; struct ServerState { + config: Config, opt: Opt, handlebars: Handlebars <'static>, client: Client, @@ -61,9 +62,14 @@ async fn handle_req_resp <'a> ( let (req_id, parts) = (wrapped_req.id, wrapped_req.req); let response = if let Some (uri) = prefix_match (&parts.uri, "/files") { + let default_root = PathBuf::from ("./"); + let file_server_root: &std::path::Path = state.config.file_server_root + .as_ref () + .unwrap_or (&default_root); + file_server::serve_all ( &state.handlebars, - &state.opt.file_server_root, + file_server_root, parts.method, uri, &parts.headers @@ -74,7 +80,7 @@ async fn handle_req_resp <'a> ( }; let mut resp_req = state.client - .post (&format! ("{}/7ZSFUKGV_http_response/{}", state.opt.relay_url, req_id)) + .post (&format! ("{}/7ZSFUKGV_http_response/{}", state.config.relay_url, req_id)) .header (crate::PTTH_MAGIC_HEADER, base64::encode (rmp_serde::to_vec (&response.parts).unwrap ())); if let Some (body) = response.body { @@ -93,12 +99,19 @@ async fn handle_req_resp <'a> ( pub struct ConfigFile { pub name: String, pub api_key: String, + pub relay_url: String, + pub file_server_root: Option , +} + +#[derive (Default)] +pub struct Config { + pub relay_url: String, + pub file_server_root: Option , } #[derive (Clone)] pub struct Opt { - pub relay_url: String, - pub file_server_root: PathBuf, + } pub async fn main (config_file: ConfigFile, opt: Opt) @@ -123,6 +136,10 @@ pub async fn main (config_file: ConfigFile, opt: Opt) let handlebars = file_server::load_templates ()?; let state = Arc::new (ServerState { + config: Config { + relay_url: config_file.relay_url, + file_server_root: config_file.file_server_root, + }, opt, handlebars, client, @@ -135,7 +152,7 @@ pub async fn main (config_file: ConfigFile, opt: Opt) delay_for (Duration::from_millis (backoff_delay)).await; } - let req_req = state.client.get (&format! ("{}/7ZSFUKGV_http_listen/{}", state.opt.relay_url, config_file.name)); + let req_req = state.client.get (&format! ("{}/7ZSFUKGV_http_listen/{}", state.config.relay_url, config_file.name)); let err_backoff_delay = std::cmp::min (30_000, backoff_delay * 2 + 500);