client: use build_authority in build_uri

so we don't need to also duplicate the IPv6 bracket logic

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
This commit is contained in:
Wolfgang Bumiller 2021-05-06 08:55:44 +02:00 committed by Dietmar Maurer
parent 78bf292343
commit 25d78b1068
2 changed files with 14 additions and 19 deletions

View File

@ -26,7 +26,10 @@ use crate::tools::{
self,
BroadcastFuture,
DEFAULT_ENCODE_SET,
http::HttpsConnector,
http::{
build_authority,
HttpsConnector,
},
};
/// Timeout used for several HTTP operations that are expected to finish quickly but may block in
@ -274,23 +277,15 @@ fn load_ticket_info(prefix: &str, server: &str, userid: &Userid) -> Option<(Stri
}
fn build_uri(server: &str, port: u16, path: &str, query: Option<String>) -> Result<Uri, Error> {
let path = path.trim_matches('/');
let bytes = server.as_bytes();
let len = bytes.len();
let uri = if len > 3 && bytes.contains(&b':') && bytes[0] != b'[' && bytes[len-1] != b']' {
if let Some(query) = query {
format!("https://[{}]:{}/{}?{}", server, port, path, query)
} else {
format!("https://[{}]:{}/{}", server, port, path)
}
} else {
if let Some(query) = query {
format!("https://{}:{}/{}?{}", server, port, path, query)
} else {
format!("https://{}:{}/{}", server, port, path)
}
};
Ok(uri.parse()?)
let builder = Uri::builder()
.scheme("https")
.authority(build_authority(server, port)?);
match query {
Some(query) => builder.path_and_query(format!("{}?{}", path, query)),
None => builder.path_and_query(path),
}
.build()
.map_err(Error::from)
}
impl HttpClient {

View File

@ -27,7 +27,7 @@ use crate::tools::{
};
// Build a http::uri::Authority ("host:port"), use '[..]' around IPv6 addresses
fn build_authority(host: &str, port: u16) -> Result<Authority, Error> {
pub(crate) fn build_authority(host: &str, port: u16) -> Result<Authority, Error> {
let bytes = host.as_bytes();
let len = bytes.len();
let authority = if len > 3 && bytes.contains(&b':') && bytes[0] != b'[' && bytes[len-1] != b']' {