mirror of
				https://codeberg.org/slatian/service.echoip-slatecave.git
				synced 2025-10-31 00:48:07 +01: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