de-global server_is_ours / user_is_local

Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
Jason Volk 2024-07-22 07:43:51 +00:00
parent 010e4ee35a
commit 59efabbbc2
34 changed files with 179 additions and 169 deletions

View file

@ -22,7 +22,7 @@ use ruma::{
use serde_json::value::to_raw_value;
use tokio::sync::{Mutex, RwLock};
use crate::{globals, rooms, rooms::state::RoomMutexGuard, user_is_local, Dep};
use crate::{globals, rooms, rooms::state::RoomMutexGuard, Dep};
pub struct Service {
services: Services,
@ -301,7 +301,7 @@ impl Service {
}
// only allow public escaped commands by local admins
if is_public_escape && !user_is_local(&pdu.sender) {
if is_public_escape && !self.services.globals.user_is_local(&pdu.sender) {
return false;
}

View file

@ -21,7 +21,7 @@ use ruma::{
use tokio::sync::Mutex;
use url::Url;
use crate::{service, services};
use crate::service;
pub struct Service {
pub db: Data,
@ -302,13 +302,11 @@ impl Service {
true
}
/// checks if `user_id` is local to us via server_name comparison
#[inline]
pub fn user_is_local(&self, user_id: &UserId) -> bool { self.server_is_ours(user_id.server_name()) }
#[inline]
pub fn server_is_ours(&self, server_name: &ServerName) -> bool { server_name == self.config.server_name }
}
#[inline]
#[must_use]
pub fn server_is_ours(server_name: &ServerName) -> bool { server_name == services().globals.config.server_name }
/// checks if `user_id` is local to us via server_name comparison
#[inline]
#[must_use]
pub fn user_is_local(user_id: &UserId) -> bool { server_is_ours(user_id.server_name()) }

View file

@ -33,10 +33,7 @@ use conduit::{Result, Server};
use database::Database;
pub(crate) use service::{Args, Dep, Service};
pub use crate::{
globals::{server_is_ours, user_is_local},
services::Services,
};
pub use crate::services::Services;
conduit::mod_ctor! {}
conduit::mod_dtor! {}

View file

@ -14,7 +14,7 @@ use serde::{Deserialize, Serialize};
use tokio::{sync::Mutex, time::sleep};
use self::data::Data;
use crate::{user_is_local, users, Dep};
use crate::{globals, users, Dep};
/// Represents data required to be kept in order to implement the presence
/// specification.
@ -80,6 +80,7 @@ pub struct Service {
struct Services {
server: Arc<Server>,
globals: Dep<globals::Service>,
users: Dep<users::Service>,
}
@ -93,6 +94,7 @@ impl crate::Service for Service {
Ok(Arc::new(Self {
services: Services {
server: args.server.clone(),
globals: args.depend::<globals::Service>("globals"),
users: args.depend::<users::Service>("users"),
},
db: Data::new(&args),
@ -185,7 +187,7 @@ impl Service {
self.db
.set_presence(user_id, presence_state, currently_active, last_active_ago, status_msg)?;
if self.timeout_remote_users || user_is_local(user_id) {
if self.timeout_remote_users || self.services.globals.user_is_local(user_id) {
let timeout = match presence_state {
PresenceState::Online => self.services.server.config.presence_idle_timeout_s,
_ => self.services.server.config.presence_offline_timeout_s,

View file

@ -14,7 +14,7 @@ use ruma::{
};
use self::data::Data;
use crate::{admin, appservice, appservice::RegistrationInfo, globals, rooms, sending, server_is_ours, Dep};
use crate::{admin, appservice, appservice::RegistrationInfo, globals, rooms, sending, Dep};
pub struct Service {
db: Data,
@ -85,7 +85,10 @@ impl Service {
pub async fn resolve_alias(
&self, room_alias: &RoomAliasId, servers: Option<&Vec<OwnedServerName>>,
) -> Result<(OwnedRoomId, Option<Vec<OwnedServerName>>)> {
if !server_is_ours(room_alias.server_name())
if !self
.services
.globals
.server_is_ours(room_alias.server_name())
&& (!servers
.as_ref()
.is_some_and(|servers| servers.contains(&self.services.globals.server_name().to_owned()))
@ -195,7 +198,11 @@ impl Service {
pub async fn appservice_checks(
&self, room_alias: &RoomAliasId, appservice_info: &Option<RegistrationInfo>,
) -> Result<()> {
if !server_is_ours(room_alias.server_name()) {
if !self
.services
.globals
.server_is_ours(room_alias.server_name())
{
return Err(Error::BadRequest(ErrorKind::InvalidParam, "Alias is from another server."));
}

View file

@ -12,7 +12,7 @@ use ruma::{
OwnedRoomId, OwnedServerName, OwnedUserId, RoomId, ServerName, UserId,
};
use crate::{appservice::RegistrationInfo, globals, user_is_local, users, Dep};
use crate::{appservice::RegistrationInfo, globals, users, Dep};
type StrippedStateEventIter<'a> = Box<dyn Iterator<Item = Result<(OwnedRoomId, Vec<Raw<AnyStrippedStateEvent>>)>> + 'a>;
type AnySyncStateEventIter<'a> = Box<dyn Iterator<Item = Result<(OwnedRoomId, Vec<Raw<AnySyncStateEvent>>)>> + 'a>;
@ -355,7 +355,7 @@ impl Data {
Box::new(
self.room_members(room_id)
.filter_map(Result::ok)
.filter(|user| user_is_local(user)),
.filter(|user| self.services.globals.user_is_local(user)),
)
}

View file

@ -21,7 +21,7 @@ use ruma::{
OwnedRoomId, OwnedServerName, OwnedUserId, RoomId, ServerName, UserId,
};
use crate::{account_data, appservice::RegistrationInfo, rooms, user_is_local, users, Dep};
use crate::{account_data, appservice::RegistrationInfo, globals, rooms, users, Dep};
pub struct Service {
services: Services,
@ -30,6 +30,7 @@ pub struct Service {
struct Services {
account_data: Dep<account_data::Service>,
globals: Dep<globals::Service>,
state_accessor: Dep<rooms::state_accessor::Service>,
users: Dep<users::Service>,
}
@ -39,6 +40,7 @@ impl crate::Service for Service {
Ok(Arc::new(Self {
services: Services {
account_data: args.depend::<account_data::Service>("account_data"),
globals: args.depend::<globals::Service>("globals"),
state_accessor: args.depend::<rooms::state_accessor::Service>("rooms::state_accessor"),
users: args.depend::<users::Service>("users"),
},
@ -65,7 +67,7 @@ impl Service {
// TODO: use futures to update remote profiles without blocking the membership
// update
#[allow(clippy::collapsible_if)]
if !user_is_local(user_id) {
if !self.services.globals.user_is_local(user_id) {
if !self.services.users.exists(user_id)? {
self.services.users.create(user_id, None)?;
}

View file

@ -41,7 +41,7 @@ use tokio::sync::RwLock;
use self::data::Data;
use crate::{
account_data, admin, appservice, appservice::NamespaceRegex, globals, pusher, rooms,
rooms::state_compressor::CompressedStateEvent, sending, server_is_ours, Dep,
rooms::state_compressor::CompressedStateEvent, sending, Dep,
};
// Update Relationships
@ -846,7 +846,7 @@ impl Service {
.state_cache
.room_members(room_id)
.filter_map(Result::ok)
.filter(|m| server_is_ours(m.server_name()) && m != target)
.filter(|m| self.services.globals.server_is_ours(m.server_name()) && m != target)
.count();
if count < 2 {
warn!("Last admin cannot leave from admins room");
@ -871,7 +871,7 @@ impl Service {
.state_cache
.room_members(room_id)
.filter_map(Result::ok)
.filter(|m| server_is_ours(m.server_name()) && m != target)
.filter(|m| self.services.globals.server_is_ours(m.server_name()) && m != target)
.count();
if count < 2 {
warn!("Last admin cannot be banned in admins room");
@ -1092,7 +1092,7 @@ impl Service {
.unwrap_or_default();
let room_mods = power_levels.users.iter().filter_map(|(user_id, level)| {
if level > &power_levels.users_default && !server_is_ours(user_id.server_name()) {
if level > &power_levels.users_default && !self.services.globals.user_is_local(user_id) {
Some(user_id.server_name().to_owned())
} else {
None
@ -1106,7 +1106,7 @@ impl Service {
.filter_map(|alias| {
alias
.ok()
.filter(|alias| !server_is_ours(alias.server_name()))
.filter(|alias| !self.services.globals.server_is_ours(alias.server_name()))
.map(|alias| alias.server_name().to_owned())
});
@ -1114,7 +1114,7 @@ impl Service {
.chain(room_alias_servers)
.chain(self.services.server.config.trusted_servers.clone())
.filter(|server_name| {
if server_is_ours(server_name) {
if self.services.globals.server_is_ours(server_name) {
return false;
}

View file

@ -8,7 +8,7 @@ use ruma::{
};
use tokio::sync::{broadcast, RwLock};
use crate::{globals, sending, user_is_local, Dep};
use crate::{globals, sending, Dep};
pub struct Service {
server: Arc<Server>,
@ -63,7 +63,7 @@ impl Service {
}
// update federation
if user_is_local(user_id) {
if self.services.globals.user_is_local(user_id) {
self.federation_send(room_id, user_id, true)?;
}
@ -89,7 +89,7 @@ impl Service {
}
// update federation
if user_is_local(user_id) {
if self.services.globals.user_is_local(user_id) {
self.federation_send(room_id, user_id, false)?;
}
@ -145,7 +145,7 @@ impl Service {
// update federation
for user in removable {
if user_is_local(&user) {
if self.services.globals.user_is_local(&user) {
self.federation_send(room_id, &user, false)?;
}
}
@ -184,7 +184,11 @@ impl Service {
}
fn federation_send(&self, room_id: &RoomId, user_id: &UserId, typing: bool) -> Result<()> {
debug_assert!(user_is_local(user_id), "tried to broadcast typing status of remote user",);
debug_assert!(
self.services.globals.user_is_local(user_id),
"tried to broadcast typing status of remote user",
);
if !self.server.config.allow_outgoing_typing {
return Ok(());
}

View file

@ -13,7 +13,7 @@ use ruma::{
};
use tokio::sync::Mutex;
use crate::{account_data, client, globals, presence, pusher, resolver, rooms, server_is_ours, users, Dep};
use crate::{account_data, client, globals, presence, pusher, resolver, rooms, users, Dep};
pub struct Service {
server: Arc<Server>,
@ -136,7 +136,7 @@ impl Service {
.state_cache
.room_servers(room_id)
.filter_map(Result::ok)
.filter(|server_name| !server_is_ours(server_name));
.filter(|server_name| !self.services.globals.server_is_ours(server_name));
self.send_pdu_servers(servers, pdu_id)
}
@ -185,7 +185,7 @@ impl Service {
.state_cache
.room_servers(room_id)
.filter_map(Result::ok)
.filter(|server_name| !server_is_ours(server_name));
.filter(|server_name| !self.services.globals.server_is_ours(server_name));
self.send_edu_servers(servers, serialized)
}
@ -222,7 +222,7 @@ impl Service {
.state_cache
.room_servers(room_id)
.filter_map(Result::ok)
.filter(|server_name| !server_is_ours(server_name));
.filter(|server_name| !self.services.globals.server_is_ours(server_name));
self.flush_servers(servers)
}

View file

@ -29,7 +29,6 @@ use serde_json::value::{to_raw_value, RawValue as RawJsonValue};
use tokio::time::sleep_until;
use super::{appservice, Destination, Msg, SendingEvent, Service};
use crate::user_is_local;
#[derive(Debug)]
enum TransactionStatus {
@ -264,7 +263,7 @@ impl Service {
.users
.keys_changed(room_id.as_ref(), since, None)
.filter_map(Result::ok)
.filter(|user_id| user_is_local(user_id)),
.filter(|user_id| self.services.globals.user_is_local(user_id)),
);
if self.server.config.allow_outgoing_read_receipts
@ -306,7 +305,7 @@ impl Service {
for (user_id, count, presence_bytes) in self.services.presence.presence_since(since) {
*max_edu_count = cmp::max(count, *max_edu_count);
if !user_is_local(&user_id) {
if !self.services.globals.user_is_local(&user_id) {
continue;
}
@ -358,7 +357,7 @@ impl Service {
let (user_id, count, read_receipt) = r?;
*max_edu_count = cmp::max(count, *max_edu_count);
if !user_is_local(&user_id) {
if !self.services.globals.user_is_local(&user_id) {
continue;
}