mirror of
https://codeberg.org/slatian/service.echoip-slatecave.git
synced 2025-07-16 22:13:30 +02:00
Use a fallback for when the requested dns resolver isn't available
This commit is contained in:
22
src/main.rs
22
src/main.rs
@ -310,7 +310,7 @@ async fn main() {
|
||||
ServeDir::new(static_file_directory)
|
||||
.fallback(not_found_handler.with_state(shared_state.clone()))
|
||||
)
|
||||
.with_state(shared_state)
|
||||
.with_state(shared_state.clone())
|
||||
.layer(
|
||||
ServiceBuilder::new()
|
||||
.layer(ip_header.into_extension())
|
||||
@ -319,7 +319,7 @@ async fn main() {
|
||||
.layer(middleware::from_fn(ratelimit::rate_limit_middleware))
|
||||
.layer(Extension(config))
|
||||
.layer(Extension(derived_config))
|
||||
.layer(middleware::from_fn(settings_query_middleware))
|
||||
.layer(middleware::from_fn_with_state(shared_state, settings_query_middleware))
|
||||
)
|
||||
;
|
||||
|
||||
@ -331,26 +331,38 @@ async fn main() {
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
async fn settings_query_middleware(
|
||||
Query(query): Query<SettingsQuery>,
|
||||
State(arc_state): State<Arc<ServiceSharedState>>,
|
||||
Extension(config): Extension<config::EchoIpServiceConfig>,
|
||||
Extension(derived_config): Extension<DerivedConfiguration>,
|
||||
cookie_header: Option<TypedHeader<headers::Cookie>>,
|
||||
user_agent_header: Option<TypedHeader<headers::UserAgent>>,
|
||||
mut req: Request<Body>,
|
||||
next: Next
|
||||
next: Next,
|
||||
) -> Response {
|
||||
let state = Arc::clone(&arc_state);
|
||||
let mut format = query.format;
|
||||
let mut dns_resolver_id = derived_config.default_resolver;
|
||||
|
||||
let mut dns_resolver_id = derived_config.default_resolver.clone();
|
||||
let mut test_for_resolver = false;
|
||||
|
||||
if let Some(resolver_id) = query.dns {
|
||||
dns_resolver_id = resolver_id.into();
|
||||
test_for_resolver = true;
|
||||
} else if let Some(cookie_header) = cookie_header {
|
||||
if let Some(resolver_id) = cookie_header.0.get("dns_resolver") {
|
||||
dns_resolver_id = resolver_id.into();
|
||||
test_for_resolver = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Falls back to the default resolver if an invalid resolver id ws requested.
|
||||
// This may be the case for bookmarked links or old cookies of a resolver was removed.
|
||||
if test_for_resolver && !state.dns_resolvers.contains_key(&dns_resolver_id) {
|
||||
dns_resolver_id = derived_config.default_resolver;
|
||||
}
|
||||
|
||||
// Try to guess type from user agent
|
||||
if format.is_none() {
|
||||
|
Reference in New Issue
Block a user