From 93a24b5c5c739ec806f4ddce69b0e4162d00357e Mon Sep 17 00:00:00 2001 From: Wesley Parr Date: Tue, 19 Dec 2023 08:11:53 -0800 Subject: [PATCH] route extension detection --- src/frontend/http.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/frontend/http.rs b/src/frontend/http.rs index d1411f0..ed0ff38 100755 --- a/src/frontend/http.rs +++ b/src/frontend/http.rs @@ -136,6 +136,23 @@ async fn get_file( Ok((StatusCode::OK, StreamBody::new(file_stream))) } +#[axum_macros::debug_handler] +async fn get_file_extension(Path(name): Path<(String)>) -> Result { + debug!("get_file_named called with {name}"); + + let reencoded = + utf8_percent_encode(&percent_decode_str(&name).decode_utf8()?, FORM).to_string(); + + if name != reencoded { + return Err(AppError(StatusCode::BAD_REQUEST, anyhow!("Provided file name contains characters that have not been encoded. It should be: {reencoded}"))); + } + + let pk = Secp256k1PubKey::try_from("")?; + let file_stream = read_file(&pk, &Lookup::Name(name))?; + + Ok((StatusCode::OK, StreamBody::new(file_stream))) +} + #[axum_macros::debug_handler] async fn get_file_named( Path((pk, name)): Path<(String, String)>, @@ -178,6 +195,7 @@ pub async fn start() -> Result<()> { .route("/remove/:pk/:blake3_hash", delete(remove_file)) .route("/store/:pk", post(post_file)) .route("/store_named/:pk/:name", post(post_file_named)) + .route("/retrieve/:named", get(get_file_extension)) .route("/retrieve/:pk/:blake3_hash", get(get_file)) .route("/retrieve_named/:pk/:name", get(get_file_named)) .route("/key/:pk", get(key))