buzzback/send: merge in generate_digest_header()
This commit is contained in:
parent
fe0d19fbc6
commit
8f56f53200
|
@ -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)
|
|
||||||
}
|
|
|
@ -7,7 +7,6 @@ mod error;
|
||||||
mod config;
|
mod config;
|
||||||
mod db;
|
mod db;
|
||||||
mod activitypub;
|
mod activitypub;
|
||||||
mod digest;
|
|
||||||
mod send;
|
mod send;
|
||||||
|
|
||||||
async fn follow_back(
|
async fn follow_back(
|
||||||
|
|
|
@ -5,7 +5,8 @@ use std::{
|
||||||
use http::StatusCode;
|
use http::StatusCode;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
use sigh::{PrivateKey, SigningConfig, alg::RsaSha256};
|
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>(
|
pub async fn send<T: Serialize>(
|
||||||
client: &reqwest::Client,
|
client: &reqwest::Client,
|
||||||
|
@ -21,6 +22,26 @@ pub async fn send<T: Serialize>(
|
||||||
send_raw(client, uri, key_id, private_key, body).await
|
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(
|
pub async fn send_raw(
|
||||||
client: &reqwest::Client,
|
client: &reqwest::Client,
|
||||||
uri: &str,
|
uri: &str,
|
||||||
|
@ -31,7 +52,7 @@ pub async fn send_raw(
|
||||||
let url = reqwest::Url::parse(uri)
|
let url = reqwest::Url::parse(uri)
|
||||||
.map_err(|_| Error::InvalidUri)?;
|
.map_err(|_| Error::InvalidUri)?;
|
||||||
let host = format!("{}", url.host().ok_or(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)?;
|
.map_err(|()| Error::Digest)?;
|
||||||
let mut req = http::Request::builder()
|
let mut req = http::Request::builder()
|
||||||
.method("POST")
|
.method("POST")
|
||||||
|
|
Loading…
Reference in New Issue
Block a user