mirror of
https://codeberg.org/slatian/service.echoip-slatecave.git
synced 2025-07-16 14:03:28 +02:00
Broke out settings and fixed a bug with the dns resolver not being persisted
This commit is contained in:
47
src/main.rs
47
src/main.rs
@ -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
|
||||
|
||||
|
Reference in New Issue
Block a user