diff options
author | Marcel Müller <neikos@neikos.email> | 2023-01-04 10:53:49 +0100 |
---|---|---|
committer | Marcel Müller <neikos@neikos.email> | 2023-01-04 10:58:49 +0100 |
commit | 285e1c9043fabc5b2210ea669a46628fddc266c6 (patch) | |
tree | 70a44b0db43b010b23285f6ae277929fcf429ff2 | |
parent | f5cc2ced4d4d20186ca593ed6f5b8fbacb018534 (diff) |
Add a sample login handler to server bin
Signed-off-by: Marcel Müller <neikos@neikos.email>
-rw-r--r-- | src/bin/cloudmqtt-server.rs | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/src/bin/cloudmqtt-server.rs b/src/bin/cloudmqtt-server.rs index 29acf91..6d17f94 100644 --- a/src/bin/cloudmqtt-server.rs +++ b/src/bin/cloudmqtt-server.rs @@ -6,10 +6,32 @@ use std::sync::Arc; -use cloudmqtt::server::MqttServer; +use cloudmqtt::server::login::{LoginError, LoginHandler}; +use cloudmqtt::server::{ClientId, MqttServer}; +use tracing::info; use tracing_subscriber::layer::SubscriberExt; use tracing_subscriber::util::SubscriberInitExt; +struct SimpleLoginHandler; + +#[async_trait::async_trait] +impl LoginHandler for SimpleLoginHandler { + async fn allow_login( + &self, + client_id: Arc<ClientId>, + username: Option<&str>, + password: Option<&[u8]>, + ) -> Result<(), LoginError> { + info!("Client ({client_id:?}), tried to connect with username: {username:?}, password: {password:?}"); + + if username == Some("foo") { + return Err(LoginError::InvalidPassword); + } + + Ok(()) + } +} + #[tokio::main] async fn main() { let fmt_layer = tracing_subscriber::fmt::layer() @@ -27,7 +49,8 @@ async fn main() { let server = MqttServer::serve_v3_unsecured_tcp("0.0.0.0:1883") .await - .unwrap(); + .unwrap() + .with_login_handler(SimpleLoginHandler); Arc::new(server).accept_new_clients().await.unwrap(); } |