http-signature-normalization/http-signature-normalization-actix/src/digest/sign.rs

59 lines
1.5 KiB
Rust
Raw Normal View History

2019-09-13 01:12:35 +00:00
use actix_web::{
client::ClientRequest,
http::header::{InvalidHeaderValue, ToStrError},
};
use std::fmt::Display;
use crate::{
digest::{DigestClient, DigestCreate, SignExt},
Config, Sign,
};
impl SignExt for ClientRequest {
fn authorization_signature_with_digest<F, E, K, D, V>(
self,
config: &Config,
key_id: K,
digest: &mut D,
v: V,
f: F,
) -> Result<DigestClient<V>, E>
where
F: FnOnce(&str) -> Result<String, E>,
2019-09-13 01:12:35 +00:00
E: From<ToStrError> + From<InvalidHeaderValue>,
K: Display,
D: DigestCreate,
V: AsRef<[u8]>,
Self: Sized,
{
let digest = digest.compute(v.as_ref());
self.set_header("Digest", format!("{}={}", D::NAME, digest))
.authorization_signature(config, key_id, f)
.map(|c| DigestClient::new(c, v))
}
fn signature_with_digest<F, E, K, D, V>(
self,
config: &Config,
key_id: K,
digest: &mut D,
v: V,
f: F,
) -> Result<DigestClient<V>, E>
where
F: FnOnce(&str) -> Result<String, E>,
2019-09-13 01:12:35 +00:00
E: From<ToStrError> + From<InvalidHeaderValue>,
K: Display,
D: DigestCreate,
V: AsRef<[u8]>,
Self: Sized,
{
let digest = digest.compute(v.as_ref());
self.set_header("Digest", format!("{}={}", D::NAME, digest))
.signature(config, key_id, f)
.map(|c| DigestClient::new(c, v))
}
}