diff --git a/buzzback/src/digest.rs b/buzzback/src/digest.rs deleted file mode 100644 index 32d6eab..0000000 --- a/buzzback/src/digest.rs +++ /dev/null @@ -1,20 +0,0 @@ -use http_digest_headers::{DigestHeader, DigestMethod}; - -pub fn generate_header(body: &[u8]) -> Result { - let mut digest_header = DigestHeader::new() - .with_method(DigestMethod::SHA256, body) - .map(|h| format!("{}", h)) - .map_err(|_| ())?; - - // mastodon expects uppercase algo name - if digest_header.starts_with("sha-") { - digest_header.replace_range(..4, "SHA-"); - } - // mastodon uses base64::alphabet::STANDARD, not base64::alphabet::URL_SAFE - digest_header.replace_range( - 7.., - &digest_header[7..].replace('-', "+").replace('_', "/") - ); - - Ok(digest_header) -} diff --git a/buzzback/src/main.rs b/buzzback/src/main.rs index b8a10d6..d06575e 100644 --- a/buzzback/src/main.rs +++ b/buzzback/src/main.rs @@ -7,7 +7,6 @@ mod error; mod config; mod db; mod activitypub; -mod digest; mod send; async fn follow_back( diff --git a/buzzback/src/send.rs b/buzzback/src/send.rs index df79233..5649bc8 100644 --- a/buzzback/src/send.rs +++ b/buzzback/src/send.rs @@ -5,7 +5,8 @@ use std::{ use http::StatusCode; use serde::Serialize; use sigh::{PrivateKey, SigningConfig, alg::RsaSha256}; -use crate::{digest, error::Error}; +use http_digest_headers::{DigestHeader, DigestMethod}; +use crate::error::Error; pub async fn send( client: &reqwest::Client, @@ -21,6 +22,26 @@ pub async fn send( send_raw(client, uri, key_id, private_key, body).await } + +pub fn generate_digest_header(body: &[u8]) -> Result { + let mut digest_header = DigestHeader::new() + .with_method(DigestMethod::SHA256, body) + .map(|h| format!("{}", h)) + .map_err(|_| ())?; + + // mastodon expects uppercase algo name + if digest_header.starts_with("sha-") { + digest_header.replace_range(..4, "SHA-"); + } + // mastodon uses base64::alphabet::STANDARD, not base64::alphabet::URL_SAFE + digest_header.replace_range( + 7.., + &digest_header[7..].replace('-', "+").replace('_', "/") + ); + + Ok(digest_header) +} + pub async fn send_raw( client: &reqwest::Client, uri: &str, @@ -31,7 +52,7 @@ pub async fn send_raw( let url = reqwest::Url::parse(uri) .map_err(|_| Error::InvalidUri)?; let host = format!("{}", url.host().ok_or(Error::InvalidUri)?); - let digest_header = digest::generate_header(&body) + let digest_header = generate_digest_header(&body) .map_err(|()| Error::Digest)?; let mut req = http::Request::builder() .method("POST")