From 49cd2921157fe63997f664933f609f682575a2cd Mon Sep 17 00:00:00 2001 From: _ <> Date: Mon, 9 Nov 2020 00:04:35 +0000 Subject: [PATCH] :bug: Allowing spaces in server names --- src/relay/mod.rs | 16 +++++++++++----- todo.md | 1 - 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/relay/mod.rs b/src/relay/mod.rs index db1f130..47a64d4 100644 --- a/src/relay/mod.rs +++ b/src/relay/mod.rs @@ -108,7 +108,7 @@ struct Config { impl From <&ConfigFile> for Config { fn from (f: &ConfigFile) -> Self { - let trips = HashMap::from_iter (f.server_tripcodes.iter () + let server_tripcodes = HashMap::from_iter (f.server_tripcodes.iter () .map (|(k, v)| { use std::convert::TryInto; let bytes: Vec = base64::decode (v).unwrap (); @@ -116,11 +116,15 @@ impl From <&ConfigFile> for Config { let v = blake3::Hash::from (bytes); - (k.clone (), v) + let k = percent_encoding::percent_encode (k.as_bytes (), percent_encoding::NON_ALPHANUMERIC).to_string (); + + debug! ("Tripcode {} => {}", k, v.to_hex ()); + + (k, v) })); Self { - server_tripcodes: trips, + server_tripcodes, } } } @@ -485,10 +489,12 @@ async fn handle_all (req: Request , state: Arc ) } else if let Some (rest) = prefix_match ("/frontend/servers/", path) { if rest == "" { + use std::borrow::Cow; + #[derive (Serialize)] struct ServerEntry <'a> { path: &'a str, - name: &'a str, + name: Cow <'a, str>, } #[derive (Serialize)] @@ -503,7 +509,7 @@ async fn handle_all (req: Request , state: Arc ) let page = ServerListPage { servers: names.iter () .map (|name| ServerEntry { - name: &name, + name: percent_encoding::percent_decode_str (name).decode_utf8 ().unwrap_or_else (|_| "Server name isn't UTF-8".into ()), path: &name, }) .collect (), diff --git a/todo.md b/todo.md index afc6fb9..3f50221 100644 --- a/todo.md +++ b/todo.md @@ -2,7 +2,6 @@ - Reduce idle memory use? - Impl multi-range / multi-part byte serving -- Allow spaces in server names - Deny unused HTTP methods for endpoints - ETag cache based on mtime - Server-side hash?