Persist resover choice using a cookie

This commit is contained in:
Slatian
2023-08-05 22:36:28 +02:00
parent fdb23312df
commit d88b15ba02
5 changed files with 99 additions and 7 deletions

View File

@ -384,11 +384,22 @@ async fn settings_query_middleware<B>(
Query(query): Query<SettingsQuery>,
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<B>,
next: Next<B>
) -> Response {
let mut format = query.format;
let mut dns_resolver_id = config.dns.default_resolver;
if let Some(resolver_id) = query.dns {
dns_resolver_id = resolver_id;
} else if let Some(cookie_header) = cookie_header {
if let Some(resolver_id) = cookie_header.0.get("dns_resolver") {
dns_resolver_id = resolver_id.to_string();
}
}
// Try to guess type from user agent
if format.is_none() {
if let Some(TypedHeader(user_agent)) = user_agent_header {
@ -407,8 +418,9 @@ async fn settings_query_middleware<B>(
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(),
},
dns_resolver_id: query.dns.unwrap_or(config.dns.default_resolver),
dns_resolver_id: dns_resolver_id,
});
next.run(req).await
}