diff --git a/packages/common/config/src/config/topology.rs b/packages/common/config/src/config/topology.rs index 77601b167b..cf1d9665c9 100644 --- a/packages/common/config/src/config/topology.rs +++ b/packages/common/config/src/config/topology.rs @@ -97,4 +97,19 @@ impl Datacenter { self.public_url.host_str() == Some(host) } } + + pub fn public_url_host(&self) -> Result<&str> { + self.public_url.host_str().context("no host") + } + + pub fn public_url_port(&self) -> Result { + self.public_url + .port() + .or_else(|| match self.public_url.scheme() { + "http" => Some(80), + "https" => Some(443), + _ => None, + }) + .context("unsupported URL scheme") + } } diff --git a/packages/core/guard/server/src/routing/pegboard_gateway.rs b/packages/core/guard/server/src/routing/pegboard_gateway.rs index 4f2ccfe02f..16199c8d6b 100644 --- a/packages/core/guard/server/src/routing/pegboard_gateway.rs +++ b/packages/core/guard/server/src/routing/pegboard_gateway.rs @@ -76,14 +76,12 @@ pub async fn route_request( targets: vec![RouteTarget { actor_id: Some(actor_id), host: peer_dc - .public_url - .host() - .context("peer dc public_url has no host")? + .public_url_host() + .context("bad peer dc public url host")? .to_string(), port: peer_dc - .public_url - .port() - .context("peer dc public_url has no port")?, + .public_url_port() + .context("bad peer dc public url port")?, path: path.to_owned(), }], timeout: RoutingTimeout {