From 5cabf4d0400e0db3dffabc2cdafb803d811a01de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa?= Date: Sat, 7 Dec 2019 14:38:32 +0100 Subject: [PATCH] Fix IP not shown when failed login (Fixes #761) --- src/api/identity.rs | 4 ++-- src/error.rs | 17 ++++++++++++++--- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/api/identity.rs b/src/api/identity.rs index 08a72bee..0c77d4f0 100644 --- a/src/api/identity.rs +++ b/src/api/identity.rs @@ -211,7 +211,7 @@ fn twofactor_auth( let twofactor_code = match data.two_factor_token { Some(ref code) => code, - None => err_json!(_json_err_twofactor(&twofactor_ids, user_uuid, conn)?), + None => err_json!(_json_err_twofactor(&twofactor_ids, user_uuid, conn)?, "2FA token not provided"), }; let selected_twofactor = twofactors @@ -237,7 +237,7 @@ fn twofactor_auth( Some(ref code) if !CONFIG.disable_2fa_remember() && ct_eq(code, twofactor_code) => { remember = 1; // Make sure we also return the token here, otherwise it will only remember the first time } - _ => err_json!(_json_err_twofactor(&twofactor_ids, user_uuid, conn)?), + _ => err_json!(_json_err_twofactor(&twofactor_ids, user_uuid, conn)?, "2FA Remember token not provided"), } } _ => err!("Invalid two factor provider"), diff --git a/src/error.rs b/src/error.rs index 47be6740..32d247d0 100644 --- a/src/error.rs +++ b/src/error.rs @@ -86,7 +86,18 @@ impl std::fmt::Debug for Error { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { match self.source() { Some(e) => write!(f, "{}.\n[CAUSE] {:#?}", self.message, e), - None => write!(f, "{}", self.message), + None => match self.error { + ErrorKind::EmptyError(_) => Ok(()), + ErrorKind::SimpleError(ref s) => { + if &self.message == s { + write!(f, "{}", self.message) + } else { + write!(f, "{}. {}", self.message, s) + } + }, + ErrorKind::JsonError(_) => write!(f, "{}", self.message), + _ => unreachable!(), + }, } } } @@ -200,8 +211,8 @@ macro_rules! err { #[macro_export] macro_rules! err_json { - ($expr:expr) => {{ - return Err(crate::error::Error::from($expr)); + ($expr:expr, $log_value:expr) => {{ + return Err(($log_value, $expr).into()); }}; }