Broke out settings and fixed a bug with the dns resolver not being persisted

This commit is contained in:
Slatian
2023-08-05 22:53:48 +02:00
parent d88b15ba02
commit 55897585ff
3 changed files with 70 additions and 80 deletions

View File

@ -39,6 +39,7 @@ mod config;
mod geoip;
mod ipinfo;
mod ratelimit;
mod settings;
mod simple_dns;
mod templating_engine;
mod idna;
@ -51,12 +52,8 @@ use crate::geoip::{
};
use crate::idna::IdnaName;
use crate::simple_dns::DnsLookupResult;
use crate::templating_engine::{
View,
ResponseFormat,
TemplateSettings,
Selectable,
};
use crate::settings::*;
use crate::templating_engine::View;
use crate::ipinfo::{AddressCast,AddressInfo,AddressScope};
#[derive(Deserialize, Serialize, Clone)]
@ -66,13 +63,6 @@ pub struct SettingsQuery {
dns: Option<String>,
}
#[derive(Clone, Serialize)]
pub struct QuerySettings {
#[serde(skip)]
template: TemplateSettings,
dns_resolver_id: String,
}
#[derive(Deserialize, Serialize, Clone)]
pub struct SearchQuery {
query: Option<String>,
@ -414,12 +404,9 @@ async fn settings_query_middleware<B>(
}
// Add the request settings extension
req.extensions_mut().insert(QuerySettings{
template: TemplateSettings{
format: format.unwrap_or(ResponseFormat::TextHtml),
lang: query.lang.unwrap_or("en".to_string()),
available_dns_resolvers: derived_config.dns_resolver_selectables,
dns_resolver: dns_resolver_id.clone(),
},
format: format.unwrap_or(ResponseFormat::TextHtml),
lang: query.lang.unwrap_or("en".to_string()),
available_dns_resolvers: derived_config.dns_resolver_selectables,
dns_resolver_id: dns_resolver_id,
});
next.run(req).await
@ -432,7 +419,7 @@ async fn not_found_handler(
let state = Arc::clone(&arc_state);
state.templating_engine.render_view(
&settings.template,
&settings,
&View::NotFound,
).await
}
@ -444,7 +431,7 @@ async fn hello_world_handler(
let state = Arc::clone(&arc_state);
state.templating_engine.render_view(
&settings.template,
&settings,
&View::Message{
title: "Hey There!".to_string(),
message: "You,You are an awesome Creature!".to_string()
@ -480,7 +467,7 @@ async fn handle_default_route(
}
}
let result = get_ip_result(&address, &settings.template.lang, &"default".to_string(), &state).await;
let result = get_ip_result(&address, &settings.lang, &"default".to_string(), &state).await;
let user_agent: Option<String> = match user_agent_header {
Some(TypedHeader(user_agent)) => Some(user_agent.to_string()),
@ -488,7 +475,7 @@ async fn handle_default_route(
};
state.templating_engine.render_view(
&settings.template,
&settings,
&View::Index{
result: result,
user_agent: user_agent,
@ -518,7 +505,7 @@ async fn handle_search_request(
// Render a dummy template that can at least link to other pages
let state = Arc::clone(&arc_state);
return state.templating_engine.render_view(
&settings.template,
&settings,
&View::Asn{asn: asn},
).await
}
@ -555,7 +542,7 @@ async fn handle_dns_resolver_route(
) -> Response {
let state = Arc::clone(&arc_state);
state.templating_engine.render_view(
&settings.template,
&settings,
&View::DnsResolverList,
).await
}
@ -569,12 +556,12 @@ async fn handle_dns_resolver_route_with_path(
let state = Arc::clone(&arc_state);
if let Some(resolver) = state.config.dns.resolver.get(&query) {
state.templating_engine.render_view(
&settings.template,
&settings,
&View::DnsResolver{ config: resolver.clone() },
).await
} else {
state.templating_engine.render_view(
&settings.template,
&settings,
&View::NotFound,
).await
}
@ -601,12 +588,12 @@ async fn handle_ip_request(
let state = Arc::clone(&arc_state);
let result = get_ip_result(
&address,
&settings.template.lang,
&settings.lang,
&settings.dns_resolver_id,
&state).await;
state.templating_engine.render_view(
&settings.template,
&settings,
&View::Ip{result: result}
).await
}
@ -695,7 +682,7 @@ async fn handle_dig_request(
).await;
state.templating_engine.render_view(
&settings.template,
&settings,
&View::Dig{ query: dig_query, result: dig_result}
).await