buzzback/send: merge in generate_digest_header()

This commit is contained in:
Astro 2023-10-13 01:33:36 +02:00
parent fe0d19fbc6
commit 8f56f53200
3 changed files with 23 additions and 23 deletions

View File

@ -1,20 +0,0 @@
use http_digest_headers::{DigestHeader, DigestMethod};
pub fn generate_header(body: &[u8]) -> Result<String, ()> {
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)
}

View File

@ -7,7 +7,6 @@ mod error;
mod config;
mod db;
mod activitypub;
mod digest;
mod send;
async fn follow_back(

View File

@ -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<T: Serialize>(
client: &reqwest::Client,
@ -21,6 +22,26 @@ pub async fn send<T: Serialize>(
send_raw(client, uri, key_id, private_key, body).await
}
pub fn generate_digest_header(body: &[u8]) -> Result<String, ()> {
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")