summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcel Müller <neikos@neikos.email>2023-01-04 10:53:25 +0100
committerMarcel Müller <neikos@neikos.email>2023-01-04 10:58:49 +0100
commitf5cc2ced4d4d20186ca593ed6f5b8fbacb018534 (patch)
tree2d390dd3b30912ff3bb56aa06d05bfbe190c8982
parent12bf29ffe6fee6f211a09dd44f836b779f05692c (diff)
Add correct rejection code depending on login err
Signed-off-by: Marcel Müller <neikos@neikos.email>
-rw-r--r--src/server/login.rs11
-rw-r--r--src/server/mod.rs2
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));
}