diff --git a/src/cloud.rs b/src/cloud.rs index a1c39c9..8437d63 100644 --- a/src/cloud.rs +++ b/src/cloud.rs @@ -493,6 +493,7 @@ impl Cloud { containers.push(container); let options_clone = options.clone(); + let proxy_config = config.proxy.clone(); let cloud_id = id.clone(); let docker_clone = docker.clone(); spawn(async move { @@ -506,7 +507,10 @@ impl Cloud { return; } for service in options_clone.services { - match service.start_message(&docker_clone, &cloud_id).await { + match service + .start_message(&docker_clone, &cloud_id, &proxy_config) + .await + { Ok(Some(msg)) => { println!("{}", msg); } diff --git a/src/config.rs b/src/config.rs index fad1d0a..b790b52 100644 --- a/src/config.rs +++ b/src/config.rs @@ -181,7 +181,7 @@ fn load_secret(name: &str, path: Option, raw: Option) -> Result< } } -#[derive(Default, Deserialize, Debug)] +#[derive(Default, Deserialize, Debug, Clone)] pub struct ProxyConfig { pub listen: String, #[serde(default)] diff --git a/src/service.rs b/src/service.rs index 77ea246..344ec49 100644 --- a/src/service.rs +++ b/src/service.rs @@ -16,7 +16,7 @@ mod sharded; mod smb; use crate::cloud::CloudOptions; -use crate::config::{HazeConfig, Preset}; +use crate::config::{HazeConfig, Preset, ProxyConfig}; pub use crate::service::clam::{Clam, ClamIcap, ClamIcapTls, ClamSocket}; use crate::service::dav::Dav; use crate::service::imaginary::Imaginary; @@ -78,7 +78,12 @@ pub trait ServiceTrait { None } - async fn start_message(&self, _docker: &Docker, _cloud_id: &str) -> Result> { + async fn start_message( + &self, + _docker: &Docker, + _cloud_id: &str, + _proxy: &ProxyConfig, + ) -> Result> { Ok(None) } diff --git a/src/service/ldap.rs b/src/service/ldap.rs index 66d1d14..aa082b0 100644 --- a/src/service/ldap.rs +++ b/src/service/ldap.rs @@ -1,5 +1,5 @@ use crate::cloud::CloudOptions; -use crate::config::HazeConfig; +use crate::config::{HazeConfig, ProxyConfig}; use crate::image::pull_image; use crate::service::ServiceTrait; use crate::Result; @@ -9,6 +9,8 @@ use bollard::query_parameters::CreateContainerOptions; use bollard::Docker; use maplit::hashmap; use miette::{IntoDiagnostic, Report}; +use std::net::IpAddr; +use std::str::FromStr; #[derive(Debug, Clone, Eq, PartialEq)] pub struct Ldap; @@ -151,9 +153,15 @@ impl ServiceTrait for LdapAdmin { Some(format!("{}-ldap-admin", cloud_id)) } - async fn start_message(&self, docker: &Docker, cloud_id: &str) -> Result> { + async fn start_message( + &self, + docker: &Docker, + cloud_id: &str, + proxy: &ProxyConfig, + ) -> Result> { + let id = self.container_name(cloud_id).unwrap(); let info = docker - .inspect_container(&self.container_name(cloud_id).unwrap(), None) + .inspect_container(&id, None) .await .into_diagnostic()?; let ip = if matches!( @@ -176,9 +184,9 @@ impl ServiceTrait for LdapAdmin { } else { return Err(Report::msg("ldap admin not started")); }; + let addr = proxy.addr(&id, IpAddr::from_str(&ip).unwrap()); Ok(Some(format!( - "Ldap admin running at: https://{} with 'cn=admin,dc=example,dc=org' and password 'haze'", - ip + "Ldap admin running at: {addr} with 'cn=admin,dc=example,dc=org' and password 'haze'" ))) } }