diff options
author | Marcel Müller <neikos@neikos.email> | 2023-01-04 10:53:25 +0100 |
---|---|---|
committer | Marcel Müller <neikos@neikos.email> | 2023-01-04 10:58:49 +0100 |
commit | f5cc2ced4d4d20186ca593ed6f5b8fbacb018534 (patch) | |
tree | 2d390dd3b30912ff3bb56aa06d05bfbe190c8982 | |
parent | 12bf29ffe6fee6f211a09dd44f836b779f05692c (diff) |
Add correct rejection code depending on login err
Signed-off-by: Marcel Müller <neikos@neikos.email>
-rw-r--r-- | src/server/login.rs | 11 | ||||
-rw-r--r-- | src/server/mod.rs | 2 |
2 files changed, 12 insertions, 1 deletions
diff --git a/src/server/login.rs b/src/server/login.rs index fbd0f54..b1e2c94 100644 --- a/src/server/login.rs +++ b/src/server/login.rs @@ -5,6 +5,8 @@ // use std::sync::Arc; +use mqtt_format::v3::connect_return::MConnectReturnCode; + use crate::server::ClientId; /// Errors that can occur during login @@ -15,6 +17,15 @@ pub enum LoginError { InvalidPassword, } +impl LoginError { + /// Convert the error into a rejection code + pub fn as_rejection_code(&self) -> MConnectReturnCode { + match self { + LoginError::InvalidPassword => MConnectReturnCode::BadUsernamePassword, + } + } +} + /// Objects that can handle authentication implement this trait #[async_trait::async_trait] pub trait LoginHandler { diff --git a/src/server/mod.rs b/src/server/mod.rs index 581157a..d14b059 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -255,7 +255,7 @@ impl<LH: Send + Sync + LoginHandler + 'static> MqttServer<LH> { .allow_login(client_id.clone(), username.as_deref(), password) .await { - send_connack(session_present, MConnectReturnCode::Accepted, &mut client).await?; + send_connack(session_present, err.as_rejection_code(), &mut client).await?; return Err(ClientError::Authentication(err)); } |