From ff55d2fea4ab1b0c342fffa8c46b9896d3fdd660 Mon Sep 17 00:00:00 2001 From: alemi Date: Sat, 13 Apr 2024 02:35:18 +0200 Subject: [PATCH] fix: mastodon compat --- src/routes/activitypub/inbox.rs | 2 +- src/server/auth.rs | 5 +---- src/server/fetcher.rs | 18 +++++++----------- 3 files changed, 9 insertions(+), 16 deletions(-) diff --git a/src/routes/activitypub/inbox.rs b/src/routes/activitypub/inbox.rs index d2fe203e..68b2c800 100644 --- a/src/routes/activitypub/inbox.rs +++ b/src/routes/activitypub/inbox.rs @@ -1,4 +1,4 @@ -use apb::{server::Inbox, target::Addressed, Activity, ActivityType, Base, BaseType, ObjectType}; +use apb::{server::Inbox, ActivityType, Base, BaseType, ObjectType}; use axum::{extract::{Query, State}, http::StatusCode, Json}; use sea_orm::{Order, QueryFilter, QueryOrder, QuerySelect}; diff --git a/src/server/auth.rs b/src/server/auth.rs index b29ac9bc..621122af 100644 --- a/src/server/auth.rs +++ b/src/server/auth.rs @@ -68,10 +68,7 @@ where .get("Signature") .map(|v| v.to_str().unwrap_or("")) { - let mut signature_cfg = Config::new() - .dont_use_created_field() - .require_header("host") - .require_header("date"); + let mut signature_cfg = Config::new().mastodon_compat(); let mut headers : BTreeMap = [ ("Signature".to_string(), sig.to_string()), ("Host".to_string(), header_get(&parts.headers, "Host")), diff --git a/src/server/fetcher.rs b/src/server/fetcher.rs index fb57ed63..ec28b335 100644 --- a/src/server/fetcher.rs +++ b/src/server/fetcher.rs @@ -38,11 +38,12 @@ impl Fetcher { ("Date".to_string(), date.clone()), ].into(); - let mut client = - reqwest::Client::new() - .request(method, url) - .header("Host", host) - .header("Date", date); + let mut client = reqwest::Client::new() + .request(method, url) + .header(CONTENT_TYPE, "application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\"") + .header(USER_AGENT, format!("upub+{VERSION} ({domain})")) + .header("Host", host) + .header("Date", date); let mut signature_cfg = Config::new(); @@ -56,13 +57,10 @@ impl Fetcher { } let signature_header = signature_cfg - .dont_use_created_field() - .require_header("host") - .require_header("date") + .mastodon_compat() .begin_sign("POST", &path, headers) .unwrap() .sign(format!("{from}#main-key"), |to_sign| { - tracing::info!("signing '{to_sign}'"); let mut signer = Signer::new(MessageDigest::sha256(), key)?; signer.update(to_sign.as_bytes())?; let signature = base64::prelude::BASE64_URL_SAFE.encode(signer.sign_to_vec()?); @@ -73,8 +71,6 @@ impl Fetcher { client .header("Signature", signature_header) - .header(CONTENT_TYPE, "application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\"") - .header(USER_AGENT, format!("upub+{VERSION} ({domain})")) // TODO put instance admin email .send() .await? .error_for_status()?