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;
.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))
+}
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,
},
)
.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(