From: Nutomic Date: Thu, 3 Mar 2022 18:40:10 +0000 (+0000) Subject: Add timeout for sending activities (#2112) X-Git-Url: http://these/git/?a=commitdiff_plain;h=fa29ffade1e0898895064abda9906af502fdf7b0;p=lemmy.git Add timeout for sending activities (#2112) * Add timeout for sending activities * Also set request timeouts in utils/src/request.rs --- diff --git a/crates/apub_lib/src/signatures.rs b/crates/apub_lib/src/signatures.rs index 153eb745..2ee3a144 100644 --- a/crates/apub_lib/src/signatures.rs +++ b/crates/apub_lib/src/signatures.rs @@ -15,7 +15,7 @@ use reqwest::Response; use reqwest_middleware::ClientWithMiddleware; use serde::{Deserialize, Serialize}; use sha2::{Digest, Sha256}; -use std::str::FromStr; +use std::{str::FromStr, time::Duration}; use tracing::debug; use url::Url; @@ -46,6 +46,8 @@ pub async fn sign_and_send( let request = client .post(&inbox_url.to_string()) + // signature is only valid for 10 seconds, so no reason to wait any longer + .timeout(Duration::from_secs(10)) .headers(headers) .signature_with_digest( HTTP_SIG_CONFIG.clone(), diff --git a/crates/utils/src/request.rs b/crates/utils/src/request.rs index 144dd0bc..4f87c10a 100644 --- a/crates/utils/src/request.rs +++ b/crates/utils/src/request.rs @@ -4,7 +4,7 @@ use encoding::{all::encodings, DecoderTrap}; use percent_encoding::{utf8_percent_encode, NON_ALPHANUMERIC}; use reqwest_middleware::ClientWithMiddleware; use serde::{Deserialize, Serialize}; -use std::future::Future; +use std::{future::Future, time::Duration}; use thiserror::Error; use tracing::{error, info}; use url::Url; @@ -69,7 +69,11 @@ pub async fn fetch_site_metadata( url: &Url, ) -> Result { info!("Fetching site metadata for url: {}", url); - let response = client.get(url.as_str()).send().await?; + let response = client + .get(url.as_str()) + .timeout(Duration::from_secs(30)) + .send() + .await?; // Can't use .text() here, because it only checks the content header, not the actual bytes // https://github.com/LemmyNet/lemmy/issues/1964 @@ -177,7 +181,11 @@ pub(crate) async fn fetch_pictrs( utf8_percent_encode(image_url.as_str(), NON_ALPHANUMERIC) // TODO this might not be needed ); - let response = client.get(&fetch_url).send().await?; + let response = client + .get(&fetch_url) + .timeout(Duration::from_secs(30)) + .send() + .await?; let response: PictrsResponse = response .json() @@ -249,7 +257,11 @@ pub async fn fetch_site_data( #[tracing::instrument(skip_all)] async fn is_image_content_type(client: &ClientWithMiddleware, url: &Url) -> Result<(), LemmyError> { - let response = client.get(url.as_str()).send().await?; + let response = client + .get(url.as_str()) + .timeout(Duration::from_secs(30)) + .send() + .await?; if response .headers() .get("Content-Type")