mirror of
https://github.com/LemmyNet/lemmy.git
synced 2024-11-29 21:01:03 +00:00
Add /activities endpoint (ref #1220)
This commit is contained in:
parent
6d17d5ead2
commit
99abc49040
5 changed files with 38 additions and 4 deletions
|
@ -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()
|
||||||
|
|
|
@ -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))
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
ALTER TABLE activity DROP COLUMN ap_id;
|
|
@ -0,0 +1 @@
|
||||||
|
ALTER TABLE activity ADD COLUMN ap_id TEXT;
|
|
@ -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(
|
||||||
|
|
Loading…
Reference in a new issue