From 3a6677207795fe9dfb434674d6ff36d4229fb197 Mon Sep 17 00:00:00 2001 From: BlockListed <44610569+BlockListed@users.noreply.github.com> Date: Sat, 9 Sep 2023 15:30:15 +0200 Subject: [PATCH] use single hashmap instead of two for domain lookups --- src/auth.rs | 1 + src/config.rs | 38 +++++++++++++++++++------------------- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/src/auth.rs b/src/auth.rs index 8a15a26f..4a5b0b4e 100644 --- a/src/auth.rs +++ b/src/auth.rs @@ -365,6 +365,7 @@ use crate::db::{ DbConn, }; +#[derive(Clone)] pub struct HostInfo { pub base_url: String, pub origin: String, diff --git a/src/config.rs b/src/config.rs index 0a9f80d6..b25767fc 100644 --- a/src/config.rs +++ b/src/config.rs @@ -8,6 +8,7 @@ use once_cell::sync::Lazy; use reqwest::Url; use crate::{ + auth::HostInfo, db::DbConnType, error::Error, util::{get_env, get_env_bool, parse_experimental_client_feature_flags}, @@ -49,8 +50,7 @@ macro_rules! make_config { _overrides: Vec, - domain_hostmap: OnceLock, - domain_origins: OnceLock, + domain_hostmap: OnceLock>, } #[derive(Clone, Default, Deserialize, Serialize)] @@ -347,8 +347,6 @@ macro_rules! make_config { } -type HostHashMap = HashMap; - //STRUCTURE: // /// Short description (without this they won't appear on the list) // group { @@ -1121,7 +1119,6 @@ impl Config { _env, _usr, _overrides, - domain_origins: OnceLock::new(), domain_hostmap: OnceLock::new(), }), }) @@ -1291,32 +1288,35 @@ impl Config { } } - pub fn domain_origin(&self, host: &str) -> Option { - // This is done to prevent deadlock, when read-locking an rwlock twice - let domains = self.domain_change_back(); - self.inner.read().unwrap().domain_origins.get_or_init(|| { - domains.split(',') - .map(|d| { - (extract_url_host(d), extract_url_origin(d)) - }) - .collect() - }).get(host).cloned() - } - - pub fn host_to_domain(&self, host: &str) -> Option { + fn get_domain_hostmap(&self, host: &str) -> Option { // This is done to prevent deadlock, when read-locking an rwlock twice let domains = self.domain_change_back(); self.inner.read().unwrap().domain_hostmap.get_or_init(|| { domains.split(',') .map(|d| { - (extract_url_host(d), extract_url_path(d)) + let host_info = HostInfo { + base_url: d.to_string(), + origin: extract_url_origin(d), + }; + + (extract_url_host(d), host_info) }) .collect() }).get(host).cloned() } + pub fn domain_origin(&self, host: &str) -> Option { + self.get_domain_hostmap(host) + .map(|v| v.origin) + } + + pub fn host_to_domain(&self, host: &str) -> Option { + self.get_domain_hostmap(host) + .map(|v| v.base_url) + } + // Yes this is a base_url // But the configuration precedent says, that we call this a domain. pub fn main_domain(&self) -> String {