]> Untitled Git - lemmy.git/commitdiff
Create empty outbox for user (ref #1220)
authorFelix Ableitner <me@nutomic.com>
Wed, 18 Nov 2020 16:04:35 +0000 (17:04 +0100)
committerFelix Ableitner <me@nutomic.com>
Thu, 26 Nov 2020 12:24:12 +0000 (13:24 +0100)
lemmy_apub/src/http/user.rs
lemmy_apub/src/objects/user.rs
src/routes/federation.rs

index 85a5f22ccf62bccee3b4906cc4596a5ce61e6e52..f983ab6f9f5c28939f647f2008182ad74ea7b4c7 100644 (file)
@@ -1,10 +1,15 @@
-use crate::{http::create_apub_response, ToApub};
+use crate::{http::create_apub_response, ActorType, ToApub};
+use activitystreams::{
+  base::BaseExt,
+  collection::{CollectionExt, OrderedCollection},
+};
 use actix_web::{body::Body, web, HttpResponse};
 use lemmy_db::user::User_;
 use lemmy_structs::blocking;
 use lemmy_utils::LemmyError;
 use lemmy_websocket::LemmyContext;
 use serde::Deserialize;
+use url::Url;
 
 #[derive(Deserialize)]
 pub struct UserQuery {
@@ -24,3 +29,20 @@ pub async fn get_apub_user_http(
   let u = user.to_apub(context.pool()).await?;
   Ok(create_apub_response(&u))
 }
+
+pub async fn get_apub_user_outbox(
+  info: web::Path<UserQuery>,
+  context: web::Data<LemmyContext>,
+) -> Result<HttpResponse<Body>, LemmyError> {
+  let user = blocking(context.pool(), move |conn| {
+    User_::read_from_name(&conn, &info.user_name)
+  })
+  .await??;
+  let mut collection = OrderedCollection::new();
+  collection
+    .set_many_items(Vec::<Url>::new())
+    .set_context(activitystreams::context())
+    .set_id(user.get_outbox_url()?)
+    .set_total_items(0_u64);
+  Ok(create_apub_response(&collection))
+}
index 3c41b55848706e47f32719ec7725451114e09478..49b7c9e5c5783389d8309f602cfa5975ec23586b 100644 (file)
@@ -55,11 +55,13 @@ impl ToApub for User_ {
     }
 
     let mut ap_actor = ApActor::new(self.get_inbox_url()?, person);
-    ap_actor.set_preferred_username(self.name.to_owned());
-    ap_actor.set_endpoints(Endpoints {
-      shared_inbox: Some(self.get_shared_inbox_url()?),
-      ..Default::default()
-    });
+    ap_actor
+      .set_preferred_username(self.name.to_owned())
+      .set_outbox(self.get_outbox_url()?)
+      .set_endpoints(Endpoints {
+        shared_inbox: Some(self.get_shared_inbox_url()?),
+        ..Default::default()
+      });
 
     Ok(Ext1::new(ap_actor, self.get_public_key_ext()?))
   }
index 96b380e61792f4c3f592771a207a12d94c6a4065..4d03de770231b3100c79fa2a7a54f6b1210cd716 100644 (file)
@@ -6,7 +6,7 @@ use lemmy_apub::{
     community::{get_apub_community_followers, get_apub_community_http, get_apub_community_outbox},
     get_activity,
     post::get_apub_post,
-    user::get_apub_user_http,
+    user::{get_apub_user_http, get_apub_user_outbox},
   },
   inbox::{community_inbox::community_inbox, shared_inbox::shared_inbox, user_inbox::user_inbox},
   APUB_JSON_CONTENT_TYPE,
@@ -42,6 +42,7 @@ pub fn config(cfg: &mut web::ServiceConfig) {
             web::get().to(get_apub_community_outbox),
           )
           .route("/u/{user_name}", web::get().to(get_apub_user_http))
+          .route("/u/{user_name}/outbox", web::get().to(get_apub_user_outbox))
           .route("/post/{post_id}", web::get().to(get_apub_post))
           .route("/comment/{comment_id}", web::get().to(get_apub_comment))
           .route("/activities/{type_}/{id}", web::get().to(get_activity)),