summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcel Müller <neikos@neikos.email>2023-01-04 10:53:49 +0100
committerMarcel Müller <neikos@neikos.email>2023-01-04 10:58:49 +0100
commit285e1c9043fabc5b2210ea669a46628fddc266c6 (patch)
tree70a44b0db43b010b23285f6ae277929fcf429ff2
parentf5cc2ced4d4d20186ca593ed6f5b8fbacb018534 (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.rs27
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();
}