From 5387c262c13181418f99828c13e0ae207cd16acf Mon Sep 17 00:00:00 2001 From: Nutomic Date: Fri, 3 Jun 2022 15:31:22 +0000 Subject: [PATCH] Forbid outgoing requests in activitypub tests (fixes #2289) (#2294) --- Cargo.lock | 1 + crates/apub/Cargo.toml | 1 + crates/apub/src/objects/mod.rs | 23 ++++++++++++++++++++--- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 887fae193..5f1eb93e5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1962,6 +1962,7 @@ dependencies = [ "serial_test", "sha2", "strum_macros", + "task-local-extensions", "tracing", "url", "uuid", diff --git a/crates/apub/Cargo.toml b/crates/apub/Cargo.toml index f8320c280..095247c6d 100644 --- a/crates/apub/Cargo.toml +++ b/crates/apub/Cargo.toml @@ -49,3 +49,4 @@ parking_lot = "0.12.0" serial_test = "0.6.0" assert-json-diff = "2.0.1" reqwest-middleware = "0.1.5" +task-local-extensions = "0.1.1" diff --git a/crates/apub/src/objects/mod.rs b/crates/apub/src/objects/mod.rs index e07eb4def..3b7aab2cb 100644 --- a/crates/apub/src/objects/mod.rs +++ b/crates/apub/src/objects/mod.rs @@ -55,6 +55,7 @@ pub(crate) fn verify_is_remote_object(id: &Url) -> Result<(), LemmyError> { #[cfg(test)] pub(crate) mod tests { use actix::Actor; + use anyhow::anyhow; use diesel::{ r2d2::{ConnectionManager, Pool}, PgConnection, @@ -71,9 +72,25 @@ pub(crate) mod tests { }; use lemmy_websocket::{chat_server::ChatServer, LemmyContext}; use parking_lot::Mutex; - use reqwest::Client; - use reqwest_middleware::ClientBuilder; + use reqwest::{Client, Request, Response}; + use reqwest_middleware::{ClientBuilder, Middleware, Next}; use std::sync::Arc; + use task_local_extensions::Extensions; + + struct BlockedMiddleware; + + /// A reqwest middleware which blocks all requests + #[async_trait::async_trait] + impl Middleware for BlockedMiddleware { + async fn handle( + &self, + _req: Request, + _extensions: &mut Extensions, + _next: Next<'_>, + ) -> reqwest_middleware::Result { + Err(anyhow!("Network requests not allowed").into()) + } + } // TODO: would be nice if we didnt have to use a full context for tests. pub(crate) fn init_context() -> LemmyContext { @@ -89,7 +106,7 @@ pub(crate) mod tests { .build() .unwrap(); - let client = ClientBuilder::new(client).build(); + let client = ClientBuilder::new(client).with(BlockedMiddleware).build(); let secret = Secret { id: 0, jwt_secret: "".to_string(),