From fee79720eeab86d555c0de2b741852da2c456c06 Mon Sep 17 00:00:00 2001 From: tylerlowrey Date: Thu, 30 Jul 2020 23:34:35 -0400 Subject: [PATCH] Added ban message with reason when banned user attempts to login to server --- assets/voxygen/i18n/en.ron | 1 + client/src/error.rs | 1 + client/src/lib.rs | 1 + common/src/msg/server.rs | 1 + server/src/login_provider.rs | 5 +++-- voxygen/src/menu/main/mod.rs | 7 +++++++ 6 files changed, 14 insertions(+), 2 deletions(-) diff --git a/assets/voxygen/i18n/en.ron b/assets/voxygen/i18n/en.ron index cee8bdb3d9..b65d696bc2 100644 --- a/assets/voxygen/i18n/en.ron +++ b/assets/voxygen/i18n/en.ron @@ -141,6 +141,7 @@ https://account.veloren.net."#, "main.login.invalid_character": "The selected character is invalid", "main.login.client_crashed": "Client crashed", "main.login.not_on_whitelist": "You need a Whitelist entry by an Admin to join", + "main.login.banned": "You have been banned with the following reason", /// End Main screen section diff --git a/client/src/error.rs b/client/src/error.rs index ae7b1725aa..1b1cf0d435 100644 --- a/client/src/error.rs +++ b/client/src/error.rs @@ -16,6 +16,7 @@ pub enum Error { AuthErr(String), AuthClientError(AuthClientError), AuthServerNotTrusted, + Banned(String), /// Persisted character data is invalid or missing InvalidCharacter, //TODO: InvalidAlias, diff --git a/client/src/lib.rs b/client/src/lib.rs index dda0d38012..342fed6550 100644 --- a/client/src/lib.rs +++ b/client/src/lib.rs @@ -455,6 +455,7 @@ impl Client { RegisterError::AuthError(err) => Error::AuthErr(err), RegisterError::InvalidCharacter => Error::InvalidCharacter, RegisterError::NotOnWhitelist => Error::NotOnWhitelist, + RegisterError::Banned(reason) => Error::Banned(reason), }); }, ServerMsg::StateAnswer(Ok(ClientState::Registered)) => break Ok(()), diff --git a/common/src/msg/server.rs b/common/src/msg/server.rs index 47874ea2c3..e2838f63ab 100644 --- a/common/src/msg/server.rs +++ b/common/src/msg/server.rs @@ -260,6 +260,7 @@ pub enum RequestStateError { pub enum RegisterError { AlreadyLoggedIn, AuthError(String), + Banned(String), InvalidCharacter, NotOnWhitelist, //TODO: InvalidAlias, diff --git a/server/src/login_provider.rs b/server/src/login_provider.rs index f89ad2521d..1bf3f7bf24 100644 --- a/server/src/login_provider.rs +++ b/server/src/login_provider.rs @@ -61,8 +61,9 @@ impl LoginProvider { // if found, check name against whitelist or if user is admin .and_then(|(username, uuid)| { // user cannot join if they are listed on the banlist - if banlist.len() > 0 && banlist.iter().any(|x| x.0.eq_ignore_ascii_case(&username)) { - return Err(RegisterError::NotOnWhitelist); + if let Some(ban_record) = banlist.iter().find(|x| x.0.eq_ignore_ascii_case(&username)) { + // Pull reason string out of ban record and send a copy of it + return Err(RegisterError::Banned(ban_record.1.clone())); } // user can only join if he is admin, the whitelist is empty (everyone can join) diff --git a/voxygen/src/menu/main/mod.rs b/voxygen/src/menu/main/mod.rs index 8f65cc0c12..c069cf25d9 100644 --- a/voxygen/src/menu/main/mod.rs +++ b/voxygen/src/menu/main/mod.rs @@ -125,6 +125,13 @@ impl PlayState for MainMenuState { client::Error::NotOnWhitelist => { localized_strings.get("main.login.not_on_whitelist").into() }, + client::Error::Banned(reason) => { + format!( + "{}: {}", + localized_strings.get("main.login.banned"), + reason + ) + }, client::Error::InvalidCharacter => { localized_strings.get("main.login.invalid_character").into() },