fix: don't always query aliases of appservices

only do so if the alias matches the regex in the registration file
next
Timo Kösters 2021-03-03 21:41:26 +01:00
parent 1a198e7336
commit f2ec2be821
No known key found for this signature in database
GPG Key ID: 24DA7517711A2BA4
1 changed files with 18 additions and 9 deletions

View File

@ -1,5 +1,6 @@
use super::State; use super::State;
use crate::{ConduitResult, Database, Error, Ruma}; use crate::{ConduitResult, Database, Error, Ruma};
use regex::Regex;
use ruma::{ use ruma::{
api::{ api::{
appservice, appservice,
@ -86,15 +87,23 @@ pub async fn get_alias_helper(
Some(r) => room_id = Some(r), Some(r) => room_id = Some(r),
None => { None => {
for (_id, registration) in db.appservice.iter_all().filter_map(|r| r.ok()) { for (_id, registration) in db.appservice.iter_all().filter_map(|r| r.ok()) {
if db let aliases = registration
.sending .get("namespaces")
.send_appservice_request( .and_then(|ns| ns.get("aliases"))
&db.globals, .and_then(|users| users.get("regex"))
registration, .and_then(|regex| regex.as_str())
appservice::query::query_room_alias::v1::Request { room_alias }, .and_then(|regex| Regex::new(regex).ok());
)
.await if aliases.map_or(false, |aliases| aliases.is_match(room_alias.as_str()))
.is_ok() && db
.sending
.send_appservice_request(
&db.globals,
registration,
appservice::query::query_room_alias::v1::Request { room_alias },
)
.await
.is_ok()
{ {
room_id = Some(db.rooms.id_from_alias(&room_alias)?.ok_or_else(|| { room_id = Some(db.rooms.id_from_alias(&room_alias)?.ok_or_else(|| {
Error::bad_config("Appservice lied to us. Room does not exist.") Error::bad_config("Appservice lied to us. Room does not exist.")