Add /activities endpoint (ref #1220)

This commit is contained in:
Felix Ableitner 2020-10-23 15:02:45 +02:00
parent 6d17d5ead2
commit 99abc49040
5 changed files with 38 additions and 4 deletions

View file

@ -15,7 +15,7 @@ where
T: ToString, T: ToString,
{ {
let id = format!( let id = format!(
"{}/receive/{}/{}", "{}/activities/{}/{}",
Settings::get().get_protocol_and_hostname(), Settings::get().get_protocol_and_hostname(),
kind.to_string().to_lowercase(), kind.to_string().to_lowercase(),
Uuid::new_v4() Uuid::new_v4()

View file

@ -1,6 +1,10 @@
use crate::APUB_JSON_CONTENT_TYPE; use crate::APUB_JSON_CONTENT_TYPE;
use actix_web::{body::Body, HttpResponse}; use actix_web::{body::Body, web, HttpResponse};
use serde::Serialize; 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 comment;
pub mod community; pub mod community;
@ -26,3 +30,29 @@ where
.content_type(APUB_JSON_CONTENT_TYPE) .content_type(APUB_JSON_CONTENT_TYPE)
.json(data) .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))
}

View file

@ -0,0 +1 @@
ALTER TABLE activity DROP COLUMN ap_id;

View file

@ -0,0 +1 @@
ALTER TABLE activity ADD COLUMN ap_id TEXT;

View file

@ -4,6 +4,7 @@ use lemmy_apub::{
http::{ http::{
comment::get_apub_comment, comment::get_apub_comment,
community::{get_apub_community_followers, get_apub_community_http, get_apub_community_outbox}, community::{get_apub_community_followers, get_apub_community_http, get_apub_community_outbox},
get_activity,
post::get_apub_post, post::get_apub_post,
user::get_apub_user_http, 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("/u/{user_name}", web::get().to(get_apub_user_http))
.route("/post/{post_id}", web::get().to(get_apub_post)) .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. // Inboxes dont work with the header guard for some reason.
.service( .service(