]> Untitled Git - lemmy.git/commitdiff
Avoid duplicate comment send, better activity logging
authorFelix Ableitner <me@nutomic.com>
Tue, 6 Oct 2020 16:28:31 +0000 (18:28 +0200)
committerFelix Ableitner <me@nutomic.com>
Tue, 6 Oct 2020 16:28:31 +0000 (18:28 +0200)
lemmy_apub/src/activity_queue.rs
lemmy_apub/src/comment.rs
lemmy_apub/src/inbox/community_inbox.rs
lemmy_apub/src/inbox/shared_inbox.rs
lemmy_apub/src/inbox/user_inbox.rs

index 2f11024c4b228d2fdd8b97a6ff6390b02ca006ef..846756593ee1c420e6cf3a103ea8271214d07b45 100644 (file)
@@ -6,7 +6,7 @@ use crate::{
   ActorType,
 };
 use activitystreams::{
-  base::{Extends, ExtendsExt},
+  base::{BaseExt, Extends, ExtendsExt},
   object::AsObject,
 };
 use anyhow::{anyhow, Context, Error};
@@ -23,9 +23,9 @@ use itertools::Itertools;
 use lemmy_db::{community::Community, user::User_, DbPool};
 use lemmy_utils::{location_info, settings::Settings, LemmyError};
 use lemmy_websocket::LemmyContext;
-use log::warn;
+use log::{debug, warn};
 use reqwest::Client;
-use serde::{Deserialize, Serialize};
+use serde::{export::fmt::Debug, Deserialize, Serialize};
 use std::{collections::BTreeMap, future::Future, pin::Pin};
 use url::Url;
 
@@ -36,11 +36,12 @@ pub async fn send_activity_single_dest<T, Kind>(
   context: &LemmyContext,
 ) -> Result<(), LemmyError>
 where
-  T: AsObject<Kind> + Extends<Kind>,
+  T: AsObject<Kind> + Extends<Kind> + Debug + BaseExt<Kind>,
   Kind: Serialize,
   <T as Extends<Kind>>::Error: From<serde_json::Error> + Send + Sync + 'static,
 {
   if check_is_apub_id_valid(&to).is_ok() {
+    debug!("Sending activity {:?} to {}", &activity.id_unchecked(), &to);
     send_activity_internal(
       context.activity_queue(),
       activity,
@@ -62,7 +63,7 @@ pub async fn send_to_community_followers<T, Kind>(
   sender_shared_inbox: Option<Url>,
 ) -> Result<(), LemmyError>
 where
-  T: AsObject<Kind> + Extends<Kind>,
+  T: AsObject<Kind> + Extends<Kind> + Debug + BaseExt<Kind>,
   Kind: Serialize,
   <T as Extends<Kind>>::Error: From<serde_json::Error> + Send + Sync + 'static,
 {
@@ -79,6 +80,11 @@ where
     .unique()
     .map(|inbox| inbox.to_owned())
     .collect();
+  debug!(
+    "Sending activity {:?} to followers of {}",
+    &activity.id_unchecked(),
+    &community.actor_id
+  );
 
   send_activity_internal(
     context.activity_queue(),
@@ -100,7 +106,7 @@ pub async fn send_to_community<T, Kind>(
   context: &LemmyContext,
 ) -> Result<(), LemmyError>
 where
-  T: AsObject<Kind> + Extends<Kind>,
+  T: AsObject<Kind> + Extends<Kind> + Debug + BaseExt<Kind>,
   Kind: Serialize,
   <T as Extends<Kind>>::Error: From<serde_json::Error> + Send + Sync + 'static,
 {
@@ -110,6 +116,11 @@ where
   } else {
     let inbox = community.get_shared_inbox_url()?;
     check_is_apub_id_valid(&inbox)?;
+    debug!(
+      "Sending activity {:?} to community {}",
+      &activity.id_unchecked(),
+      &community.actor_id
+    );
     send_activity_internal(
       context.activity_queue(),
       activity,
@@ -131,10 +142,16 @@ pub async fn send_comment_mentions<T, Kind>(
   context: &LemmyContext,
 ) -> Result<(), LemmyError>
 where
-  T: AsObject<Kind> + Extends<Kind>,
+  T: AsObject<Kind> + Extends<Kind> + Debug + BaseExt<Kind>,
   Kind: Serialize,
   <T as Extends<Kind>>::Error: From<serde_json::Error> + Send + Sync + 'static,
 {
+  dbg!(&mentions, &activity.id_unchecked());
+  debug!(
+    "Sending mentions activity {:?} to {:?}",
+    &activity.id_unchecked(),
+    &mentions
+  );
   let mentions = mentions
     .iter()
     .filter(|inbox| check_is_apub_id_valid(inbox).is_ok())
@@ -165,7 +182,7 @@ async fn send_activity_internal<T, Kind>(
   insert_into_db: bool,
 ) -> Result<(), LemmyError>
 where
-  T: AsObject<Kind> + Extends<Kind>,
+  T: AsObject<Kind> + Extends<Kind> + Debug,
   Kind: Serialize,
   <T as Extends<Kind>>::Error: From<serde_json::Error> + Send + Sync + 'static,
 {
index 35be5522e2ef14b599ea13c26e88a8a59cc8a38b..33ad1d8a16ef023b6f37a05ae25f7901e911997d 100644 (file)
@@ -506,12 +506,7 @@ async fn collect_non_local_mentions_and_addresses(
     }
   }
 
-  let mut inboxes: Vec<Url> = vec![];
-  if !community.local {
-    inboxes.push(community.get_shared_inbox_url()?);
-  }
-  inboxes.extend(mention_inboxes);
-  inboxes = inboxes.into_iter().unique().collect();
+  let inboxes = mention_inboxes.into_iter().unique().collect();
 
   Ok(MentionsAndAddresses {
     addressed_ccs,
index ee75fa005fa758cf75e3ed1e7f1a56dad2373054..d979e27fe7c44f359532296091bda7e0d35bfc4f 100644 (file)
@@ -57,14 +57,16 @@ pub async fn community_inbox(
       .into(),
     );
   }
-  debug!(
-    "Community {} received activity {:?}",
-    &community.name, &activity
-  );
   let user_uri = activity
     .actor()?
     .as_single_xsd_any_uri()
     .context(location_info!())?;
+  debug!(
+    "Community {} inbox received activity {:?} from {}",
+    community.name,
+    &activity.id_unchecked(),
+    &user_uri
+  );
   check_is_apub_id_valid(user_uri)?;
 
   let user = get_or_fetch_and_upsert_user(&user_uri, &context).await?;
index 677ceadf9b59e9a5e014dd0251bcdead58896e2c..2d69336fd26b4dcb854a1f42aab7f0e7ec9087a7 100644 (file)
@@ -60,17 +60,17 @@ pub async fn shared_inbox(
 ) -> Result<HttpResponse, LemmyError> {
   let activity = input.into_inner();
 
-  let json = serde_json::to_string_pretty(&activity)?;
-  debug!("Shared inbox received activity: {}", json);
-
-  // TODO: if we already received an activity with identical ID, then ignore this (same in other inboxes)
-
   let sender = &activity
     .actor()?
     .to_owned()
     .single_xsd_any_uri()
     .context(location_info!())?;
   let community = get_community_id_from_activity(&activity)?;
+  debug!(
+    "Shared inbox received activity {:?} from {}",
+    &activity.id_unchecked(),
+    &sender
+  );
 
   check_is_apub_id_valid(sender)?;
   check_is_apub_id_valid(&community)?;
index a7050c45cc01fa8d46d7219fba6618e81dbe6dd6..c411f5b7af8e5a4ff0af4933c0d59c5408065573 100644 (file)
@@ -50,12 +50,17 @@ pub async fn user_inbox(
 ) -> Result<HttpResponse, LemmyError> {
   let activity = input.into_inner();
   let username = path.into_inner();
-  debug!("User {} received activity: {:?}", &username, &activity);
 
   let actor_uri = activity
     .actor()?
     .as_single_xsd_any_uri()
     .context(location_info!())?;
+  debug!(
+    "User {} inbox received activity {:?} from {}",
+    username,
+    &activity.id_unchecked(),
+    &actor_uri
+  );
 
   check_is_apub_id_valid(actor_uri)?;