From d2f236cb74dafed4dea3b077a1b301a8e28c17d3 Mon Sep 17 00:00:00 2001 From: comendantmc <2b2t.org.ru@gmail.com> Date: Sat, 23 Jul 2022 23:24:45 +0200 Subject: [PATCH 1/5] Add captcha whitelist made with redis --- VERSION | 2 +- build.gradle | 1 + .../net/elytrium/limbofilter/LimboFilter.java | 25 ++++++++++++++++++- .../net/elytrium/limbofilter/Settings.java | 25 ++++++++++++++++++- .../limbofilter/listener/FilterListener.java | 2 +- 5 files changed, 51 insertions(+), 4 deletions(-) diff --git a/VERSION b/VERSION index 90a27f9..af0b7dd 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.0.5 +1.0.6 diff --git a/build.gradle b/build.gradle index f1112f6..5837c40 100644 --- a/build.gradle +++ b/build.gradle @@ -47,6 +47,7 @@ dependencies { compileOnly("org.apache.logging.log4j:log4j-core:2.17.2") implementation("org.bstats:bstats-velocity:3.0.0") + implementation("redis.clients:jedis:4.2.3") compileOnly("com.github.spotbugs:spotbugs-annotations:4.6.0") } diff --git a/src/main/java/net/elytrium/limbofilter/LimboFilter.java b/src/main/java/net/elytrium/limbofilter/LimboFilter.java index dfb29e2..8e83e99 100644 --- a/src/main/java/net/elytrium/limbofilter/LimboFilter.java +++ b/src/main/java/net/elytrium/limbofilter/LimboFilter.java @@ -45,6 +45,7 @@ import net.elytrium.java.commons.mc.serialization.Serializer; import net.elytrium.java.commons.mc.serialization.Serializers; import net.elytrium.java.commons.updates.UpdatesChecker; +import net.elytrium.limboapi.BuildConstants; import net.elytrium.limboapi.api.Limbo; import net.elytrium.limboapi.api.LimboFactory; import net.elytrium.limboapi.api.chunk.Dimension; @@ -72,11 +73,13 @@ import org.bstats.velocity.Metrics; import org.checkerframework.checker.nullness.qual.MonotonicNonNull; import org.slf4j.Logger; +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPool; @Plugin( id = "limbofilter", name = "LimboFilter", - version = BuildConstants.FILTER_VERSION, + version = BuildConstants.LIMBO_VERSION, url = "https://elytrium.net/", authors = { "hevav", @@ -113,6 +116,8 @@ public class LimboFilter { private CachedPackets packets; private boolean logsDisabled; + private JedisPool jedisPool; + @Inject public LimboFilter(Logger logger, ProxyServer server, Metrics.Factory metricsFactory, @DataDirectory Path dataDirectory) { setLogger(logger); @@ -163,6 +168,16 @@ public void onProxyInitialization(ProxyInitializeEvent event) { public void reload() { Settings.IMP.reload(this.configFile, Settings.IMP.PREFIX); + if (Settings.IMP.MAIN.REDIS.ENABLE) { + this.jedisPool = new JedisPool(Settings.IMP.MAIN.REDIS.HOST, Settings.IMP.MAIN.REDIS.PORT); + + try (Jedis jedis = this.jedisPool.getResource()) { + if (jedis.ping().equals("PONG")) { + LOGGER.info("Redis connected"); + } + } + } + ComponentSerializer serializer = Serializers.valueOf(Settings.IMP.SERIALIZER.toUpperCase(Locale.ROOT)).getSerializer(); if (serializer == null) { LOGGER.warn("The specified serializer could not be founded, using default. (LEGACY_AMPERSAND)"); @@ -309,6 +324,14 @@ public boolean shouldCheck(Player player) { } public boolean shouldCheck(String nickname, InetAddress ip) { + if (this.jedisPool != null && Settings.IMP.MAIN.CAPTCHA_WHITELIST.ENABLE) { + try (Jedis jedis = this.jedisPool.getResource()) { + String sanitizedNickname = nickname.replaceAll("[^a-zA-Z0-9_]+", ""); // Probably no need, but I did it anyway + return !jedis.exists("captcha_whitelist_nickname:" + sanitizedNickname) + || !jedis.exists("captcha_whitelist_ip:" + ip.getHostAddress()); + } + } + if (this.cachedFilterChecks.containsKey(nickname)) { return !ip.equals(this.cachedFilterChecks.get(nickname).getInetAddress()); } else { diff --git a/src/main/java/net/elytrium/limbofilter/Settings.java b/src/main/java/net/elytrium/limbofilter/Settings.java index d0d5fef..21ee793 100644 --- a/src/main/java/net/elytrium/limbofilter/Settings.java +++ b/src/main/java/net/elytrium/limbofilter/Settings.java @@ -20,6 +20,7 @@ import java.util.List; import java.util.Map; import net.elytrium.java.commons.config.YamlConfig; +import net.elytrium.limboapi.BuildConstants; public class Settings extends YamlConfig { @@ -27,7 +28,7 @@ public class Settings extends YamlConfig { public static final Settings IMP = new Settings(); @Final - public String VERSION = BuildConstants.FILTER_VERSION; + public String VERSION = BuildConstants.LIMBO_VERSION; @Comment({ "Available serializers:", @@ -282,5 +283,27 @@ public static class COORDS { public double FALLING_CHECK_YAW = 90; public double FALLING_CHECK_PITCH = 10; } + + + @Create + public REDIS REDIS; + + @Comment("Redis connection settings") + public static class REDIS { + + public boolean ENABLE = false; + public String HOST = "localhost"; + public int PORT = 6379; + } + + + @Create + public CAPTCHA_WHITELIST CAPTCHA_WHITELIST; + + @Comment("Whitelist usernames or IP addresses to not show captcha") + public static class CAPTCHA_WHITELIST { + + public boolean ENABLE = false; + } } } diff --git a/src/main/java/net/elytrium/limbofilter/listener/FilterListener.java b/src/main/java/net/elytrium/limbofilter/listener/FilterListener.java index 880e5b3..c8fb1c9 100644 --- a/src/main/java/net/elytrium/limbofilter/listener/FilterListener.java +++ b/src/main/java/net/elytrium/limbofilter/listener/FilterListener.java @@ -49,7 +49,7 @@ public void onProxyConnect(PreLoginEvent event) { public void onLogin(LoginLimboRegisterEvent event) { Player player = event.getPlayer(); if (this.plugin.shouldCheck(player)) { - event.addCallback(() -> this.plugin.sendToFilterServer(player)); + event.addOnJoinCallback(() -> this.plugin.sendToFilterServer(player)); } } From c4d6717481b77a81c20ac16b7fd1c0108a20013d Mon Sep 17 00:00:00 2001 From: comendantmc <2b2t.org.ru@gmail.com> Date: Fri, 29 Jul 2022 23:27:29 +0200 Subject: [PATCH 2/5] Fix captcha whitelist checking rule --- src/main/java/net/elytrium/limbofilter/LimboFilter.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/elytrium/limbofilter/LimboFilter.java b/src/main/java/net/elytrium/limbofilter/LimboFilter.java index 8e83e99..b463e81 100644 --- a/src/main/java/net/elytrium/limbofilter/LimboFilter.java +++ b/src/main/java/net/elytrium/limbofilter/LimboFilter.java @@ -327,8 +327,10 @@ public boolean shouldCheck(String nickname, InetAddress ip) { if (this.jedisPool != null && Settings.IMP.MAIN.CAPTCHA_WHITELIST.ENABLE) { try (Jedis jedis = this.jedisPool.getResource()) { String sanitizedNickname = nickname.replaceAll("[^a-zA-Z0-9_]+", ""); // Probably no need, but I did it anyway - return !jedis.exists("captcha_whitelist_nickname:" + sanitizedNickname) - || !jedis.exists("captcha_whitelist_ip:" + ip.getHostAddress()); + if (jedis.exists("captcha_whitelist_nickname:" + sanitizedNickname) + || jedis.exists("captcha_whitelist_ip:" + ip.getHostAddress())) { + return false; + } } } From 6a3f914e949a888b9b4854a25c68a370064a8a9d Mon Sep 17 00:00:00 2001 From: comendantmc <2b2t.org.ru@gmail.com> Date: Thu, 4 Aug 2022 11:37:53 +0200 Subject: [PATCH 3/5] Add option to override other checks, optimize regex --- src/main/java/net/elytrium/limbofilter/LimboFilter.java | 7 ++++++- src/main/java/net/elytrium/limbofilter/Settings.java | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/elytrium/limbofilter/LimboFilter.java b/src/main/java/net/elytrium/limbofilter/LimboFilter.java index b463e81..64cae3f 100644 --- a/src/main/java/net/elytrium/limbofilter/LimboFilter.java +++ b/src/main/java/net/elytrium/limbofilter/LimboFilter.java @@ -42,6 +42,8 @@ import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import net.elytrium.java.commons.mc.serialization.Serializer; import net.elytrium.java.commons.mc.serialization.Serializers; import net.elytrium.java.commons.updates.UpdatesChecker; @@ -117,6 +119,7 @@ public class LimboFilter { private boolean logsDisabled; private JedisPool jedisPool; + private final Matcher nicknameMatcher = Pattern.compile("[^a-zA-Z0-9_]+").matcher(""); @Inject public LimboFilter(Logger logger, ProxyServer server, Metrics.Factory metricsFactory, @DataDirectory Path dataDirectory) { @@ -326,10 +329,12 @@ public boolean shouldCheck(Player player) { public boolean shouldCheck(String nickname, InetAddress ip) { if (this.jedisPool != null && Settings.IMP.MAIN.CAPTCHA_WHITELIST.ENABLE) { try (Jedis jedis = this.jedisPool.getResource()) { - String sanitizedNickname = nickname.replaceAll("[^a-zA-Z0-9_]+", ""); // Probably no need, but I did it anyway + String sanitizedNickname = this.nicknameMatcher.reset(nickname).replaceAll(""); // Probably no need, but I did it anyway if (jedis.exists("captcha_whitelist_nickname:" + sanitizedNickname) || jedis.exists("captcha_whitelist_ip:" + ip.getHostAddress())) { return false; + } else if (Settings.IMP.MAIN.CAPTCHA_WHITELIST.OVERRIDE_OTHER_CHECKS) { + return true; } } } diff --git a/src/main/java/net/elytrium/limbofilter/Settings.java b/src/main/java/net/elytrium/limbofilter/Settings.java index 21ee793..644c91a 100644 --- a/src/main/java/net/elytrium/limbofilter/Settings.java +++ b/src/main/java/net/elytrium/limbofilter/Settings.java @@ -304,6 +304,7 @@ public static class REDIS { public static class CAPTCHA_WHITELIST { public boolean ENABLE = false; + public boolean OVERRIDE_OTHER_CHECKS = false; } } } From 9f8b48bfb9b99dc1fc4f81ebcdf2a58c499d6c01 Mon Sep 17 00:00:00 2001 From: comendantmc <63936053+comendantmc@users.noreply.github.com> Date: Sat, 14 Jan 2023 18:08:15 +0100 Subject: [PATCH 4/5] Fix color style --- src/main/java/net/elytrium/limbofilter/LimboFilter.java | 2 +- src/main/java/net/elytrium/limbofilter/Settings.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/elytrium/limbofilter/LimboFilter.java b/src/main/java/net/elytrium/limbofilter/LimboFilter.java index aa1b5c0..6392832 100644 --- a/src/main/java/net/elytrium/limbofilter/LimboFilter.java +++ b/src/main/java/net/elytrium/limbofilter/LimboFilter.java @@ -44,10 +44,10 @@ import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; import java.util.regex.Pattern; -import net.elytrium.limboapi.BuildConstants; import net.elytrium.commons.kyori.serialization.Serializer; import net.elytrium.commons.kyori.serialization.Serializers; import net.elytrium.commons.utils.updates.UpdatesChecker; +import net.elytrium.limboapi.BuildConstants; import net.elytrium.limboapi.api.Limbo; import net.elytrium.limboapi.api.LimboFactory; import net.elytrium.limboapi.api.chunk.VirtualWorld; diff --git a/src/main/java/net/elytrium/limbofilter/Settings.java b/src/main/java/net/elytrium/limbofilter/Settings.java index 1a40fda..61999a1 100644 --- a/src/main/java/net/elytrium/limbofilter/Settings.java +++ b/src/main/java/net/elytrium/limbofilter/Settings.java @@ -19,9 +19,9 @@ import java.util.List; import java.util.Map; -import net.elytrium.limboapi.BuildConstants; import net.elytrium.commons.config.YamlConfig; import net.elytrium.commons.kyori.serialization.Serializers; +import net.elytrium.limboapi.BuildConstants; import net.elytrium.limboapi.api.chunk.Dimension; import net.elytrium.limboapi.api.player.GameMode; import net.elytrium.limbofilter.handler.BotFilterSessionHandler; From e4862fd0167d13edc1f1887c45cbcb5efe9118a7 Mon Sep 17 00:00:00 2001 From: comendantmc <63936053+comendantmc@users.noreply.github.com> Date: Mon, 30 Jan 2023 23:59:50 +0100 Subject: [PATCH 5/5] Remove duplicate settings param --- .../java/net/elytrium/limbofilter/Settings.java | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/src/main/java/net/elytrium/limbofilter/Settings.java b/src/main/java/net/elytrium/limbofilter/Settings.java index 5dfaeba..541bc51 100644 --- a/src/main/java/net/elytrium/limbofilter/Settings.java +++ b/src/main/java/net/elytrium/limbofilter/Settings.java @@ -447,22 +447,6 @@ public static class STRINGS { public String CAPTCHA_NOT_READY_YET = "{PRFX} Captcha is not ready yet. Try again in a few seconds"; } - @Create - public COORDS COORDS; - - public static class COORDS { - - public double CAPTCHA_X = 0; - @Comment("If your server supports Minecraft 1.7, don't set captcha-y to 0. https://media.discordapp.net/attachments/878241549857738793/915165038464098314/unknown.png") - public double CAPTCHA_Y = 0; - public double CAPTCHA_Z = 0; - public double CAPTCHA_YAW = 90; - public double CAPTCHA_PITCH = 38; - public double FALLING_CHECK_YAW = 90; - public double FALLING_CHECK_PITCH = 10; - } - - @Create public REDIS REDIS;