diff --git a/Cargo.toml b/Cargo.toml index c9f71ed..dcff986 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "http-signature-normalization" description = "An HTTP Signatures library that leaves the signing to you" -version = "0.5.0" +version = "0.5.1" authors = ["asonix "] license-file = "LICENSE" readme = "README.md" diff --git a/src/lib.rs b/src/lib.rs index 7dd45d2..2df9869 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -228,14 +228,6 @@ fn build_signing_string( btm: &mut BTreeMap, mut required_headers: HashSet, ) -> Result { - for key in btm.keys() { - required_headers.remove(key); - } - - if !required_headers.is_empty() { - return Err(RequiredError(required_headers)); - } - let request_target = format!("{} {}", method.to_string().to_lowercase(), path_and_query); btm.insert(REQUEST_TARGET.to_owned(), request_target.clone()); @@ -248,10 +240,20 @@ fn build_signing_string( let signing_string = sig_headers .iter() - .filter_map(|h| btm.remove(h).map(|v| format!("{}: {}", h, v))) + .filter_map(|h| { + let opt = btm.remove(h).map(|v| format!("{}: {}", h, v)); + if opt.is_some() { + required_headers.remove(h); + } + opt + }) .collect::>() .join("\n"); + if !required_headers.is_empty() { + return Err(RequiredError(required_headers)); + } + Ok(signing_string) }