From 1e9f609cdb6585b2cffd2acf182f51ac46bc2c6d Mon Sep 17 00:00:00 2001 From: Dessalines Date: Thu, 24 Mar 2022 16:33:23 +0000 Subject: [PATCH] Consolidate and lower reqwest timeouts. Fixes #2150 (#2151) --- crates/apub_lib/src/object_id.rs | 5 ++--- crates/apub_lib/src/signatures.rs | 6 +++--- crates/routes/src/images.rs | 5 ++--- crates/utils/src/lib.rs | 4 +++- crates/utils/src/request.rs | 10 +++++----- src/main.rs | 5 +++-- 6 files changed, 18 insertions(+), 17 deletions(-) diff --git a/crates/apub_lib/src/object_id.rs b/crates/apub_lib/src/object_id.rs index 84c9c113a..6a2d3d57c 100644 --- a/crates/apub_lib/src/object_id.rs +++ b/crates/apub_lib/src/object_id.rs @@ -2,14 +2,13 @@ use crate::{traits::ApubObject, APUB_JSON_CONTENT_TYPE}; use anyhow::anyhow; use chrono::{Duration as ChronoDuration, NaiveDateTime, Utc}; use diesel::NotFound; -use lemmy_utils::{request::retry, settings::structs::Settings, LemmyError}; +use lemmy_utils::{request::retry, settings::structs::Settings, LemmyError, REQWEST_TIMEOUT}; use reqwest::StatusCode; use reqwest_middleware::ClientWithMiddleware; use serde::{Deserialize, Serialize}; use std::{ fmt::{Debug, Display, Formatter}, marker::PhantomData, - time::Duration, }; use tracing::info; use url::Url; @@ -114,7 +113,7 @@ where client .get(self.0.as_str()) .header("Accept", APUB_JSON_CONTENT_TYPE) - .timeout(Duration::from_secs(60)) + .timeout(REQWEST_TIMEOUT) .send() }) .await?; diff --git a/crates/apub_lib/src/signatures.rs b/crates/apub_lib/src/signatures.rs index 2ee3a144b..6e5d6d251 100644 --- a/crates/apub_lib/src/signatures.rs +++ b/crates/apub_lib/src/signatures.rs @@ -4,7 +4,7 @@ use anyhow::anyhow; use http::{header::HeaderName, HeaderMap, HeaderValue}; use http_signature_normalization_actix::Config as ConfigActix; use http_signature_normalization_reqwest::prelude::{Config, SignExt}; -use lemmy_utils::LemmyError; +use lemmy_utils::{LemmyError, REQWEST_TIMEOUT}; use once_cell::sync::Lazy; use openssl::{ hash::MessageDigest, @@ -15,7 +15,7 @@ use reqwest::Response; use reqwest_middleware::ClientWithMiddleware; use serde::{Deserialize, Serialize}; use sha2::{Digest, Sha256}; -use std::{str::FromStr, time::Duration}; +use std::str::FromStr; use tracing::debug; use url::Url; @@ -47,7 +47,7 @@ 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)) + .timeout(REQWEST_TIMEOUT) .headers(headers) .signature_with_digest( HTTP_SIG_CONFIG.clone(), diff --git a/crates/routes/src/images.rs b/crates/routes/src/images.rs index fb4ef2613..6439c8b6a 100644 --- a/crates/routes/src/images.rs +++ b/crates/routes/src/images.rs @@ -12,12 +12,11 @@ use actix_web::{ }; use anyhow::anyhow; use futures::stream::{Stream, StreamExt}; -use lemmy_utils::{claims::Claims, rate_limit::RateLimit, LemmyError}; +use lemmy_utils::{claims::Claims, rate_limit::RateLimit, LemmyError, REQWEST_TIMEOUT}; use lemmy_websocket::LemmyContext; use reqwest::Body; use reqwest_middleware::{ClientWithMiddleware, RequestBuilder}; use serde::{Deserialize, Serialize}; -use std::time::Duration; pub fn config(cfg: &mut web::ServiceConfig, client: ClientWithMiddleware, rate_limit: &RateLimit) { cfg @@ -60,7 +59,7 @@ fn adapt_request( let client_request = client .request(request.method().clone(), url) - .timeout(Duration::from_secs(30)); + .timeout(REQWEST_TIMEOUT); request .headers() diff --git a/crates/utils/src/lib.rs b/crates/utils/src/lib.rs index 6e30104e8..c993779bb 100644 --- a/crates/utils/src/lib.rs +++ b/crates/utils/src/lib.rs @@ -21,11 +21,13 @@ pub use sensitive::Sensitive; use actix_web::HttpResponse; use http::StatusCode; -use std::{fmt, fmt::Display}; +use std::{fmt, fmt::Display, time::Duration}; use tracing_error::SpanTrace; pub type ConnectionId = usize; +pub const REQWEST_TIMEOUT: Duration = Duration::from_secs(10); + #[derive(PartialEq, Eq, Hash, Debug, Clone)] pub struct IpAddr(pub String); diff --git a/crates/utils/src/request.rs b/crates/utils/src/request.rs index 4f87c10ae..1e4f4bf3c 100644 --- a/crates/utils/src/request.rs +++ b/crates/utils/src/request.rs @@ -1,10 +1,10 @@ -use crate::{settings::structs::Settings, version::VERSION, LemmyError}; +use crate::{settings::structs::Settings, version::VERSION, LemmyError, REQWEST_TIMEOUT}; use anyhow::anyhow; 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, time::Duration}; +use std::future::Future; use thiserror::Error; use tracing::{error, info}; use url::Url; @@ -71,7 +71,7 @@ pub async fn fetch_site_metadata( info!("Fetching site metadata for url: {}", url); let response = client .get(url.as_str()) - .timeout(Duration::from_secs(30)) + .timeout(REQWEST_TIMEOUT) .send() .await?; @@ -183,7 +183,7 @@ pub(crate) async fn fetch_pictrs( let response = client .get(&fetch_url) - .timeout(Duration::from_secs(30)) + .timeout(REQWEST_TIMEOUT) .send() .await?; @@ -259,7 +259,7 @@ pub async fn fetch_site_data( async fn is_image_content_type(client: &ClientWithMiddleware, url: &Url) -> Result<(), LemmyError> { let response = client .get(url.as_str()) - .timeout(Duration::from_secs(30)) + .timeout(REQWEST_TIMEOUT) .send() .await?; if response diff --git a/src/main.rs b/src/main.rs index a8d74a125..d0b3c04ee 100644 --- a/src/main.rs +++ b/src/main.rs @@ -26,12 +26,13 @@ use lemmy_utils::{ request::build_user_agent, settings::structs::Settings, LemmyError, + REQWEST_TIMEOUT, }; use lemmy_websocket::{chat_server::ChatServer, LemmyContext}; use reqwest::Client; use reqwest_middleware::ClientBuilder; use reqwest_tracing::TracingMiddleware; -use std::{env, sync::Arc, thread, time::Duration}; +use std::{env, sync::Arc, thread}; use tokio::sync::Mutex; use tracing_actix_web::TracingLogger; @@ -96,7 +97,7 @@ async fn main() -> Result<(), LemmyError> { let client = Client::builder() .user_agent(build_user_agent(&settings)) - .timeout(Duration::from_secs(10)) + .timeout(REQWEST_TIMEOUT) .build()?; let client = ClientBuilder::new(client).with(TracingMiddleware).build();