From 6cfeee152cc808b81c8cccbcb03f6ae9988075a5 Mon Sep 17 00:00:00 2001 From: Mike Primm Date: Sun, 8 Jan 2012 09:06:43 +0800 Subject: [PATCH] Add block-banned-player-chat to block chat from banned players matching IPs known to go with player --- .../org/dynmap/InternalClientUpdateComponent.java | 2 ++ .../org/dynmap/JsonFileClientUpdateComponent.java | 11 +++++++++++ .../org/dynmap/web/handlers/SendMessageHandler.java | 13 +++++++++++++ src/main/resources/configuration.txt | 3 +++ 4 files changed, 29 insertions(+) diff --git a/src/main/java/org/dynmap/InternalClientUpdateComponent.java b/src/main/java/org/dynmap/InternalClientUpdateComponent.java index 0269d65f..86e2439a 100644 --- a/src/main/java/org/dynmap/InternalClientUpdateComponent.java +++ b/src/main/java/org/dynmap/InternalClientUpdateComponent.java @@ -14,6 +14,7 @@ public class InternalClientUpdateComponent extends ClientUpdateComponent { final boolean hidewebchatip = configuration.getBoolean("hidewebchatip", false); final boolean trust_client_name = configuration.getBoolean("trustclientname", false); final boolean useplayerloginip = configuration.getBoolean("use-player-login-ip", true); + final boolean checkuserban = configuration.getBoolean("block-banned-player-chat", true); final boolean requireplayerloginip = configuration.getBoolean("require-player-login-ip", false); final float webchatInterval = configuration.getFloat("webchat-interval", 1); final String spammessage = plugin.configuration.getString("spammessage", "You may only chat once every %interval% seconds."); @@ -37,6 +38,7 @@ public class InternalClientUpdateComponent extends ClientUpdateComponent { this.trustclientname = trust_client_name; this.use_player_login_ip = useplayerloginip; this.require_player_login_ip = requireplayerloginip; + this.check_user_ban = checkuserban; onMessageReceived.addListener(new Listener() { @Override public void triggered(Message t) { diff --git a/src/main/java/org/dynmap/JsonFileClientUpdateComponent.java b/src/main/java/org/dynmap/JsonFileClientUpdateComponent.java index 518d6e57..fb239897 100644 --- a/src/main/java/org/dynmap/JsonFileClientUpdateComponent.java +++ b/src/main/java/org/dynmap/JsonFileClientUpdateComponent.java @@ -13,7 +13,9 @@ import java.util.List; import java.util.Timer; import java.util.TimerTask; +import org.bukkit.OfflinePlayer; import org.bukkit.World; +import org.dynmap.web.HttpStatus; import org.dynmap.web.Json; import org.json.simple.JSONArray; import org.json.simple.JSONObject; @@ -31,6 +33,7 @@ public class JsonFileClientUpdateComponent extends ClientUpdateComponent { private boolean useplayerloginip; private boolean requireplayerloginip; private boolean trust_client_name; + private boolean checkuserban; private HashMap useralias = new HashMap(); private int aliasindex = 1; @@ -45,6 +48,7 @@ public class JsonFileClientUpdateComponent extends ClientUpdateComponent { useplayerloginip = configuration.getBoolean("use-player-login-ip", true); requireplayerloginip = configuration.getBoolean("require-player-login-ip", false); trust_client_name = configuration.getBoolean("trustclientname", false); + checkuserban = configuration.getBoolean("block-banned-player-chat", true); MapManager.scheduleDelayedJob(new Runnable() { @Override @@ -230,6 +234,13 @@ public class JsonFileClientUpdateComponent extends ClientUpdateComponent { if(ids != null) { name = ids.get(0); isip = false; + if(checkuserban) { + OfflinePlayer p = plugin.getServer().getOfflinePlayer(name); + if((p != null) && p.isBanned()) { + Log.info("Ignore message from '" + ip + "' - banned player (" + name + ")"); + return; + } + } } else if(requireplayerloginip) { Log.info("Ignore message from '" + name + "' - no matching player login recorded"); diff --git a/src/main/java/org/dynmap/web/handlers/SendMessageHandler.java b/src/main/java/org/dynmap/web/handlers/SendMessageHandler.java index eefca517..088cc79c 100644 --- a/src/main/java/org/dynmap/web/handlers/SendMessageHandler.java +++ b/src/main/java/org/dynmap/web/handlers/SendMessageHandler.java @@ -7,6 +7,7 @@ import java.util.LinkedList; import java.util.List; import java.util.logging.Logger; +import org.bukkit.OfflinePlayer; import org.dynmap.DynmapPlugin; import org.dynmap.Event; import org.dynmap.Log; @@ -30,6 +31,7 @@ public class SendMessageHandler implements HttpHandler { public boolean trustclientname = false; public boolean use_player_login_ip = false; public boolean require_player_login_ip = false; + public boolean check_user_ban = false; public DynmapPlugin plug_in; public String spamMessage = "\"You may only chat once every %interval% seconds.\""; private HashMap disallowedUsers = new HashMap(); @@ -69,6 +71,17 @@ public class SendMessageHandler implements HttpHandler { if(use_player_login_ip) { List ids = plug_in.getIDsForIP(message.name); if(ids != null) { + String id = ids.get(0); + if(check_user_ban) { + OfflinePlayer p = plug_in.getServer().getOfflinePlayer(id); + if((p != null) && p.isBanned()) { + Log.info("Ignore message from '" + message.name + "' - banned player (" + id + ")"); + response.fields.put("Content-Length", "0"); + response.status = HttpStatus.Forbidden; + response.getBody(); + return; + } + } message.name = ids.get(0); isip = false; } diff --git a/src/main/resources/configuration.txt b/src/main/resources/configuration.txt index b076978e..5ea891fa 100644 --- a/src/main/resources/configuration.txt +++ b/src/main/resources/configuration.txt @@ -31,6 +31,8 @@ components: use-player-login-ip: true # (optional) if use-player-login-ip is true, setting this to true will cause chat messages not matching a known player IP to be ignored require-player-login-ip: false + # (optional) block player login IDs that are banned from chatting + block-banned-player-chat: true # # Optional - make players hidden when they are inside/underground/in shadows (#=light level: 0=full shadow,15=sky) # hideifshadow: 4 # # Optional - make player hidden when they are under cover (#=sky light level,0=underground,15=open to sky) @@ -47,6 +49,7 @@ components: # includehiddenplayers: false # use-player-login-ip: false # require-player-login-ip: false + # block-banned-player-chat: true # hideifshadow: 0 # hideifundercover: 0 # hideifsneaking: false