de-global server_is_ours / user_is_local
Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
parent
010e4ee35a
commit
59efabbbc2
34 changed files with 179 additions and 169 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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()) }
|
||||
|
|
|
@ -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! {}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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."));
|
||||
}
|
||||
|
||||
|
|
|
@ -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)),
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -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)?;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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(());
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue