diff --git a/src/config.rs b/src/config.rs index ffb3f78..65c6e4f 100644 --- a/src/config.rs +++ b/src/config.rs @@ -51,8 +51,8 @@ pub struct KafkaConfig { pub struct WebsocketConfig { pub drogue_endpoint: String, pub drogue_app: String, - pub drogue_user: String, - pub drogue_token: String, + pub drogue_user: Option, + pub drogue_token: Option, } #[derive(Clone, Debug, Deserialize)] @@ -175,8 +175,8 @@ mod test { Mode::Websocket(WebsocketConfig { drogue_app: "app".into(), drogue_endpoint: "endpoint".into(), - drogue_user: "user".into(), - drogue_token: "token".into(), + drogue_user: Some("user".into()), + drogue_token: Some("token".into()), }) ); } diff --git a/src/main.rs b/src/main.rs index cf4ecdd..3f3d14f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -126,16 +126,24 @@ async fn kafka(config: KafkaConfig, sender: Sender) -> Result<()> { async fn websocket(config: WebsocketConfig, sender: Sender) -> Result<()> { let url = format!("{}/{}", config.drogue_endpoint, config.drogue_app); - let request = Request::builder() - .uri(url) - .header( - header::AUTHORIZATION, - format!( - "Basic {}", - base64::encode(format!("{}:{}", config.drogue_user, config.drogue_token)) - ), - ) - .body(())?; + let mut request = Request::builder().uri(url); + match (&config.drogue_user, &config.drogue_token) { + (Some(user), Some(token)) => { + request = request.header( + header::AUTHORIZATION, + format!("Basic {}", base64::encode(format!("{}:{}", user, token))), + ); + } + (None, Some(token)) => { + request = request.header(header::AUTHORIZATION, format!("Bearer {}", token)); + } + (None, None) => {} + (Some(_), None) => { + bail!("Invalid combination: username present, but password is missing. You can set an empty password by providing an empty string."); + } + } + + let request = request.body(())?; log::info!("Connecting to websocket with request : {:?}", request); let (mut socket, response) =