]> Untitled Git - lemmy.git/blobdiff - crates/apub/src/http/person.rs
Federation tests replication round1 - demonstrate absent replication of comment delet...
[lemmy.git] / crates / apub / src / http / person.rs
index f887b26520e38163296a4ee7c3aaf55a27019296..2543136348dd185e858be07cbf53932676f3ab48 100644 (file)
@@ -1,17 +1,20 @@
 use crate::{
   activity_lists::PersonInboxActivities,
   fetcher::user_or_community::UserOrCommunity,
-  generate_outbox_url,
-  http::{create_apub_response, create_apub_tombstone_response, receive_lemmy_activity},
+  http::{create_apub_response, create_apub_tombstone_response},
   objects::person::ApubPerson,
   protocol::collections::empty_outbox::EmptyOutbox,
 };
-use activitypub_federation::{deser::context::WithContext, traits::ApubObject};
-use actix_web::{web, HttpRequest, HttpResponse};
-use lemmy_api_common::utils::blocking;
+use activitypub_federation::{
+  actix_web::inbox::receive_activity,
+  config::Data,
+  protocol::context::WithContext,
+  traits::Object,
+};
+use actix_web::{web, web::Bytes, HttpRequest, HttpResponse};
+use lemmy_api_common::{context::LemmyContext, utils::generate_outbox_url};
 use lemmy_db_schema::{source::person::Person, traits::ApubActor};
 use lemmy_utils::error::LemmyError;
-use lemmy_websocket::LemmyContext;
 use serde::Deserialize;
 
 #[derive(Deserialize)]
@@ -23,33 +26,31 @@ pub struct PersonQuery {
 #[tracing::instrument(skip_all)]
 pub(crate) async fn get_apub_person_http(
   info: web::Path<PersonQuery>,
-  context: web::Data<LemmyContext>,
+  context: Data<LemmyContext>,
 ) -> Result<HttpResponse, LemmyError> {
   let user_name = info.into_inner().user_name;
   // TODO: this needs to be able to read deleted persons, so that it can send tombstones
-  let person: ApubPerson = blocking(context.pool(), move |conn| {
-    Person::read_from_name(conn, &user_name)
-  })
-  .await??
-  .into();
+  let person: ApubPerson = Person::read_from_name(&mut context.pool(), &user_name, true)
+    .await?
+    .into();
 
   if !person.deleted {
-    let apub = person.into_apub(&context).await?;
+    let apub = person.into_json(&context).await?;
 
-    Ok(create_apub_response(&apub))
+    create_apub_response(&apub)
   } else {
-    Ok(create_apub_tombstone_response(person.actor_id.clone()))
+    create_apub_tombstone_response(person.actor_id.clone())
   }
 }
 
 #[tracing::instrument(skip_all)]
 pub async fn person_inbox(
   request: HttpRequest,
-  payload: String,
-  context: web::Data<LemmyContext>,
+  body: Bytes,
+  data: Data<LemmyContext>,
 ) -> Result<HttpResponse, LemmyError> {
-  receive_lemmy_activity::<WithContext<PersonInboxActivities>, UserOrCommunity>(
-    request, payload, context,
+  receive_activity::<WithContext<PersonInboxActivities>, UserOrCommunity, LemmyContext>(
+    request, body, &data,
   )
   .await
 }
@@ -57,13 +58,10 @@ pub async fn person_inbox(
 #[tracing::instrument(skip_all)]
 pub(crate) async fn get_apub_person_outbox(
   info: web::Path<PersonQuery>,
-  context: web::Data<LemmyContext>,
+  context: Data<LemmyContext>,
 ) -> Result<HttpResponse, LemmyError> {
-  let person = blocking(context.pool(), move |conn| {
-    Person::read_from_name(conn, &info.user_name)
-  })
-  .await??;
+  let person = Person::read_from_name(&mut context.pool(), &info.user_name, false).await?;
   let outbox_id = generate_outbox_url(&person.actor_id)?.into();
-  let outbox = EmptyOutbox::new(outbox_id).await?;
-  Ok(create_apub_response(&outbox))
+  let outbox = EmptyOutbox::new(outbox_id)?;
+  create_apub_response(&outbox)
 }