diff --git a/Cargo.lock b/Cargo.lock index 7823e9fc2..cf741d689 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1761,6 +1761,7 @@ dependencies = [ "async-trait", "awc", "background-jobs", + "backtrace", "base64 0.13.0", "bcrypt", "chrono", diff --git a/lemmy_apub/Cargo.toml b/lemmy_apub/Cargo.toml index 5610ed699..7e8f792a5 100644 --- a/lemmy_apub/Cargo.toml +++ b/lemmy_apub/Cargo.toml @@ -46,3 +46,4 @@ anyhow = "1.0" thiserror = "1.0" background-jobs = " 0.8" reqwest = { version = "0.10", features = ["json"] } +backtrace = "0.3" diff --git a/lemmy_apub/src/objects/mod.rs b/lemmy_apub/src/objects/mod.rs index f365b528c..a162c165b 100644 --- a/lemmy_apub/src/objects/mod.rs +++ b/lemmy_apub/src/objects/mod.rs @@ -48,16 +48,14 @@ pub(in crate::objects) fn check_object_domain( where T: Base + AsBase, { - let actor_id = if let Some(url) = expected_domain { - check_is_apub_id_valid(&url)?; + let object_id = if let Some(url) = expected_domain { let domain = url.domain().context(location_info!())?; apub.id(domain)?.context(location_info!())? } else { - let actor_id = apub.id_unchecked().context(location_info!())?; - check_is_apub_id_valid(&actor_id)?; - actor_id + apub.id_unchecked().context(location_info!())? }; - Ok(actor_id.to_string()) + check_is_apub_id_valid(&object_id)?; + Ok(object_id.to_string()) } pub(in crate::objects) fn set_content_and_source( diff --git a/lemmy_apub/src/objects/post.rs b/lemmy_apub/src/objects/post.rs index ce16f8d13..a058d8b7c 100644 --- a/lemmy_apub/src/objects/post.rs +++ b/lemmy_apub/src/objects/post.rs @@ -17,6 +17,7 @@ use activitystreams::{ }; use activitystreams_ext::Ext1; use anyhow::Context; +use backtrace::Backtrace; use lemmy_db::{ community::Community, post::{Post, PostForm}, @@ -32,6 +33,7 @@ use lemmy_utils::{ LemmyError, }; use lemmy_websocket::LemmyContext; +use log::error; use url::Url; #[async_trait::async_trait(?Send)] @@ -130,6 +132,15 @@ impl FromApub for PostForm { let community = get_or_fetch_and_upsert_community(community_actor_id, context, request_counter).await?; + if community.local && creator.local { + let page_id = page.id_unchecked().context(location_info!())?; + let bt = Backtrace::new(); + error!( + "Lemmy is parsing a local post as remote, page id: {}, stack trace: {:?}", + page_id, bt + ); + } + let thumbnail_url = match &page.inner.image() { Some(any_image) => Image::from_any_base( any_image