]> Untitled Git - lemmy.git/blobdiff - crates/apub/src/activities/create_or_update/private_message.rs
Moving settings to Database. (#2492)
[lemmy.git] / crates / apub / src / activities / create_or_update / private_message.rs
index acd50a1aa18705a5a6201f97f93696e7fbe508ff..20310bc4114a089a3b0c37be3a1de3aedf7113de 100644 (file)
@@ -1,5 +1,7 @@
 use crate::{
   activities::{generate_activity_id, send_lemmy_activity, verify_person},
+  check_apub_id_valid,
+  fetch_local_site_data,
   objects::{person::ApubPerson, private_message::ApubPrivateMessage},
   protocol::activities::{
     create_or_update::private_message::CreateOrUpdatePrivateMessage,
@@ -10,7 +12,7 @@ use crate::{
 use activitypub_federation::{
   core::object_id::ObjectId,
   data::Data,
-  traits::{ActivityHandler, ApubObject},
+  traits::{ActivityHandler, Actor, ApubObject},
   utils::verify_domains_match,
 };
 use lemmy_api_common::utils::blocking;
@@ -40,13 +42,13 @@ impl CreateOrUpdatePrivateMessage {
     let create_or_update = CreateOrUpdatePrivateMessage {
       id: id.clone(),
       actor: ObjectId::new(actor.actor_id()),
-      to: ObjectId::new(recipient.actor_id()),
+      to: [ObjectId::new(recipient.actor_id())],
       object: private_message.into_apub(context).await?,
       kind,
       unparsed: Default::default(),
     };
-    let inbox = vec![recipient.shared_inbox_or_inbox_url()];
-    send_lemmy_activity(context, &create_or_update, &id, actor, inbox, true).await
+    let inbox = vec![recipient.shared_inbox_or_inbox()];
+    send_lemmy_activity(context, create_or_update, actor, inbox, true).await
   }
 }
 
@@ -69,9 +71,13 @@ impl ActivityHandler for CreateOrUpdatePrivateMessage {
     context: &Data<LemmyContext>,
     request_counter: &mut i32,
   ) -> Result<(), LemmyError> {
+    let local_site_data = blocking(context.pool(), fetch_local_site_data).await??;
+    check_apub_id_valid(self.id(), &local_site_data, context.settings())
+      .map_err(LemmyError::from_message)?;
+
     verify_person(&self.actor, context, request_counter).await?;
     verify_domains_match(self.actor.inner(), self.object.id.inner())?;
-    verify_domains_match(self.to.inner(), self.object.to.inner())?;
+    verify_domains_match(self.to[0].inner(), self.object.to[0].inner())?;
     ApubPrivateMessage::verify(&self.object, self.actor.inner(), context, request_counter).await?;
     Ok(())
   }