]> Untitled Git - lemmy.git/commitdiff
Add /activities endpoint (ref #1220)
authorFelix Ableitner <me@nutomic.com>
Fri, 23 Oct 2020 13:02:45 +0000 (15:02 +0200)
committerFelix Ableitner <me@nutomic.com>
Mon, 26 Oct 2020 11:54:27 +0000 (12:54 +0100)
lemmy_apub/src/activities/send/mod.rs
lemmy_apub/src/http/mod.rs
migrations/2020-10-23-115011_activity_ap_id_column/down.sql [new file with mode: 0644]
migrations/2020-10-23-115011_activity_ap_id_column/up.sql [new file with mode: 0644]
src/routes/federation.rs

index fe898bd8f2ee795b426760db5a382bdead167f06..537103b6a22830d04a0fbd51b0b5b26ca082bcb6 100644 (file)
@@ -15,7 +15,7 @@ where
   T: ToString,
 {
   let id = format!(
-    "{}/receive/{}/{}",
+    "{}/activities/{}/{}",
     Settings::get().get_protocol_and_hostname(),
     kind.to_string().to_lowercase(),
     Uuid::new_v4()
index 89d0b33bf8abce34a15b44ee7d4970a0ecdc35a3..9f6c766c266f15e6188c466852c9639bc7d57595 100644 (file)
@@ -1,6 +1,10 @@
 use crate::APUB_JSON_CONTENT_TYPE;
-use actix_web::{body::Body, HttpResponse};
-use serde::Serialize;
+use actix_web::{body::Body, web, HttpResponse};
+use lemmy_db::activity::Activity;
+use lemmy_structs::blocking;
+use lemmy_utils::{settings::Settings, LemmyError};
+use lemmy_websocket::LemmyContext;
+use serde::{Deserialize, Serialize};
 
 pub mod comment;
 pub mod community;
@@ -26,3 +30,29 @@ where
     .content_type(APUB_JSON_CONTENT_TYPE)
     .json(data)
 }
+
+#[derive(Deserialize)]
+pub struct CommunityQuery {
+  type_: String,
+  id: String,
+}
+
+/// Return the ActivityPub json representation of a local community over HTTP.
+pub async fn get_activity(
+  info: web::Path<CommunityQuery>,
+  context: web::Data<LemmyContext>,
+) -> Result<HttpResponse<Body>, LemmyError> {
+  let settings = Settings::get();
+  let activity_id = format!(
+    "{}/activities/{}/{}",
+    settings.get_protocol_and_hostname(),
+    info.type_,
+    info.id
+  );
+  let activity = blocking(context.pool(), move |conn| {
+    Activity::read_from_apub_id(&conn, &activity_id)
+  })
+  .await??;
+
+  Ok(create_apub_response(&activity.data))
+}
diff --git a/migrations/2020-10-23-115011_activity_ap_id_column/down.sql b/migrations/2020-10-23-115011_activity_ap_id_column/down.sql
new file mode 100644 (file)
index 0000000..7978df7
--- /dev/null
@@ -0,0 +1 @@
+ALTER TABLE activity DROP COLUMN ap_id;
\ No newline at end of file
diff --git a/migrations/2020-10-23-115011_activity_ap_id_column/up.sql b/migrations/2020-10-23-115011_activity_ap_id_column/up.sql
new file mode 100644 (file)
index 0000000..ab22a4c
--- /dev/null
@@ -0,0 +1 @@
+ALTER TABLE activity ADD COLUMN ap_id TEXT;
\ No newline at end of file
index 900631e51d7fcb2f5bf02b5faa2df6cbcb8a75ef..7a5e5946d4695ffcadb00b2c299fa6f18ebe6412 100644 (file)
@@ -4,6 +4,7 @@ use lemmy_apub::{
   http::{
     comment::get_apub_comment,
     community::{get_apub_community_followers, get_apub_community_http, get_apub_community_outbox},
+    get_activity,
     post::get_apub_post,
     user::get_apub_user_http,
   },
@@ -36,7 +37,8 @@ pub fn config(cfg: &mut web::ServiceConfig) {
           )
           .route("/u/{user_name}", web::get().to(get_apub_user_http))
           .route("/post/{post_id}", web::get().to(get_apub_post))
-          .route("/comment/{comment_id}", web::get().to(get_apub_comment)),
+          .route("/comment/{comment_id}", web::get().to(get_apub_comment))
+          .route("/activities/{type_}/{id}", web::get().to(get_activity)),
       )
       // Inboxes dont work with the header guard for some reason.
       .service(