]> Untitled Git - lemmy.git/blob - crates/apub/src/http/site.rs
676ce9bd660a97cc0924ec1cc59605523610aea5
[lemmy.git] / crates / apub / src / http / site.rs
1 use crate::{
2   activity_lists::SiteInboxActivities,
3   http::create_apub_response,
4   objects::{instance::ApubSite, person::ApubPerson},
5   protocol::collections::empty_outbox::EmptyOutbox,
6 };
7 use activitypub_federation::{
8   actix_web::inbox::receive_activity,
9   config::Data,
10   protocol::context::WithContext,
11   traits::Object,
12 };
13 use actix_web::{web::Bytes, HttpRequest, HttpResponse};
14 use lemmy_api_common::context::LemmyContext;
15 use lemmy_db_views::structs::SiteView;
16 use lemmy_utils::error::LemmyError;
17 use url::Url;
18
19 pub(crate) async fn get_apub_site_http(
20   context: Data<LemmyContext>,
21 ) -> Result<HttpResponse, LemmyError> {
22   let site: ApubSite = SiteView::read_local(context.pool()).await?.site.into();
23
24   let apub = site.into_json(&context).await?;
25   create_apub_response(&apub)
26 }
27
28 #[tracing::instrument(skip_all)]
29 pub(crate) async fn get_apub_site_outbox(
30   context: Data<LemmyContext>,
31 ) -> Result<HttpResponse, LemmyError> {
32   let outbox_id = format!(
33     "{}/site_outbox",
34     context.settings().get_protocol_and_hostname()
35   );
36   let outbox = EmptyOutbox::new(Url::parse(&outbox_id)?)?;
37   create_apub_response(&outbox)
38 }
39
40 #[tracing::instrument(skip_all)]
41 pub async fn get_apub_site_inbox(
42   request: HttpRequest,
43   body: Bytes,
44   data: Data<LemmyContext>,
45 ) -> Result<HttpResponse, LemmyError> {
46   receive_activity::<WithContext<SiteInboxActivities>, ApubPerson, LemmyContext>(
47     request, body, &data,
48   )
49   .await
50 }