From 6f128bc2b7a8191d73d0fc6dcabab156c7ff531d Mon Sep 17 00:00:00 2001 From: Dawson Hessler Date: Wed, 22 Jan 2020 09:21:18 -0500 Subject: [PATCH] Updated antivpn for later version --- pom.xml | 8 +-- src/main/java/dev/brighten/pl/AntiVPN.java | 16 +++-- .../dev/brighten/pl/handlers/VPNHandler.java | 68 +++++++++++-------- .../brighten/pl/listeners/JoinListener.java | 8 +++ .../dev/brighten/pl/utils/JsonReader.java | 32 --------- src/main/java/dev/brighten/pl/vpn/VPNAPI.java | 56 ++++++--------- .../java/dev/brighten/pl/vpn/VPNResponse.java | 24 +++---- 7 files changed, 92 insertions(+), 120 deletions(-) delete mode 100644 src/main/java/dev/brighten/pl/utils/JsonReader.java diff --git a/pom.xml b/pom.xml index 8ad200d..2ba7070 100644 --- a/pom.xml +++ b/pom.xml @@ -51,13 +51,7 @@ cc.funkemunky.plugins Atlas - 1.6.6 - provided - - - cc.funkemunky.utils - Atlas - 1.7 + 1.7.1 provided diff --git a/src/main/java/dev/brighten/pl/AntiVPN.java b/src/main/java/dev/brighten/pl/AntiVPN.java index 8296462..35b489f 100644 --- a/src/main/java/dev/brighten/pl/AntiVPN.java +++ b/src/main/java/dev/brighten/pl/AntiVPN.java @@ -3,6 +3,8 @@ package dev.brighten.pl; import cc.funkemunky.api.Atlas; import cc.funkemunky.api.reflections.types.WrappedClass; import cc.funkemunky.api.utils.MiscUtils; +import cc.funkemunky.api.utils.RunUtils; +import dev.brighten.pl.data.UserData; import dev.brighten.pl.handlers.AlertsHandler; import dev.brighten.pl.handlers.VPNHandler; import dev.brighten.pl.vpn.VPNAPI; @@ -41,11 +43,9 @@ public class AntiVPN extends JavaPlugin { return; } saveDefaultConfig(); + print(true, "scanner"); - //We use reflection and check versions to add backwards compatibility for the time being. - new WrappedClass(Atlas.class).getMethod("initializeScanner", - atlasVersion.startsWith("1.6") ? JavaPlugin.class : Plugin.class, boolean.class, boolean.class) - .invoke(atlasInstance, this, true, true); + Atlas.getInstance().initializeScanner(this, true, true); print(true, "vpn api and handlers"); vpnAPI = new VPNAPI(); @@ -56,6 +56,13 @@ public class AntiVPN extends JavaPlugin { alertsHandler = new AlertsHandler(); MiscUtils.printToConsole("&aCompleted startup."); + + RunUtils.taskTimer(() -> { + UserData.dataMap.values().stream() + .filter(user -> !user.getPlayer().hasPermission("kvpn.bypass") + && user.response != null && user.response.isProxy()) + .forEach(user -> user.getPlayer().kickPlayer("not checked")); + }, this, 20L, 40L); } public void disable() { @@ -66,7 +73,6 @@ public class AntiVPN extends JavaPlugin { Bukkit.getScheduler().cancelTasks(this); print("Save", "database"); - AntiVPN.INSTANCE.vpnAPI.database.saveDatabase(); print(false, "threads"); AntiVPN.INSTANCE.vpnAPI.vpnThread.shutdownNow(); diff --git a/src/main/java/dev/brighten/pl/handlers/VPNHandler.java b/src/main/java/dev/brighten/pl/handlers/VPNHandler.java index 0f2bb74..889d9bd 100644 --- a/src/main/java/dev/brighten/pl/handlers/VPNHandler.java +++ b/src/main/java/dev/brighten/pl/handlers/VPNHandler.java @@ -15,40 +15,34 @@ import org.bukkit.Bukkit; import org.bukkit.entity.Player; import java.util.*; +import java.util.concurrent.LinkedBlockingDeque; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; public class VPNHandler { - private LinkedList> queue = new LinkedList<>(); - private AtomicBoolean checking = new AtomicBoolean(false); - private List> toAdd = new ArrayList<>(); + private Deque> queue = new LinkedBlockingDeque<>(); public Map toKick = new HashMap<>(); public void run() { - AntiVPN.INSTANCE.vpnAPI.vpnThread.scheduleAtFixedRate(() -> { - if(!checking.get()) { - Tuple element; - checking.set(true); - while(queue.size() > 0 && (element = queue.poll()) != null) { - val response = AntiVPN.INSTANCE.vpnAPI.getResponse(element.two); - if(response != null && response.isSuccess()) { - UserData data = UserData.getData(element.one); - data.response = response; - VPNCheckEvent event = new VPNCheckEvent(response); - if(Config.fireEvent) - RunUtils.task(() -> Bukkit.getPluginManager().callEvent(event), AntiVPN.INSTANCE); + AntiVPN.INSTANCE.vpnAPI.vpnThread.execute(() -> { + Tuple element; + while(queue.size() > 0 && (element = queue.poll()) != null) { + val response = AntiVPN.INSTANCE.vpnAPI.getResponse(element.two); + if(response != null && response.isSuccess()) { + UserData data = UserData.getData(element.one); + data.response = response; + VPNCheckEvent event = new VPNCheckEvent(response); + if(Config.fireEvent) + RunUtils.task(() -> Bukkit.getPluginManager().callEvent(event), AntiVPN.INSTANCE); - if(response.isProxy()) { - if(Config.alertStaff) alert(response, element.one); - if(Config.kickPlayers) kick(response, element.one); - } - } else MiscUtils.printToConsole((response != null) + "?"); - } - checking.set(false); - queue.addAll(toAdd); - toAdd.clear(); + if(response.isProxy()) { + if(Config.alertStaff) alert(response, element.one); + if(Config.kickPlayers) kick(response, element.one); + } + } else MiscUtils.printToConsole((response != null) + "?"); } - }, 0L, 20L, TimeUnit.MILLISECONDS); + run(); + }); } private void alert(VPNResponse response, UUID uuid) { if(Config.alertBungee) { @@ -75,8 +69,26 @@ public class VPNHandler { } public void checkPlayer(Player player) { - if(!checking.get()) - queue.add(new Tuple<>(player.getUniqueId(), player.getAddress().getAddress().getHostAddress())); - else toAdd.add(new Tuple<>(player.getUniqueId(), player.getAddress().getAddress().getHostAddress())); + AntiVPN.INSTANCE.vpnAPI.vpnThread.execute(() -> { + val element = new Tuple<>(player.getUniqueId(), player.getAddress().getAddress().getHostAddress()); + val response = AntiVPN.INSTANCE.vpnAPI.getResponse(element.two); + if(response != null && response.isSuccess()) { + UserData data = UserData.getData(element.one); + data.response = response; + VPNCheckEvent event = new VPNCheckEvent(response); + if(Config.fireEvent) + RunUtils.task(() -> Bukkit.getPluginManager().callEvent(event), AntiVPN.INSTANCE); + + if(response.isProxy()) { + if(Config.alertStaff) alert(response, element.one); + if(Config.kickPlayers) kick(response, element.one); + } + } else { + if(response == null) { + if(Config.alertStaff) alert(response, element.one); + if(Config.kickPlayers) kick(response, element.one); + } + } + }); } } diff --git a/src/main/java/dev/brighten/pl/listeners/JoinListener.java b/src/main/java/dev/brighten/pl/listeners/JoinListener.java index ac2c07c..9783d70 100644 --- a/src/main/java/dev/brighten/pl/listeners/JoinListener.java +++ b/src/main/java/dev/brighten/pl/listeners/JoinListener.java @@ -1,6 +1,7 @@ package dev.brighten.pl.listeners; import cc.funkemunky.api.utils.Init; +import cc.funkemunky.api.utils.RunUtils; import dev.brighten.pl.AntiVPN; import dev.brighten.pl.data.UserData; import org.bukkit.event.EventHandler; @@ -13,6 +14,7 @@ public class JoinListener implements Listener { @EventHandler(priority = EventPriority.MONITOR) public void onJoin(PlayerJoinEvent event) { + if(event.getPlayer().hasPermission("kvpn.bypass")) return; if(AntiVPN.INSTANCE.vpnHandler.toKick.containsKey(event.getPlayer().getUniqueId())) { event.getPlayer().kickPlayer(AntiVPN.INSTANCE.vpnHandler.toKick .compute(event.getPlayer().getUniqueId(), @@ -22,6 +24,12 @@ public class JoinListener implements Listener { UserData data = UserData.getData(event.getPlayer().getUniqueId()); data.getPlayer(); AntiVPN.INSTANCE.vpnHandler.checkPlayer(event.getPlayer()); + + RunUtils.taskLater(() -> { + if(data.response == null) { + data.getPlayer().kickPlayer("not checked."); + } + }, AntiVPN.INSTANCE, 120L); } } diff --git a/src/main/java/dev/brighten/pl/utils/JsonReader.java b/src/main/java/dev/brighten/pl/utils/JsonReader.java deleted file mode 100644 index df61e2d..0000000 --- a/src/main/java/dev/brighten/pl/utils/JsonReader.java +++ /dev/null @@ -1,32 +0,0 @@ -package dev.brighten.pl.utils; - -import cc.funkemunky.carbon.utils.json.JSONException; -import cc.funkemunky.carbon.utils.json.JSONObject; - -import java.io.*; -import java.net.URL; -import java.nio.charset.Charset; - -public class JsonReader { - - private static String readAll(Reader rd) throws IOException { - StringBuilder sb = new StringBuilder(); - int cp; - while ((cp = rd.read()) != -1) { - sb.append((char) cp); - } - return sb.toString(); - } - - public static JSONObject readJsonFromUrl(String url) throws IOException, JSONException { - InputStream is = new URL(url).openStream(); - try { - BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8"))); - String jsonText = readAll(rd); - JSONObject json = new JSONObject(jsonText); - return json; - } finally { - is.close(); - } - } -} \ No newline at end of file diff --git a/src/main/java/dev/brighten/pl/vpn/VPNAPI.java b/src/main/java/dev/brighten/pl/vpn/VPNAPI.java index ea93354..926a476 100644 --- a/src/main/java/dev/brighten/pl/vpn/VPNAPI.java +++ b/src/main/java/dev/brighten/pl/vpn/VPNAPI.java @@ -1,40 +1,31 @@ package dev.brighten.pl.vpn; -import cc.funkemunky.api.utils.MathUtils; import cc.funkemunky.api.utils.MiscUtils; -import cc.funkemunky.api.utils.RunUtils; -import cc.funkemunky.carbon.db.Database; -import cc.funkemunky.carbon.db.StructureSet; -import cc.funkemunky.carbon.db.flatfile.FlatfileDatabase; -import cc.funkemunky.carbon.utils.Pair; -import cc.funkemunky.carbon.utils.json.JSONException; -import cc.funkemunky.carbon.utils.json.JSONObject; -import dev.brighten.pl.AntiVPN; +import dev.brighten.db.db.Database; +import dev.brighten.db.db.FlatfileDatabase; +import dev.brighten.db.db.StructureSet; +import dev.brighten.db.utils.json.JSONException; +import dev.brighten.db.utils.json.JSONObject; +import dev.brighten.db.utils.json.JsonReader; import dev.brighten.pl.utils.Config; -import dev.brighten.pl.utils.JsonReader; import lombok.val; import org.bukkit.entity.Player; import java.io.IOException; -import java.util.Objects; +import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; public class VPNAPI { public Database database; - public ScheduledExecutorService vpnThread; + public ExecutorService vpnThread; public VPNAPI() { MiscUtils.printToConsole("&cLoading VPNHandler&7..."); MiscUtils.printToConsole("&7Setting up Carbon database &eVPN-Cache&7..."); database = new FlatfileDatabase("VPN-Cache"); MiscUtils.printToConsole("&7Registering listener..."); - vpnThread = Executors.newScheduledThreadPool(2); - - //Running saveDatabase task. - MiscUtils.printToConsole("&7Running database saving task..."); - RunUtils.taskTimerAsync(database::saveDatabase, AntiVPN.INSTANCE, 0, 20 * 60 * 2); + vpnThread = Executors.newFixedThreadPool(2); } public VPNResponse getResponse(Player player) { @@ -49,23 +40,13 @@ public class VPNAPI { val json = response.toJson(); + StructureSet set = database.create(response.getIp()); - val pairs = json.keySet().stream().map(key -> { - try { - return new Pair<>(key, json.get(key)); - } catch (JSONException e) { - e.printStackTrace(); - } - return null; - }).filter(Objects::nonNull).toArray(Pair[]::new); - - StructureSet set = database.createStructure(response.getIp(), pairs); - - if(MathUtils.getDelta(set.getObjects().size(), pairs.length) > 1) { - MiscUtils.printToConsole("&cThere was an error saving response for IP &f" - + response.getIp() + "&c. &7Removing from database..."); - database.remove(response.getIp()); + for (String key : json.keySet()) { + set.input(key, json.get(key)); } + + set.save(database); } catch (JSONException e) { e.printStackTrace(); } @@ -74,10 +55,13 @@ public class VPNAPI { public VPNResponse getIfCached(String ipAddress) { if(database.contains(ipAddress)) { - return VPNResponse.fromSet(database.get(ipAddress)); - } else { - return null; + val list = database.get(ipAddress); + + if(list.size() > 0) + return VPNResponse.fromSet(database.get(ipAddress).get(0)); } + + return null; } public VPNResponse getResponse(String ipAddress) { diff --git a/src/main/java/dev/brighten/pl/vpn/VPNResponse.java b/src/main/java/dev/brighten/pl/vpn/VPNResponse.java index 860a406..9ebe89b 100644 --- a/src/main/java/dev/brighten/pl/vpn/VPNResponse.java +++ b/src/main/java/dev/brighten/pl/vpn/VPNResponse.java @@ -1,8 +1,8 @@ package dev.brighten.pl.vpn; -import cc.funkemunky.carbon.db.StructureSet; -import cc.funkemunky.carbon.utils.json.JSONException; -import cc.funkemunky.carbon.utils.json.JSONObject; +import dev.brighten.db.db.StructureSet; +import dev.brighten.db.utils.json.JSONException; +import dev.brighten.db.utils.json.JSONObject; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; @@ -54,14 +54,14 @@ public class VPNResponse { } public static VPNResponse fromSet(StructureSet set) { - return new VPNResponse(set.getField("ip"), set.getField("countryName"), - set.containsKey("method") ? set.getField("method") : "N/A", - set.getField("countryCode"), set.getField("state"), - set.getField("city"), set.getField("isp"), - set.getField("timeZone"), set.getField("locationString"), - set.getField("proxy"), set.getField("usedAdvanced"), - set.getField("cached"), set.getField("success"), - set.containsKey("score") ? set.getDouble("score") : -1, - set.getField("queriesLeft")); + return new VPNResponse(set.getObject("ip"), set.getObject("countryName"), + set.contains("method") ? set.getObject("method") : "N/A", + set.getObject("countryCode"), set.getObject("state"), + set.getObject("city"), set.getObject("isp"), + set.getObject("timeZone"), set.getObject("locationString"), + set.getObject("proxy"), set.getObject("usedAdvanced"), + set.getObject("cached"), set.getObject("success"), + set.contains("score") ? (double)set.getObject("score") : -1, + set.getObject("queriesLeft")); } }