Send proper Host header in federation requests
This commit is contained in:
		
							parent
							
								
									5cb15551f3
								
							
						
					
					
						commit
						7b3fe88345
					
				
					 2 changed files with 8 additions and 15 deletions
				
			
		|  | @ -13,9 +13,7 @@ use trust_dns_resolver::TokioAsyncResolver; | ||||||
| 
 | 
 | ||||||
| pub const COUNTER: &str = "c"; | pub const COUNTER: &str = "c"; | ||||||
| 
 | 
 | ||||||
| pub type DestinationCache = Arc<RwLock<HashMap<Box<ServerName>, (String, Option<String>)>>>; | type WellKnownMap = HashMap<Box<ServerName>, (String, String)>; | ||||||
| type WellKnownMap = HashMap<Box<ServerName>, (String, Option<String>)>; |  | ||||||
| 
 |  | ||||||
| #[derive(Clone)] | #[derive(Clone)] | ||||||
| pub struct Globals { | pub struct Globals { | ||||||
|     pub actual_destination_cache: Arc<RwLock<WellKnownMap>>, // actual_destination, host
 |     pub actual_destination_cache: Arc<RwLock<WellKnownMap>>, // actual_destination, host
 | ||||||
|  |  | ||||||
|  | @ -139,11 +139,9 @@ where | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if let Some(host) = host { |  | ||||||
|     http_request |     http_request | ||||||
|         .headers_mut() |         .headers_mut() | ||||||
|         .insert(HOST, HeaderValue::from_str(&host).unwrap()); |         .insert(HOST, HeaderValue::from_str(&host).unwrap()); | ||||||
|     } |  | ||||||
| 
 | 
 | ||||||
|     let mut reqwest_request = reqwest::Request::try_from(http_request) |     let mut reqwest_request = reqwest::Request::try_from(http_request) | ||||||
|         .expect("all http requests are valid reqwest requests"); |         .expect("all http requests are valid reqwest requests"); | ||||||
|  | @ -231,10 +229,9 @@ fn add_port_to_hostname(destination_str: String) -> String { | ||||||
| async fn find_actual_destination( | async fn find_actual_destination( | ||||||
|     globals: &crate::database::globals::Globals, |     globals: &crate::database::globals::Globals, | ||||||
|     destination: &'_ ServerName, |     destination: &'_ ServerName, | ||||||
| ) -> (String, Option<String>) { | ) -> (String, String) { | ||||||
|     let mut host = None; |  | ||||||
| 
 |  | ||||||
|     let destination_str = destination.as_str().to_owned(); |     let destination_str = destination.as_str().to_owned(); | ||||||
|  |     let mut host = destination_str.clone(); | ||||||
|     let actual_destination = "https://".to_owned() |     let actual_destination = "https://".to_owned() | ||||||
|         + &match get_ip_with_port(destination_str.clone()) { |         + &match get_ip_with_port(destination_str.clone()) { | ||||||
|             Some(host_port) => { |             Some(host_port) => { | ||||||
|  | @ -249,6 +246,7 @@ async fn find_actual_destination( | ||||||
|                     match request_well_known(globals, &destination.as_str()).await { |                     match request_well_known(globals, &destination.as_str()).await { | ||||||
|                         // 3: A .well-known file is available
 |                         // 3: A .well-known file is available
 | ||||||
|                         Some(delegated_hostname) => { |                         Some(delegated_hostname) => { | ||||||
|  |                             host = delegated_hostname.clone(); | ||||||
|                             match get_ip_with_port(delegated_hostname.clone()) { |                             match get_ip_with_port(delegated_hostname.clone()) { | ||||||
|                                 Some(host_and_port) => host_and_port, // 3.1: IP literal in .well-known file
 |                                 Some(host_and_port) => host_and_port, // 3.1: IP literal in .well-known file
 | ||||||
|                                 None => { |                                 None => { | ||||||
|  | @ -270,10 +268,7 @@ async fn find_actual_destination( | ||||||
|                         None => { |                         None => { | ||||||
|                             match query_srv_record(globals, &destination_str).await { |                             match query_srv_record(globals, &destination_str).await { | ||||||
|                                 // 4: SRV record found
 |                                 // 4: SRV record found
 | ||||||
|                                 Some(hostname) => { |                                 Some(hostname) => hostname, | ||||||
|                                     host = Some(destination_str.to_owned()); |  | ||||||
|                                     hostname |  | ||||||
|                                 } |  | ||||||
|                                 // 5: No SRV record found
 |                                 // 5: No SRV record found
 | ||||||
|                                 None => add_port_to_hostname(destination_str.to_string()), |                                 None => add_port_to_hostname(destination_str.to_string()), | ||||||
|                             } |                             } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue