mirror of
https://github.com/LemmyNet/lemmy.git
synced 2024-11-26 06:11:26 +00:00
Add allowed and blocked instances to the federated_instances response. (#1398)
- Fixes #1315
This commit is contained in:
parent
6bb4f0b41f
commit
0be9b5bddb
3 changed files with 32 additions and 18 deletions
|
@ -183,33 +183,38 @@ pub(crate) fn check_optional_url(item: &Option<Option<String>>) -> Result<(), Le
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) async fn linked_instances(pool: &DbPool) -> Result<Vec<String>, LemmyError> {
|
pub(crate) async fn build_federated_instances(
|
||||||
let mut instances: Vec<String> = Vec::new();
|
pool: &DbPool,
|
||||||
|
) -> Result<Option<FederatedInstances>, LemmyError> {
|
||||||
if Settings::get().federation.enabled {
|
if Settings::get().federation.enabled {
|
||||||
let distinct_communities = blocking(pool, move |conn| {
|
let distinct_communities = blocking(pool, move |conn| {
|
||||||
Community::distinct_federated_communities(conn)
|
Community::distinct_federated_communities(conn)
|
||||||
})
|
})
|
||||||
.await??;
|
.await??;
|
||||||
|
|
||||||
instances = distinct_communities
|
let allowed = Settings::get().get_allowed_instances();
|
||||||
|
let blocked = Settings::get().get_blocked_instances();
|
||||||
|
|
||||||
|
let mut linked = distinct_communities
|
||||||
.iter()
|
.iter()
|
||||||
.map(|actor_id| Ok(Url::parse(actor_id)?.host_str().unwrap_or("").to_string()))
|
.map(|actor_id| Ok(Url::parse(actor_id)?.host_str().unwrap_or("").to_string()))
|
||||||
.collect::<Result<Vec<String>, LemmyError>>()?;
|
.collect::<Result<Vec<String>, LemmyError>>()?;
|
||||||
|
|
||||||
instances.append(&mut Settings::get().get_allowed_instances());
|
linked.extend_from_slice(&allowed);
|
||||||
instances.retain(|a| {
|
linked.retain(|a| !blocked.contains(a) && !a.eq("") && !a.eq(&Settings::get().hostname));
|
||||||
!Settings::get().get_blocked_instances().contains(a)
|
|
||||||
&& !a.eq("")
|
|
||||||
&& !a.eq(&Settings::get().hostname)
|
|
||||||
});
|
|
||||||
|
|
||||||
// Sort and remove dupes
|
// Sort and remove dupes
|
||||||
instances.sort_unstable();
|
linked.sort_unstable();
|
||||||
instances.dedup();
|
linked.dedup();
|
||||||
}
|
|
||||||
|
|
||||||
Ok(instances)
|
Ok(Some(FederatedInstances {
|
||||||
|
linked,
|
||||||
|
allowed,
|
||||||
|
blocked,
|
||||||
|
}))
|
||||||
|
} else {
|
||||||
|
Ok(None)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn match_websocket_operation(
|
pub async fn match_websocket_operation(
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
use crate::{
|
use crate::{
|
||||||
|
build_federated_instances,
|
||||||
get_user_from_jwt,
|
get_user_from_jwt,
|
||||||
get_user_from_jwt_opt,
|
get_user_from_jwt_opt,
|
||||||
get_user_safe_settings_from_jwt,
|
get_user_safe_settings_from_jwt,
|
||||||
get_user_safe_settings_from_jwt_opt,
|
get_user_safe_settings_from_jwt_opt,
|
||||||
is_admin,
|
is_admin,
|
||||||
linked_instances,
|
|
||||||
version,
|
version,
|
||||||
Perform,
|
Perform,
|
||||||
};
|
};
|
||||||
|
@ -324,6 +324,7 @@ impl Perform for GetSite {
|
||||||
.unwrap_or(1);
|
.unwrap_or(1);
|
||||||
|
|
||||||
let my_user = get_user_safe_settings_from_jwt_opt(&data.auth, context.pool()).await?;
|
let my_user = get_user_safe_settings_from_jwt_opt(&data.auth, context.pool()).await?;
|
||||||
|
let federated_instances = build_federated_instances(context.pool()).await?;
|
||||||
|
|
||||||
Ok(GetSiteResponse {
|
Ok(GetSiteResponse {
|
||||||
site_view,
|
site_view,
|
||||||
|
@ -332,7 +333,7 @@ impl Perform for GetSite {
|
||||||
online,
|
online,
|
||||||
version: version::VERSION.to_string(),
|
version: version::VERSION.to_string(),
|
||||||
my_user,
|
my_user,
|
||||||
federated_instances: linked_instances(context.pool()).await?,
|
federated_instances,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -550,6 +551,7 @@ impl Perform for TransferSite {
|
||||||
admins.insert(0, creator_user);
|
admins.insert(0, creator_user);
|
||||||
|
|
||||||
let banned = blocking(context.pool(), move |conn| UserViewSafe::banned(conn)).await??;
|
let banned = blocking(context.pool(), move |conn| UserViewSafe::banned(conn)).await??;
|
||||||
|
let federated_instances = build_federated_instances(context.pool()).await?;
|
||||||
|
|
||||||
Ok(GetSiteResponse {
|
Ok(GetSiteResponse {
|
||||||
site_view: Some(site_view),
|
site_view: Some(site_view),
|
||||||
|
@ -558,7 +560,7 @@ impl Perform for TransferSite {
|
||||||
online: 0,
|
online: 0,
|
||||||
version: version::VERSION.to_string(),
|
version: version::VERSION.to_string(),
|
||||||
my_user: Some(user),
|
my_user: Some(user),
|
||||||
federated_instances: linked_instances(context.pool()).await?,
|
federated_instances,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -106,7 +106,7 @@ pub struct GetSiteResponse {
|
||||||
pub online: usize,
|
pub online: usize,
|
||||||
pub version: String,
|
pub version: String,
|
||||||
pub my_user: Option<UserSafeSettings>,
|
pub my_user: Option<UserSafeSettings>,
|
||||||
pub federated_instances: Vec<String>,
|
pub federated_instances: Option<FederatedInstances>, // Federation may be disabled
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
|
@ -130,3 +130,10 @@ pub struct SaveSiteConfig {
|
||||||
pub config_hjson: String,
|
pub config_hjson: String,
|
||||||
pub auth: String,
|
pub auth: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize)]
|
||||||
|
pub struct FederatedInstances {
|
||||||
|
pub linked: Vec<String>,
|
||||||
|
pub allowed: Vec<String>,
|
||||||
|
pub blocked: Vec<String>,
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue