mirror of
https://github.com/funkemunky/AntiVPN.git
synced 2026-06-09 21:27:40 +00:00
Updated antivpn for later version
This commit is contained in:
@@ -51,13 +51,7 @@
|
||||
<dependency>
|
||||
<groupId>cc.funkemunky.plugins</groupId>
|
||||
<artifactId>Atlas</artifactId>
|
||||
<version>1.6.6</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cc.funkemunky.utils</groupId>
|
||||
<artifactId>Atlas</artifactId>
|
||||
<version>1.7</version>
|
||||
<version>1.7.1</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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<Tuple<UUID, String>> queue = new LinkedList<>();
|
||||
private AtomicBoolean checking = new AtomicBoolean(false);
|
||||
private List<Tuple<UUID, String>> toAdd = new ArrayList<>();
|
||||
private Deque<Tuple<UUID, String>> queue = new LinkedBlockingDeque<>();
|
||||
public Map<UUID, String> toKick = new HashMap<>();
|
||||
|
||||
public void run() {
|
||||
AntiVPN.INSTANCE.vpnAPI.vpnThread.scheduleAtFixedRate(() -> {
|
||||
if(!checking.get()) {
|
||||
Tuple<UUID, String> 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<UUID, String> 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);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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) {
|
||||
|
||||
@@ -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"));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user