Separate federated_instances into its own endpoint. Fixes #1931 (#2813)

This commit is contained in:
Dessalines 2023-04-16 17:00:31 -04:00 committed by GitHub
parent 90c6dc2732
commit 33ba1fc623
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 56 additions and 7 deletions

View file

@ -0,0 +1,29 @@
use crate::Perform;
use actix_web::web::Data;
use lemmy_api_common::{
context::LemmyContext,
site::{GetFederatedInstances, GetFederatedInstancesResponse},
utils::build_federated_instances,
};
use lemmy_db_views::structs::SiteView;
use lemmy_utils::{error::LemmyError, ConnectionId};
#[async_trait::async_trait(?Send)]
impl Perform for GetFederatedInstances {
type Response = GetFederatedInstancesResponse;
#[tracing::instrument(skip(context, _websocket_id))]
async fn perform(
&self,
context: &Data<LemmyContext>,
_websocket_id: Option<ConnectionId>,
) -> Result<Self::Response, LemmyError> {
let site_view = SiteView::read_local(context.pool()).await?;
let federated_instances =
build_federated_instances(&site_view.local_site, context.pool()).await?;
Ok(Self::Response {
federated_instances,
})
}
}

View file

@ -73,7 +73,6 @@ impl Perform for LeaveAdmin {
online: 0, online: 0,
version: version::VERSION.to_string(), version: version::VERSION.to_string(),
my_user: None, my_user: None,
federated_instances: None,
all_languages, all_languages,
discussion_languages, discussion_languages,
taglines, taglines,

View file

@ -1,3 +1,4 @@
mod federated_instances;
mod leave_admin; mod leave_admin;
mod mod_log; mod mod_log;
mod purge; mod purge;

View file

@ -222,13 +222,20 @@ pub struct GetSiteResponse {
pub online: usize, pub online: usize,
pub version: String, pub version: String,
pub my_user: Option<MyUserInfo>, pub my_user: Option<MyUserInfo>,
pub federated_instances: Option<FederatedInstances>, // Federation may be disabled
pub all_languages: Vec<Language>, pub all_languages: Vec<Language>,
pub discussion_languages: Vec<LanguageId>, pub discussion_languages: Vec<LanguageId>,
pub taglines: Vec<Tagline>, pub taglines: Vec<Tagline>,
pub custom_emojis: Vec<CustomEmojiView>, pub custom_emojis: Vec<CustomEmojiView>,
} }
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct GetFederatedInstances {}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct GetFederatedInstancesResponse {
pub federated_instances: Option<FederatedInstances>, // Federation may be disabled
}
#[derive(Debug, Serialize, Deserialize, Clone)] #[derive(Debug, Serialize, Deserialize, Clone)]
pub struct MyUserInfo { pub struct MyUserInfo {
pub local_user_view: LocalUserView, pub local_user_view: LocalUserView,

View file

@ -94,6 +94,7 @@ pub enum UserOperation {
PurgeCommunity, PurgeCommunity,
PurgePost, PurgePost,
PurgeComment, PurgeComment,
GetFederatedInstances,
} }
#[derive(EnumString, Display, Debug, Clone)] #[derive(EnumString, Display, Debug, Clone)]

View file

@ -3,7 +3,7 @@ use actix_web::web::Data;
use lemmy_api_common::{ use lemmy_api_common::{
context::LemmyContext, context::LemmyContext,
site::{GetSite, GetSiteResponse, MyUserInfo}, site::{GetSite, GetSiteResponse, MyUserInfo},
utils::{build_federated_instances, get_local_user_settings_view_from_jwt_opt}, utils::get_local_user_settings_view_from_jwt_opt,
websocket::handlers::online_users::GetUsersOnline, websocket::handlers::online_users::GetUsersOnline,
}; };
use lemmy_db_schema::source::{ use lemmy_db_schema::source::{
@ -84,9 +84,6 @@ impl PerformCrud for GetSite {
None None
}; };
let federated_instances =
build_federated_instances(&site_view.local_site, context.pool()).await?;
let all_languages = Language::read_all(context.pool()).await?; let all_languages = Language::read_all(context.pool()).await?;
let discussion_languages = SiteLanguage::read_local_raw(context.pool()).await?; let discussion_languages = SiteLanguage::read_local_raw(context.pool()).await?;
let taglines = Tagline::get_all(context.pool(), site_view.local_site.id).await?; let taglines = Tagline::get_all(context.pool(), site_view.local_site.id).await?;
@ -98,7 +95,6 @@ impl PerformCrud for GetSite {
online, online,
version: version::VERSION.to_string(), version: version::VERSION.to_string(),
my_user, my_user,
federated_instances,
all_languages, all_languages,
discussion_languages, discussion_languages,
taglines, taglines,

View file

@ -93,6 +93,8 @@ use lemmy_api_common::{
ApproveRegistrationApplication, ApproveRegistrationApplication,
CreateSite, CreateSite,
EditSite, EditSite,
GetFederatedInstances,
GetFederatedInstancesResponse,
GetModlog, GetModlog,
GetModlogResponse, GetModlogResponse,
GetSite, GetSite,
@ -373,3 +375,7 @@ impl SendActivity for EditCustomEmoji {
impl SendActivity for DeleteCustomEmoji { impl SendActivity for DeleteCustomEmoji {
type Response = DeleteCustomEmojiResponse; type Response = DeleteCustomEmojiResponse;
} }
impl SendActivity for GetFederatedInstances {
type Response = GetFederatedInstancesResponse;
}

View file

@ -86,6 +86,7 @@ use lemmy_api_common::{
ApproveRegistrationApplication, ApproveRegistrationApplication,
CreateSite, CreateSite,
EditSite, EditSite,
GetFederatedInstances,
GetModlog, GetModlog,
GetSite, GetSite,
GetUnreadRegistrationApplicationCount, GetUnreadRegistrationApplicationCount,
@ -165,6 +166,11 @@ pub fn config(cfg: &mut web::ServiceConfig, rate_limit: &RateLimitCell) {
.route("/join", web::post().to(route_post::<CommunityJoin>)) .route("/join", web::post().to(route_post::<CommunityJoin>))
.route("/mod/join", web::post().to(route_post::<ModJoin>)), .route("/mod/join", web::post().to(route_post::<ModJoin>)),
) )
.service(
web::scope("/federated_instances")
.wrap(rate_limit.message())
.route("", web::get().to(route_get::<GetFederatedInstances>)),
)
// Post // Post
.service( .service(
// Handle POST to /post separately to add the post() rate limitter // Handle POST to /post separately to add the post() rate limitter

View file

@ -98,6 +98,7 @@ use lemmy_api_common::{
ApproveRegistrationApplication, ApproveRegistrationApplication,
CreateSite, CreateSite,
EditSite, EditSite,
GetFederatedInstances,
GetModlog, GetModlog,
GetSite, GetSite,
GetUnreadRegistrationApplicationCount, GetUnreadRegistrationApplicationCount,
@ -640,6 +641,9 @@ pub async fn match_websocket_operation(
do_websocket_operation::<TransferCommunity>(context, id, op, data).await do_websocket_operation::<TransferCommunity>(context, id, op, data).await
} }
UserOperation::LeaveAdmin => do_websocket_operation::<LeaveAdmin>(context, id, op, data).await, UserOperation::LeaveAdmin => do_websocket_operation::<LeaveAdmin>(context, id, op, data).await,
UserOperation::GetFederatedInstances => {
do_websocket_operation::<GetFederatedInstances>(context, id, op, data).await
}
// Community ops // Community ops
UserOperation::FollowCommunity => { UserOperation::FollowCommunity => {