Revert change to take payload in inbox, it wasnt necessary.

This commit is contained in:
Felix Ableitner 2022-11-15 23:18:28 +01:00
parent 8ee52826a1
commit 05ad7b2f3a
4 changed files with 11 additions and 19 deletions

2
Cargo.lock generated
View file

@ -4,7 +4,7 @@ version = 3
[[package]] [[package]]
name = "activitypub_federation" name = "activitypub_federation"
version = "0.3.0" version = "0.3.1"
dependencies = [ dependencies = [
"activitystreams-kinds", "activitystreams-kinds",
"actix-rt", "actix-rt",

View file

@ -16,7 +16,7 @@ use activitypub_federation::{
UrlVerifier, UrlVerifier,
APUB_JSON_CONTENT_TYPE, APUB_JSON_CONTENT_TYPE,
}; };
use actix_web::{web, web::Payload, App, HttpRequest, HttpResponse, HttpServer}; use actix_web::{web, App, HttpRequest, HttpResponse, HttpServer};
use async_trait::async_trait; use async_trait::async_trait;
use http_signature_normalization_actix::prelude::VerifyDigest; use http_signature_normalization_actix::prelude::VerifyDigest;
use reqwest::Client; use reqwest::Client;
@ -124,13 +124,14 @@ async fn http_get_user(
/// Handles messages received in user inbox /// Handles messages received in user inbox
async fn http_post_user_inbox( async fn http_post_user_inbox(
request: HttpRequest, request: HttpRequest,
payload: Payload, payload: String,
data: web::Data<InstanceHandle>, data: web::Data<InstanceHandle>,
) -> Result<HttpResponse, Error> { ) -> Result<HttpResponse, Error> {
let data: InstanceHandle = data.into_inner().deref().clone(); let data: InstanceHandle = data.into_inner().deref().clone();
let activity = serde_json::from_str(&payload)?;
receive_activity::<WithContext<PersonAcceptedActivities>, MyUser, InstanceHandle>( receive_activity::<WithContext<PersonAcceptedActivities>, MyUser, InstanceHandle>(
request, request,
payload.into_inner(), activity,
&data.clone().local_instance, &data.clone().local_instance,
&Data::new(data), &Data::new(data),
) )

View file

@ -6,16 +6,15 @@ use crate::{
Error, Error,
LocalInstance, LocalInstance,
}; };
use actix_web::{dev::Payload, web::Bytes, FromRequest, HttpRequest, HttpResponse}; use actix_web::{dev::Payload, FromRequest, HttpRequest, HttpResponse};
use anyhow::anyhow;
use http_signature_normalization_actix::prelude::DigestVerified; use http_signature_normalization_actix::prelude::DigestVerified;
use serde::de::DeserializeOwned; use serde::de::DeserializeOwned;
use tracing::{log::debug, warn}; use tracing::log::debug;
/// Receive an activity and perform some basic checks, including HTTP signature verification. /// Receive an activity and perform some basic checks, including HTTP signature verification.
pub async fn receive_activity<Activity, ActorT, Datatype>( pub async fn receive_activity<Activity, ActorT, Datatype>(
request: HttpRequest, request: HttpRequest,
mut payload: Payload, activity: Activity,
local_instance: &LocalInstance, local_instance: &LocalInstance,
data: &Data<Datatype>, data: &Data<Datatype>,
) -> Result<HttpResponse, <Activity as ActivityHandler>::Error> ) -> Result<HttpResponse, <Activity as ActivityHandler>::Error>
@ -31,15 +30,7 @@ where
<ActorT as ApubObject>::Error: From<Error> + From<anyhow::Error>, <ActorT as ApubObject>::Error: From<Error> + From<anyhow::Error>,
{ {
// ensure that payload hash was checked against digest header by middleware // ensure that payload hash was checked against digest header by middleware
DigestVerified::from_request(&request, &mut payload).await?; DigestVerified::from_request(&request, &mut Payload::None).await?;
let bytes = Bytes::from_request(&request, &mut payload)
.await
.map_err(|e| {
warn!("{}", e);
anyhow!("Failed to parse request body")
})?;
let activity: Activity = serde_json::from_slice(&bytes)?;
verify_domains_match(activity.id(), activity.actor())?; verify_domains_match(activity.id(), activity.actor())?;
verify_url_valid(activity.id(), &local_instance.settings).await?; verify_url_valid(activity.id(), &local_instance.settings).await?;

View file

@ -55,7 +55,7 @@ where
data: &Data<Self::DataType>, data: &Data<Self::DataType>,
request_counter: &mut i32, request_counter: &mut i32,
) -> Result<(), Self::Error> { ) -> Result<(), Self::Error> {
self.verify(data, request_counter).await self.deref().verify(data, request_counter).await
} }
async fn receive( async fn receive(
@ -63,7 +63,7 @@ where
data: &Data<Self::DataType>, data: &Data<Self::DataType>,
request_counter: &mut i32, request_counter: &mut i32,
) -> Result<(), Self::Error> { ) -> Result<(), Self::Error> {
self.receive(data, request_counter).await (*self).receive(data, request_counter).await
} }
} }