create admin bot room alias id once and reuse it

This commit is contained in:
Charles Hall 2024-06-12 16:30:08 -07:00
parent 95a24c761d
commit 339a869872
No known key found for this signature in database
GPG key ID: 7B8E0645816E07CF
2 changed files with 18 additions and 22 deletions

View file

@ -1,10 +1,4 @@
use std::{ use std::{collections::BTreeMap, fmt::Write, sync::Arc, time::Instant};
collections::BTreeMap,
convert::{TryFrom, TryInto},
fmt::Write,
sync::Arc,
time::Instant,
};
use clap::Parser; use clap::Parser;
use regex::Regex; use regex::Regex;
@ -29,8 +23,8 @@ use ruma::{
TimelineEventType, TimelineEventType,
}, },
signatures::verify_json, signatures::verify_json,
EventId, MilliSecondsSinceUnixEpoch, OwnedRoomAliasId, OwnedRoomId, EventId, MilliSecondsSinceUnixEpoch, OwnedRoomId, RoomId, RoomVersionId,
RoomAliasId, RoomId, RoomVersionId, ServerName, UserId, ServerName, UserId,
}; };
use serde_json::value::to_raw_value; use serde_json::value::to_raw_value;
use tokio::sync::{mpsc, Mutex, RwLock}; use tokio::sync::{mpsc, Mutex, RwLock};
@ -1410,10 +1404,7 @@ impl Service {
.await?; .await?;
// 6. Room alias // 6. Room alias
let alias: OwnedRoomAliasId = let alias = &services().globals.admin_bot_room_alias_id;
format!("#admins:{}", services().globals.server_name())
.try_into()
.expect("#admins:server_name is a valid alias name");
services() services()
.rooms .rooms
@ -1436,7 +1427,7 @@ impl Service {
) )
.await?; .await?;
services().rooms.alias.set_alias(&alias, &room_id)?; services().rooms.alias.set_alias(alias, &room_id)?;
Ok(()) Ok(())
} }
@ -1448,12 +1439,10 @@ impl Service {
// Allowed because this function uses `services()` // Allowed because this function uses `services()`
#[allow(clippy::unused_self)] #[allow(clippy::unused_self)]
pub(crate) fn get_admin_room(&self) -> Result<Option<OwnedRoomId>> { pub(crate) fn get_admin_room(&self) -> Result<Option<OwnedRoomId>> {
let admin_room_alias: Box<RoomAliasId> = services()
format!("#admins:{}", services().globals.server_name()) .rooms
.try_into() .alias
.expect("#admins:server_name is a valid alias name"); .resolve_local_alias(&services().globals.admin_bot_room_alias_id)
services().rooms.alias.resolve_local_alias(&admin_room_alias)
} }
/// Invite the user to the grapevine admin room. /// Invite the user to the grapevine admin room.

View file

@ -24,8 +24,9 @@ use hyper_util::{
use reqwest::dns::{Addrs, Name, Resolve, Resolving}; use reqwest::dns::{Addrs, Name, Resolve, Resolving};
use ruma::{ use ruma::{
api::federation::discovery::ServerSigningKeys, serde::Base64, DeviceId, api::federation::discovery::ServerSigningKeys, serde::Base64, DeviceId,
MilliSecondsSinceUnixEpoch, OwnedEventId, OwnedRoomId, OwnedServerName, MilliSecondsSinceUnixEpoch, OwnedEventId, OwnedRoomAliasId, OwnedRoomId,
OwnedUserId, RoomVersionId, ServerName, UserId, OwnedServerName, OwnedUserId, RoomAliasId, RoomVersionId, ServerName,
UserId,
}; };
use tokio::sync::{broadcast, Mutex, RwLock, Semaphore}; use tokio::sync::{broadcast, Mutex, RwLock, Semaphore};
use tracing::{error, info, Instrument}; use tracing::{error, info, Instrument};
@ -53,6 +54,7 @@ pub(crate) struct Service {
pub(crate) stable_room_versions: Vec<RoomVersionId>, pub(crate) stable_room_versions: Vec<RoomVersionId>,
pub(crate) unstable_room_versions: Vec<RoomVersionId>, pub(crate) unstable_room_versions: Vec<RoomVersionId>,
pub(crate) admin_bot_user_id: OwnedUserId, pub(crate) admin_bot_user_id: OwnedUserId,
pub(crate) admin_bot_room_alias_id: OwnedRoomAliasId,
pub(crate) bad_event_ratelimiter: pub(crate) bad_event_ratelimiter:
Arc<RwLock<HashMap<OwnedEventId, RateLimitState>>>, Arc<RwLock<HashMap<OwnedEventId, RateLimitState>>>,
pub(crate) bad_signature_ratelimiter: pub(crate) bad_signature_ratelimiter:
@ -218,6 +220,10 @@ impl Service {
)) ))
.expect("admin bot user ID should be valid"); .expect("admin bot user ID should be valid");
let admin_bot_room_alias_id =
RoomAliasId::parse(format!("#admins:{}", config.server_name))
.expect("admin bot room alias ID should be valid");
let mut s = Self { let mut s = Self {
db, db,
config, config,
@ -244,6 +250,7 @@ impl Service {
stable_room_versions, stable_room_versions,
unstable_room_versions, unstable_room_versions,
admin_bot_user_id, admin_bot_user_id,
admin_bot_room_alias_id,
bad_event_ratelimiter: Arc::new(RwLock::new(HashMap::new())), bad_event_ratelimiter: Arc::new(RwLock::new(HashMap::new())),
bad_signature_ratelimiter: Arc::new(RwLock::new(HashMap::new())), bad_signature_ratelimiter: Arc::new(RwLock::new(HashMap::new())),
bad_query_ratelimiter: Arc::new(RwLock::new(HashMap::new())), bad_query_ratelimiter: Arc::new(RwLock::new(HashMap::new())),