From e0381df88aa85415e17f330ed6863c2881a7e6ae Mon Sep 17 00:00:00 2001 From: Nutomic Date: Wed, 13 Apr 2022 16:37:54 +0000 Subject: [PATCH] Expose remote site info in GetCommunity API (fixes #2208) (#2210) * Expose remote site info in GetCommunity API (fixes #2208) * use instance_actor_id_from_url() --- crates/api/src/community.rs | 1 + crates/api_common/src/community.rs | 6 +++++- crates/api_crud/src/community/read.rs | 21 +++++++++++++++++++-- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/crates/api/src/community.rs b/crates/api/src/community.rs index d71ef7fa0..82ee80723 100644 --- a/crates/api/src/community.rs +++ b/crates/api/src/community.rs @@ -505,6 +505,7 @@ impl Perform for TransferCommunity { // Return the jwt Ok(GetCommunityResponse { community_view, + site: None, moderators, online: 0, }) diff --git a/crates/api_common/src/community.rs b/crates/api_common/src/community.rs index fbfe3c660..4b9209d6a 100644 --- a/crates/api_common/src/community.rs +++ b/crates/api_common/src/community.rs @@ -1,4 +1,7 @@ -use lemmy_db_schema::newtypes::{CommunityId, PersonId}; +use lemmy_db_schema::{ + newtypes::{CommunityId, PersonId}, + source::site::Site, +}; use lemmy_db_views_actor::{ community_moderator_view::CommunityModeratorView, community_view::CommunityView, @@ -18,6 +21,7 @@ pub struct GetCommunity { #[derive(Debug, Serialize, Deserialize)] pub struct GetCommunityResponse { pub community_view: CommunityView, + pub site: Option, pub moderators: Vec, pub online: usize, } diff --git a/crates/api_crud/src/community/read.rs b/crates/api_crud/src/community/read.rs index de567c1fb..d4a28b781 100644 --- a/crates/api_crud/src/community/read.rs +++ b/crates/api_crud/src/community/read.rs @@ -6,10 +6,13 @@ use lemmy_api_common::{ community::*, get_local_user_view_from_jwt_opt, }; -use lemmy_apub::{fetcher::resolve_actor_identifier, objects::community::ApubCommunity}; +use lemmy_apub::{ + fetcher::resolve_actor_identifier, + objects::{community::ApubCommunity, instance::instance_actor_id_from_url}, +}; use lemmy_db_schema::{ from_opt_str_to_opt_enum, - source::community::Community, + source::{community::Community, site::Site}, traits::DeleteableOrRemoveable, ListingType, SortType, @@ -75,8 +78,22 @@ impl PerformCrud for GetCommunity { .await .unwrap_or(1); + let site_id = instance_actor_id_from_url(community_view.community.actor_id.clone().into()); + let mut site: Option = blocking(context.pool(), move |conn| { + Site::read_from_apub_id(conn, site_id) + }) + .await??; + // no need to include metadata for local site (its already available through other endpoints). + // this also prevents us from leaking the federation private key. + if let Some(s) = &site { + if s.actor_id.domain() == Some(context.settings().hostname.as_ref()) { + site = None; + } + } + let res = GetCommunityResponse { community_view, + site, moderators, online, };