diff --git a/Cargo.toml b/Cargo.toml index fb00d70..90cd49f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,11 +13,11 @@ edition = "2021" [workspace] members = [ - "http-signature-normalization-actix", - "http-signature-normalization-actix-extractor", - "http-signature-normalization-http", - "http-signature-normalization-reqwest", - # "http-signature-normalization-warp", + "actix", + "actix-extractor", + "http", + "reqwest", + # "warp", ] [dependencies] diff --git a/http-signature-normalization-actix-extractor/Cargo.toml b/actix-extractor/Cargo.toml similarity index 100% rename from http-signature-normalization-actix-extractor/Cargo.toml rename to actix-extractor/Cargo.toml diff --git a/http-signature-normalization-actix-extractor/examples/server.rs b/actix-extractor/examples/server.rs similarity index 100% rename from http-signature-normalization-actix-extractor/examples/server.rs rename to actix-extractor/examples/server.rs diff --git a/http-signature-normalization-actix-extractor/src/lib.rs b/actix-extractor/src/lib.rs similarity index 96% rename from http-signature-normalization-actix-extractor/src/lib.rs rename to actix-extractor/src/lib.rs index 1832cd5..e2ef602 100644 --- a/http-signature-normalization-actix-extractor/src/lib.rs +++ b/actix-extractor/src/lib.rs @@ -178,9 +178,7 @@ where .map_err(Into::into)?; let digest_parts = if D::REQUIRED { - req.headers() - .get("digest") - .and_then(|digest| parse_digest(digest)) + req.headers().get("digest").and_then(parse_digest) } else { None }; @@ -214,10 +212,8 @@ where return Err(Error::Signature.into()); } - if D::REQUIRED { - if !digest_verifier.verify(digest_parts.as_deref().unwrap_or(&[])) { - return Err(Error::Digest.into()); - } + if D::REQUIRED && !digest_verifier.verify(digest_parts.as_deref().unwrap_or(&[])) { + return Err(Error::Digest.into()); } let signature = Signature { diff --git a/http-signature-normalization-actix-extractor/src/sha2_digest.rs b/actix-extractor/src/sha2_digest.rs similarity index 100% rename from http-signature-normalization-actix-extractor/src/sha2_digest.rs rename to actix-extractor/src/sha2_digest.rs diff --git a/http-signature-normalization-actix/Cargo.toml b/actix/Cargo.toml similarity index 100% rename from http-signature-normalization-actix/Cargo.toml rename to actix/Cargo.toml diff --git a/http-signature-normalization-actix/LICENSE b/actix/LICENSE similarity index 100% rename from http-signature-normalization-actix/LICENSE rename to actix/LICENSE diff --git a/http-signature-normalization-actix/README.md b/actix/README.md similarity index 100% rename from http-signature-normalization-actix/README.md rename to actix/README.md diff --git a/http-signature-normalization-actix/examples/client.rs b/actix/examples/client.rs similarity index 100% rename from http-signature-normalization-actix/examples/client.rs rename to actix/examples/client.rs diff --git a/http-signature-normalization-actix/examples/server.rs b/actix/examples/server.rs similarity index 100% rename from http-signature-normalization-actix/examples/server.rs rename to actix/examples/server.rs diff --git a/http-signature-normalization-actix/src/create.rs b/actix/src/create.rs similarity index 100% rename from http-signature-normalization-actix/src/create.rs rename to actix/src/create.rs diff --git a/http-signature-normalization-actix/src/digest/middleware.rs b/actix/src/digest/middleware.rs similarity index 100% rename from http-signature-normalization-actix/src/digest/middleware.rs rename to actix/src/digest/middleware.rs diff --git a/http-signature-normalization-actix/src/digest/mod.rs b/actix/src/digest/mod.rs similarity index 100% rename from http-signature-normalization-actix/src/digest/mod.rs rename to actix/src/digest/mod.rs diff --git a/http-signature-normalization-actix/src/digest/sha2.rs b/actix/src/digest/sha2.rs similarity index 100% rename from http-signature-normalization-actix/src/digest/sha2.rs rename to actix/src/digest/sha2.rs diff --git a/http-signature-normalization-actix/src/digest/sha3.rs b/actix/src/digest/sha3.rs similarity index 100% rename from http-signature-normalization-actix/src/digest/sha3.rs rename to actix/src/digest/sha3.rs diff --git a/http-signature-normalization-actix/src/digest/sign.rs b/actix/src/digest/sign.rs similarity index 100% rename from http-signature-normalization-actix/src/digest/sign.rs rename to actix/src/digest/sign.rs diff --git a/http-signature-normalization-actix/src/lib.rs b/actix/src/lib.rs similarity index 100% rename from http-signature-normalization-actix/src/lib.rs rename to actix/src/lib.rs diff --git a/http-signature-normalization-actix/src/middleware.rs b/actix/src/middleware.rs similarity index 100% rename from http-signature-normalization-actix/src/middleware.rs rename to actix/src/middleware.rs diff --git a/http-signature-normalization-actix/src/sign.rs b/actix/src/sign.rs similarity index 100% rename from http-signature-normalization-actix/src/sign.rs rename to actix/src/sign.rs diff --git a/http-signature-normalization-http/Cargo.toml b/http/Cargo.toml similarity index 96% rename from http-signature-normalization-http/Cargo.toml rename to http/Cargo.toml index 0de81fe..01cecb1 100644 --- a/http-signature-normalization-http/Cargo.toml +++ b/http/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "http-signature-normalization-http" description = "An HTTP Signatures library that leaves the signing to you" -version = "0.4.0" +version = "0.5.0" authors = ["asonix "] license-file = "../LICENSE" readme = "../README.md" diff --git a/http-signature-normalization-http/src/create.rs b/http/src/create.rs similarity index 100% rename from http-signature-normalization-http/src/create.rs rename to http/src/create.rs diff --git a/http-signature-normalization-http/src/lib.rs b/http/src/lib.rs similarity index 73% rename from http-signature-normalization-http/src/lib.rs rename to http/src/lib.rs index eaea6ae..61ca203 100644 --- a/http-signature-normalization-http/src/lib.rs +++ b/http/src/lib.rs @@ -57,6 +57,15 @@ pub enum PrepareVerifyError { Header(ToStrError), } +#[derive(Debug)] +/// Errors produced when preparing to sign an Http Signature +pub enum PrepareSignError { + /// There was an error in the underlying library + Required(http_signature_normalization::RequiredError), + /// There was an error producing a String from the HeaderValue + Header(ToStrError), +} + impl Config { /// Begin the process of signing a request /// @@ -66,7 +75,7 @@ impl Config { method: &Method, path_and_query: Option<&PathAndQuery>, headers: HeaderMap, - ) -> Result { + ) -> Result { let headers = headers .iter() .map(|(k, v)| v.to_str().map(|v| (k.to_string(), v.to_string()))) @@ -74,11 +83,11 @@ impl Config { let path_and_query = path_and_query .map(|p| p.to_string()) - .unwrap_or(String::from("/")); + .unwrap_or_else(|| String::from("/")); let unsigned = self .config - .begin_sign(&method.to_string(), &path_and_query, headers); + .begin_sign(method.as_ref(), &path_and_query, headers)?; Ok(Unsigned { unsigned }) } @@ -99,11 +108,11 @@ impl Config { let path_and_query = path_and_query .map(|p| p.to_string()) - .unwrap_or(String::from("/")); + .unwrap_or_else(|| String::from("/")); let unverified = self .config - .begin_verify(&method.to_string(), &path_and_query, headers)?; + .begin_verify(method.as_ref(), &path_and_query, headers)?; Ok(unverified) } @@ -118,14 +127,16 @@ impl fmt::Display for PrepareVerifyError { } } -impl Error for PrepareVerifyError { - fn description(&self) -> &str { +impl fmt::Display for PrepareSignError { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { match *self { - PrepareVerifyError::Sig(ref e) => e.description(), - PrepareVerifyError::Header(ref e) => e.description(), + PrepareSignError::Required(ref e) => write!(f, "Required error, {}", e), + PrepareSignError::Header(ref e) => write!(f, "Header error, {}", e), } } +} +impl Error for PrepareVerifyError { fn source(&self) -> Option<&(dyn Error + 'static)> { match *self { PrepareVerifyError::Sig(ref e) => Some(e), @@ -134,6 +145,15 @@ impl Error for PrepareVerifyError { } } +impl Error for PrepareSignError { + fn source(&self) -> Option<&(dyn Error + 'static)> { + match *self { + PrepareSignError::Required(ref e) => Some(e), + PrepareSignError::Header(ref e) => Some(e), + } + } +} + impl From for PrepareVerifyError { fn from(e: http_signature_normalization::PrepareVerifyError) -> Self { PrepareVerifyError::Sig(e) @@ -145,3 +165,15 @@ impl From for PrepareVerifyError { PrepareVerifyError::Header(e) } } + +impl From for PrepareSignError { + fn from(e: http_signature_normalization::RequiredError) -> Self { + PrepareSignError::Required(e) + } +} + +impl From for PrepareSignError { + fn from(e: ToStrError) -> Self { + PrepareSignError::Header(e) + } +} diff --git a/http-signature-normalization-reqwest/Cargo.toml b/reqwest/Cargo.toml similarity index 100% rename from http-signature-normalization-reqwest/Cargo.toml rename to reqwest/Cargo.toml diff --git a/http-signature-normalization-reqwest/LICENSE b/reqwest/LICENSE similarity index 100% rename from http-signature-normalization-reqwest/LICENSE rename to reqwest/LICENSE diff --git a/http-signature-normalization-reqwest/README.md b/reqwest/README.md similarity index 100% rename from http-signature-normalization-reqwest/README.md rename to reqwest/README.md diff --git a/http-signature-normalization-reqwest/examples/client.rs b/reqwest/examples/client.rs similarity index 100% rename from http-signature-normalization-reqwest/examples/client.rs rename to reqwest/examples/client.rs diff --git a/http-signature-normalization-reqwest/src/digest/mod.rs b/reqwest/src/digest/mod.rs similarity index 100% rename from http-signature-normalization-reqwest/src/digest/mod.rs rename to reqwest/src/digest/mod.rs diff --git a/http-signature-normalization-reqwest/src/digest/sha2.rs b/reqwest/src/digest/sha2.rs similarity index 100% rename from http-signature-normalization-reqwest/src/digest/sha2.rs rename to reqwest/src/digest/sha2.rs diff --git a/http-signature-normalization-reqwest/src/digest/sha3.rs b/reqwest/src/digest/sha3.rs similarity index 100% rename from http-signature-normalization-reqwest/src/digest/sha3.rs rename to reqwest/src/digest/sha3.rs diff --git a/http-signature-normalization-reqwest/src/lib.rs b/reqwest/src/lib.rs similarity index 100% rename from http-signature-normalization-reqwest/src/lib.rs rename to reqwest/src/lib.rs diff --git a/http-signature-normalization-warp/Cargo.toml b/warp/Cargo.toml similarity index 100% rename from http-signature-normalization-warp/Cargo.toml rename to warp/Cargo.toml diff --git a/http-signature-normalization-warp/src/digest/mod.rs b/warp/src/digest/mod.rs similarity index 100% rename from http-signature-normalization-warp/src/digest/mod.rs rename to warp/src/digest/mod.rs diff --git a/http-signature-normalization-warp/src/digest/sha_2.rs b/warp/src/digest/sha_2.rs similarity index 100% rename from http-signature-normalization-warp/src/digest/sha_2.rs rename to warp/src/digest/sha_2.rs diff --git a/http-signature-normalization-warp/src/lib.rs b/warp/src/lib.rs similarity index 100% rename from http-signature-normalization-warp/src/lib.rs rename to warp/src/lib.rs