mirror of
				https://codeberg.org/slatian/service.echoip-slatecave.git
				synced 2025-10-31 08:58:08 +01:00 
			
		
		
		
	Proper dns configuration!
This commit is contained in:
		
							
								
								
									
										83
									
								
								src/main.rs
									
									
									
									
									
								
							
							
						
						
									
										83
									
								
								src/main.rs
									
									
									
									
									
								
							| @@ -103,6 +103,7 @@ struct ServiceSharedState { | ||||
| #[derive(Clone)] | ||||
| struct DerivedConfiguration { | ||||
| 	dns_resolver_selectables: Vec<Selectable>, | ||||
| 	default_resolver: String, | ||||
| } | ||||
|  | ||||
| #[derive(Parser)] | ||||
| @@ -228,61 +229,30 @@ async fn main() { | ||||
| 	location_db.reload_database().ok(); | ||||
| 	 | ||||
| 	// Initalize DNS resolver with os defaults | ||||
| 	println!("Initalizing dns resolver ..."); | ||||
| 	println!("Initalizing dns resolvers ..."); | ||||
|  | ||||
| 	let mut dns_resolver_selectables = Vec::<Selectable>::new(); | ||||
|  | ||||
| 	println!("Initalizing System resolver ..."); | ||||
| 	let res = TokioAsyncResolver::tokio_from_system_conf(); | ||||
| 	//let res = TokioAsyncResolver::tokio(ResolverConfig::default(), ResolverOpts::default()); | ||||
| 	let dns_resolver = match res { | ||||
| 		Ok(resolver) => resolver, | ||||
| 		Err(e) => { | ||||
| 			println!("Error while setting up dns resolver: {e}"); | ||||
| 			::std::process::exit(1); | ||||
| 		} | ||||
| 	}; | ||||
|  | ||||
| 	dns_resolver_selectables.push(Selectable { | ||||
| 		id: "default".to_string(), | ||||
| 		name: "System".to_string(), | ||||
| 		weight: 1000, | ||||
| 	}); | ||||
|  | ||||
| 	//FIXME: Not release ready,must be configurable and have better error handling. | ||||
| 	println!("Initalizing Quad9 resolver ..."); | ||||
| 	let quad9_resolver = TokioAsyncResolver::tokio( | ||||
| 		trust_dns_resolver::config::ResolverConfig::quad9_tls(), | ||||
| 		Default::default() | ||||
| 	).unwrap(); | ||||
| 	dns_resolver_selectables.push(Selectable { | ||||
| 		id: "quad9".to_string(), | ||||
| 		name: "Quad9".to_string(), | ||||
| 		weight: 500 | ||||
| 	}); | ||||
| 	println!("Initalizing Google resolver ..."); | ||||
| 	let google_resolver = TokioAsyncResolver::tokio( | ||||
| 		trust_dns_resolver::config::ResolverConfig::google(), | ||||
| 		Default::default() | ||||
| 	).unwrap(); | ||||
| 	dns_resolver_selectables.push(Selectable { | ||||
| 		id: "google".to_string(), | ||||
| 		name: "Google".to_string(), | ||||
| 		weight: 10, | ||||
| 	}); | ||||
| 	println!("Initalizing Cloudflare resolver ..."); | ||||
| 	let cloudflare_resolver = TokioAsyncResolver::tokio( | ||||
| 		trust_dns_resolver::config::ResolverConfig::cloudflare_tls(), | ||||
| 		Default::default() | ||||
| 	).unwrap(); | ||||
| 	dns_resolver_selectables.push(Selectable { | ||||
| 		id: "cloudflare".to_string(), | ||||
| 		name: "Cloudflare".to_string(), | ||||
| 		weight: 20, | ||||
| 	}); | ||||
|  | ||||
| 	let mut dns_resolver_map: HashMap<String,TokioAsyncResolver> = HashMap::new(); | ||||
|  | ||||
| 	if config.dns.enable_system_resolver { | ||||
| 		println!("Initalizing System resolver ..."); | ||||
| 		let res = TokioAsyncResolver::tokio_from_system_conf(); | ||||
| 		let resolver = match res { | ||||
| 			Ok(resolver) => resolver, | ||||
| 			Err(e) => { | ||||
| 				println!("Error while setting up dns resolver: {e}"); | ||||
| 				::std::process::exit(1); | ||||
| 			} | ||||
| 		}; | ||||
|  | ||||
| 		dns_resolver_map.insert(config.dns.system_resolver_id.clone(), resolver); | ||||
| 		dns_resolver_selectables.push(Selectable { | ||||
| 			id: config.dns.system_resolver_id.clone(), | ||||
| 			name: config.dns.system_resolver_name.clone(), | ||||
| 			weight: config.dns.system_resolver_weight, | ||||
| 		}); | ||||
| 	} | ||||
|  | ||||
| 	for (key, resolver_config) in &config.dns.resolver { | ||||
| 		println!("Initalizing {} resolver ...", key); | ||||
| 		let resolver = TokioAsyncResolver::tokio( | ||||
| @@ -297,11 +267,6 @@ async fn main() { | ||||
| 		}); | ||||
| 	} | ||||
| 	 | ||||
| 	dns_resolver_map.insert("default".to_string(), dns_resolver); | ||||
| 	dns_resolver_map.insert("quad9".to_string(), quad9_resolver); | ||||
| 	dns_resolver_map.insert("google".to_string(), google_resolver); | ||||
| 	dns_resolver_map.insert("cloudflare".to_string(), cloudflare_resolver); | ||||
|  | ||||
| 	let listen_on = config.server.listen_on; | ||||
| 	let ip_header = config.server.ip_header.clone(); | ||||
|  | ||||
| @@ -317,8 +282,12 @@ async fn main() { | ||||
| 	}); | ||||
|  | ||||
| 	dns_resolver_selectables.sort_by(|a,b| b.weight.cmp(&a.weight)); | ||||
| 	let default_resolver = dns_resolver_selectables.get(0) | ||||
| 		.map(|s| s.id.clone() ) | ||||
| 		.unwrap_or("none".to_string()); | ||||
| 	let derived_config = DerivedConfiguration { | ||||
| 		dns_resolver_selectables: dns_resolver_selectables, | ||||
| 		default_resolver: default_resolver, | ||||
| 	}; | ||||
|  | ||||
| 	let signal_usr1_handlers_state = shared_state.clone(); | ||||
| @@ -386,7 +355,7 @@ async fn settings_query_middleware<B>( | ||||
| 	next: Next<B> | ||||
| ) -> Response { | ||||
| 	let mut format = query.format; | ||||
| 	let mut dns_resolver_id = config.dns.default_resolver; | ||||
| 	let mut dns_resolver_id = derived_config.default_resolver; | ||||
|  | ||||
| 	if let Some(resolver_id) = query.dns { | ||||
| 		dns_resolver_id = resolver_id; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user