mirror of
https://codeberg.org/slatian/service.echoip-slatecave.git
synced 2025-07-16 14:03:28 +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)
|
ServeDir::new(static_file_directory)
|
||||||
.fallback(not_found_handler.with_state(shared_state.clone()))
|
.fallback(not_found_handler.with_state(shared_state.clone()))
|
||||||
)
|
)
|
||||||
.with_state(shared_state)
|
.with_state(shared_state.clone())
|
||||||
.layer(
|
.layer(
|
||||||
ServiceBuilder::new()
|
ServiceBuilder::new()
|
||||||
.layer(ip_header.into_extension())
|
.layer(ip_header.into_extension())
|
||||||
@ -319,7 +319,7 @@ async fn main() {
|
|||||||
.layer(middleware::from_fn(ratelimit::rate_limit_middleware))
|
.layer(middleware::from_fn(ratelimit::rate_limit_middleware))
|
||||||
.layer(Extension(config))
|
.layer(Extension(config))
|
||||||
.layer(Extension(derived_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();
|
.unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(clippy::too_many_arguments)]
|
||||||
async fn settings_query_middleware(
|
async fn settings_query_middleware(
|
||||||
Query(query): Query<SettingsQuery>,
|
Query(query): Query<SettingsQuery>,
|
||||||
|
State(arc_state): State<Arc<ServiceSharedState>>,
|
||||||
Extension(config): Extension<config::EchoIpServiceConfig>,
|
Extension(config): Extension<config::EchoIpServiceConfig>,
|
||||||
Extension(derived_config): Extension<DerivedConfiguration>,
|
Extension(derived_config): Extension<DerivedConfiguration>,
|
||||||
cookie_header: Option<TypedHeader<headers::Cookie>>,
|
cookie_header: Option<TypedHeader<headers::Cookie>>,
|
||||||
user_agent_header: Option<TypedHeader<headers::UserAgent>>,
|
user_agent_header: Option<TypedHeader<headers::UserAgent>>,
|
||||||
mut req: Request<Body>,
|
mut req: Request<Body>,
|
||||||
next: Next
|
next: Next,
|
||||||
) -> Response {
|
) -> Response {
|
||||||
|
let state = Arc::clone(&arc_state);
|
||||||
let mut format = query.format;
|
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 {
|
if let Some(resolver_id) = query.dns {
|
||||||
dns_resolver_id = resolver_id.into();
|
dns_resolver_id = resolver_id.into();
|
||||||
|
test_for_resolver = true;
|
||||||
} else if let Some(cookie_header) = cookie_header {
|
} else if let Some(cookie_header) = cookie_header {
|
||||||
if let Some(resolver_id) = cookie_header.0.get("dns_resolver") {
|
if let Some(resolver_id) = cookie_header.0.get("dns_resolver") {
|
||||||
dns_resolver_id = resolver_id.into();
|
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
|
// Try to guess type from user agent
|
||||||
if format.is_none() {
|
if format.is_none() {
|
||||||
|
Reference in New Issue
Block a user