From f05bb726f22b9a1084427e725c0c304a811d6bcd Mon Sep 17 00:00:00 2001 From: Tangel Date: Tue, 5 Mar 2024 05:35:06 +0000 Subject: [PATCH] update --- src/activity_queue.rs | 11 +++++++---- src/activity_sending.rs | 1 + src/axum/inbox.rs | 14 ++++++-------- src/fetch/mod.rs | 8 ++++++-- 4 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/activity_queue.rs b/src/activity_queue.rs index abb5800..2eff5e7 100644 --- a/src/activity_queue.rs +++ b/src/activity_queue.rs @@ -423,6 +423,7 @@ mod tests { use bytes::Bytes; use http::{HeaderMap, StatusCode}; use std::time::Instant; + use tokio::net::TcpListener; use tracing::debug; // This will periodically send back internal errors to test the retry @@ -450,10 +451,12 @@ mod tests { .route("/", post(dodgy_handler)) .with_state(state); - axum::Server::bind(&"0.0.0.0:8002".parse().unwrap()) - .serve(app.into_make_service()) - .await - .unwrap(); + axum::serve( + TcpListener::bind("0.0.0.0:8002").await.unwrap(), + app.into_make_service(), + ) + .await + .unwrap(); } #[tokio::test(flavor = "multi_thread")] diff --git a/src/activity_sending.rs b/src/activity_sending.rs index b6ff435..6582ef0 100644 --- a/src/activity_sending.rs +++ b/src/activity_sending.rs @@ -214,6 +214,7 @@ pub(crate) fn generate_request_headers(inbox_url: &Url) -> HeaderMap { mod tests { use super::*; use crate::{config::FederationConfig, http_signatures::generate_actor_keypair}; + use axum::extract::State; use bytes::Bytes; use http::StatusCode; use std::{ diff --git a/src/axum/inbox.rs b/src/axum/inbox.rs index 717103d..76a82a4 100644 --- a/src/axum/inbox.rs +++ b/src/axum/inbox.rs @@ -64,20 +64,18 @@ where { type Rejection = Response; - async fn from_request(req: Request, state: &S) -> Result { - let headers = req.headers().clone(); - let method = req.method().clone(); - let uri = req.uri().clone(); + async fn from_request(req: Request, _state: &S) -> Result { + let (parts, body) = req.into_parts(); // this wont work if the body is an long running stream - let bytes = hyper::body::Bytes::from_request(req, state) + let bytes = axum::body::to_bytes(body, usize::MAX) .await .map_err(|err| (StatusCode::INTERNAL_SERVER_ERROR, err.to_string()).into_response())?; Ok(Self { - headers, - method, - uri, + headers: parts.headers, + method: parts.method, + uri: parts.uri, body: bytes.to_vec(), }) } diff --git a/src/fetch/mod.rs b/src/fetch/mod.rs index 54fb6ba..8db7f91 100644 --- a/src/fetch/mod.rs +++ b/src/fetch/mod.rs @@ -94,7 +94,7 @@ async fn fetch_object_http_with_accept( let req = config .client .get(url.as_str()) - .header("Accept", content_type) + .header("Accept", content_type.as_bytes()) .timeout(config.request_timeout); let res = if let Some((actor_id, private_key_pem)) = config.signed_fetch_actor.as_deref() { @@ -116,7 +116,11 @@ async fn fetch_object_http_with_accept( } let url = res.url().clone(); - let content_type = res.headers().get("Content-Type").cloned(); + let content_type = res + .headers() + .get("Content-Type") + .cloned() + .and_then(|v| HeaderValue::from_maybe_shared(v).ok()); let text = res.bytes_limited().await?; let object_id = extract_id(&text).ok();