diff --git a/Assembly/dependency-reduced-pom.xml b/Assembly/dependency-reduced-pom.xml
new file mode 100644
index 0000000..bacbc06
--- /dev/null
+++ b/Assembly/dependency-reduced-pom.xml
@@ -0,0 +1,42 @@
+
+
+
+ AntiVPN
+ dev.brighten.antivpn
+ 1.0-SNAPSHOT
+
+ 4.0.0
+ Assembly
+
+
+
+ maven-shade-plugin
+ 3.1.0
+
+
+ package
+
+ shade
+
+
+ false
+
+
+
+
+
+
+
+
+ cc.funkemunky.utils
+ lombok
+ 1.18.0
+ provided
+
+
+
+ 8
+ 8
+
+
+
diff --git a/Assembly/pom.xml b/Assembly/pom.xml
new file mode 100644
index 0000000..cdd2d45
--- /dev/null
+++ b/Assembly/pom.xml
@@ -0,0 +1,61 @@
+
+
+
+ AntiVPN
+ dev.brighten.antivpn
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ Assembly
+
+
+ 8
+ 8
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.1.0
+
+
+ package
+
+ shade
+
+
+ false
+
+
+
+
+
+
+
+
+
+ dev.brighten.antivpn
+ Bungee
+ ${version}
+ compile
+
+
+ dev.brighten.antivpn
+ Common
+ ${version}
+ compile
+
+
+ dev.brighten.antivpn
+ Bukkit
+ ${version}
+ compile
+
+
+
+
\ No newline at end of file
diff --git a/Bukkit/dependency-reduced-pom.xml b/Bukkit/dependency-reduced-pom.xml
new file mode 100644
index 0000000..2d46501
--- /dev/null
+++ b/Bukkit/dependency-reduced-pom.xml
@@ -0,0 +1,29 @@
+
+
+
+ AntiVPN
+ dev.brighten.antivpn
+ 1.0-SNAPSHOT
+
+ 4.0.0
+ Bukkit
+
+
+ org.github.spigot
+ 1.13.2
+ 1.13.2
+ provided
+
+
+ cc.funkemunky.utils
+ lombok
+ 1.18.0
+ provided
+
+
+
+ 8
+ 8
+
+
+
diff --git a/Bukkit/pom.xml b/Bukkit/pom.xml
index 743f59d..6d087b7 100644
--- a/Bukkit/pom.xml
+++ b/Bukkit/pom.xml
@@ -11,6 +11,27 @@
Bukkit
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.7.0
+
+ 8
+ 8
+ -XDignore.symbol.file
+
+
+
+
+
+ src/main/resources
+ true
+
+
+
+
8
8
@@ -23,6 +44,12 @@
1.13.2
provided
+
+ dev.brighten.antivpn
+ Common
+ 1.0-SNAPSHOT
+ provided
+
\ No newline at end of file
diff --git a/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitConfig.java b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitConfig.java
new file mode 100644
index 0000000..44a5511
--- /dev/null
+++ b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitConfig.java
@@ -0,0 +1,37 @@
+package dev.brighten.antivpn.bukkit;
+
+import dev.brighten.antivpn.api.VPNConfig;
+import dev.brighten.antivpn.bukkit.util.ConfigDefault;
+
+public class BukkitConfig implements VPNConfig {
+ private final ConfigDefault licenseDefault = new ConfigDefault<>("",
+ "license", BukkitPlugin.pluginInstance), kickStringDefault =
+ new ConfigDefault<>("Proxies are not allowed on our server",
+ "kickMessage", BukkitPlugin.pluginInstance);
+ private final ConfigDefault cacheResultsDefault = new ConfigDefault<>(true,
+ "cachedResults", BukkitPlugin.pluginInstance);
+
+ private String license, kickMessage;
+ private boolean cacheResults;
+
+ @Override
+ public String getLicense() {
+ return license;
+ }
+
+ @Override
+ public boolean cachedResults() {
+ return cacheResults;
+ }
+
+ @Override
+ public String getKickString() {
+ return kickMessage;
+ }
+
+ public void update() {
+ license = licenseDefault.get();
+ kickMessage = kickStringDefault.get();
+ cacheResults = cacheResultsDefault.get();
+ }
+}
diff --git a/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitListener.java b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitListener.java
new file mode 100644
index 0000000..dca9565
--- /dev/null
+++ b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitListener.java
@@ -0,0 +1,61 @@
+package dev.brighten.antivpn.bukkit;
+
+import dev.brighten.antivpn.AntiVPN;
+import dev.brighten.antivpn.api.VPNExecutor;
+import org.bukkit.Bukkit;
+import org.bukkit.ChatColor;
+import org.bukkit.event.Event;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.HandlerList;
+import org.bukkit.event.Listener;
+import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
+import org.bukkit.scheduler.BukkitRunnable;
+import org.bukkit.scheduler.BukkitTask;
+
+import java.util.Optional;
+
+public class BukkitListener extends VPNExecutor implements Listener {
+
+ private BukkitTask cacheResetTask;
+ @Override
+ public void registerListeners() {
+ BukkitPlugin.pluginInstance.getServer().getPluginManager()
+ .registerEvents(this, BukkitPlugin.pluginInstance);
+ }
+
+ @Override
+ public void runCacheReset() {
+ cacheResetTask = new BukkitRunnable() {
+ public void run() {
+ resetCache();
+ }
+ }.runTaskTimerAsynchronously(BukkitPlugin.pluginInstance, 24000, 24000); //Reset cache every 20 minutes
+
+ HandlerList.unregisterAll(this);
+ threadExecutor.shutdown();
+ }
+
+ @Override
+ public void shutdown() {
+ if(cacheResetTask != null && !cacheResetTask.isCancelled()) cacheResetTask.cancel();
+ }
+
+ @EventHandler
+ public void onListener(final AsyncPlayerPreLoginEvent event) {
+ checkIp(event.getAddress().getHostAddress(), AntiVPN.getInstance().getConfig().cachedResults(), result -> {
+ if(result.isSuccess() && result.isProxy()) {
+ event.setLoginResult(AsyncPlayerPreLoginEvent.Result.KICK_OTHER);
+ event.setKickMessage(ChatColor.translateAlternateColorCodes('&',
+ AntiVPN.getInstance().getConfig().getKickString()));
+ Optional.ofNullable(Bukkit.getPlayer(event.getUniqueId())).ifPresent(player -> {
+ new BukkitRunnable() {
+ public void run() {
+ player.kickPlayer(ChatColor.translateAlternateColorCodes('&',
+ AntiVPN.getInstance().getConfig().getKickString()));
+ }
+ }.runTask(BukkitPlugin.pluginInstance);
+ });
+ }
+ });
+ }
+}
diff --git a/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitPlugin.java b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitPlugin.java
new file mode 100644
index 0000000..5b336bd
--- /dev/null
+++ b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitPlugin.java
@@ -0,0 +1,23 @@
+package dev.brighten.antivpn.bukkit;
+
+import dev.brighten.antivpn.AntiVPN;
+import org.bukkit.plugin.java.JavaPlugin;
+
+public class BukkitPlugin extends JavaPlugin {
+
+ public static BukkitPlugin pluginInstance;
+
+ public void onEnable() {
+ pluginInstance = this;
+
+ //Loading config
+ saveDefaultConfig();
+
+ AntiVPN.start(new BukkitConfig(), new BukkitListener());
+ }
+
+ @Override
+ public void onDisable() {
+ AntiVPN.getInstance().stop();
+ }
+}
diff --git a/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/util/ConfigDefault.java b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/util/ConfigDefault.java
new file mode 100644
index 0000000..8fd0d8f
--- /dev/null
+++ b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/util/ConfigDefault.java
@@ -0,0 +1,28 @@
+package dev.brighten.antivpn.bukkit.util;
+
+import lombok.AllArgsConstructor;
+import org.bukkit.plugin.Plugin;
+
+@AllArgsConstructor
+public class ConfigDefault {
+
+ private final A defaultValue;
+ private final String path;
+ private final Plugin plugin;
+
+ public A get() {
+ if(plugin.getConfig().get(path) != null)
+ return (A) plugin.getConfig().get(path);
+ else {
+ plugin.getConfig().set(path, defaultValue);
+ plugin.saveConfig();
+ return defaultValue;
+ }
+ }
+
+ public A set(A value) {
+ plugin.getConfig().set(path, value);
+
+ return value;
+ }
+}
diff --git a/Bukkit/src/main/resources/plugin.yml b/Bukkit/src/main/resources/plugin.yml
new file mode 100644
index 0000000..a2083e0
--- /dev/null
+++ b/Bukkit/src/main/resources/plugin.yml
@@ -0,0 +1,5 @@
+name: AntiVPN
+main: dev.brighten.antivpn.bukkit.BukkitPlugin
+version: ${project.version}
+author: funkemunky
+api-version: 1.13
diff --git a/Bungee/dependency-reduced-pom.xml b/Bungee/dependency-reduced-pom.xml
new file mode 100644
index 0000000..7c1fdf9
--- /dev/null
+++ b/Bungee/dependency-reduced-pom.xml
@@ -0,0 +1,29 @@
+
+
+
+ AntiVPN
+ dev.brighten.antivpn
+ 1.0-SNAPSHOT
+
+ 4.0.0
+ Bungee
+
+
+ org.github.bungee
+ BungeeCord-1.8
+ 1.8
+ provided
+
+
+ cc.funkemunky.utils
+ lombok
+ 1.18.0
+ provided
+
+
+
+ 8
+ 8
+
+
+
diff --git a/Bungee/pom.xml b/Bungee/pom.xml
index d82e0eb..8260b20 100644
--- a/Bungee/pom.xml
+++ b/Bungee/pom.xml
@@ -11,9 +11,45 @@
Bungee
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.7.0
+
+ 8
+ 8
+ -XDignore.symbol.file
+
+
+
+
+
+ src/main/resources
+ true
+
+
+
+
8
8
+
+
+ dev.brighten.antivpn
+ Common
+ 1.0-SNAPSHOT
+ provided
+
+
+ org.github.bungee
+ BungeeCord-1.8
+ 1.8
+ provided
+
+
+
\ No newline at end of file
diff --git a/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeConfig.java b/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeConfig.java
new file mode 100644
index 0000000..3891454
--- /dev/null
+++ b/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeConfig.java
@@ -0,0 +1,37 @@
+package dev.brighten.antivpn.bungee;
+
+import dev.brighten.antivpn.api.VPNConfig;
+import dev.brighten.antivpn.bungee.util.ConfigDefault;
+
+public class BungeeConfig implements VPNConfig { ;
+ private final ConfigDefault licenseDefault = new ConfigDefault<>("",
+ "license", BungeePlugin.pluginInstance), kickStringDefault =
+ new ConfigDefault<>("Proxies are not allowed on our server",
+ "kickMessage", BungeePlugin.pluginInstance);
+ private final ConfigDefault cacheResultsDefault = new ConfigDefault<>(true,
+ "cachedResults", BungeePlugin.pluginInstance);
+
+ private String license, kickMessage;
+ private boolean cacheResults;
+
+ @Override
+ public String getLicense() {
+ return license;
+ }
+
+ @Override
+ public boolean cachedResults() {
+ return cacheResults;
+ }
+
+ @Override
+ public String getKickString() {
+ return kickMessage;
+ }
+
+ public void update() {
+ license = licenseDefault.get();
+ kickMessage = kickStringDefault.get();
+ cacheResults = cacheResultsDefault.get();
+ }
+}
diff --git a/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeListener.java b/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeListener.java
new file mode 100644
index 0000000..5c634e8
--- /dev/null
+++ b/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeListener.java
@@ -0,0 +1,51 @@
+package dev.brighten.antivpn.bungee;
+
+import dev.brighten.antivpn.AntiVPN;
+import dev.brighten.antivpn.api.VPNExecutor;
+import net.md_5.bungee.api.ChatColor;
+import net.md_5.bungee.api.chat.TextComponent;
+import net.md_5.bungee.api.event.PostLoginEvent;
+import net.md_5.bungee.api.plugin.Listener;
+import net.md_5.bungee.api.scheduler.ScheduledTask;
+import net.md_5.bungee.event.EventHandler;
+
+import java.util.concurrent.TimeUnit;
+
+public class BungeeListener extends VPNExecutor implements Listener {
+
+ private ScheduledTask cacheResetTask;
+
+ @Override
+ public void registerListeners() {
+ BungeePlugin.pluginInstance.getProxy().getPluginManager()
+ .registerListener(BungeePlugin.pluginInstance, this);
+ }
+
+ @Override
+ public void runCacheReset() {
+ cacheResetTask = BungeePlugin.pluginInstance.getProxy().getScheduler().schedule(BungeePlugin.pluginInstance,
+ this::resetCache, 20, 20, TimeUnit.MINUTES);
+ }
+
+ @Override
+ public void shutdown() {
+ if(cacheResetTask != null) {
+ cacheResetTask.cancel();
+ cacheResetTask = null;
+ }
+ threadExecutor.shutdown();
+ BungeePlugin.pluginInstance.getProxy().getPluginManager().unregisterListener(this);
+ }
+
+ @EventHandler
+ public void onListener(final PostLoginEvent event) {
+ checkIp(event.getPlayer().getAddress().getAddress().getHostAddress(),
+ AntiVPN.getInstance().getConfig().cachedResults(), result -> {
+ if(result.isSuccess() && result.isProxy()) {
+ event.getPlayer().disconnect(TextComponent.fromLegacyText(ChatColor
+ .translateAlternateColorCodes('&',
+ AntiVPN.getInstance().getConfig().getKickString())));
+ }
+ });
+ }
+}
diff --git a/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeePlugin.java b/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeePlugin.java
new file mode 100644
index 0000000..4b03b87
--- /dev/null
+++ b/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeePlugin.java
@@ -0,0 +1,30 @@
+package dev.brighten.antivpn.bungee;
+
+import dev.brighten.antivpn.AntiVPN;
+import dev.brighten.antivpn.bungee.util.Config;
+import lombok.Getter;
+import net.md_5.bungee.api.plugin.Plugin;
+
+public class BungeePlugin extends Plugin {
+
+ public static BungeePlugin pluginInstance;
+
+ @Getter
+ private Config config;
+
+ @Override
+ public void onEnable() {
+ pluginInstance = this;
+
+ //Setting up config
+ config = new Config();
+
+ //Loading plugin
+ AntiVPN.start(new BungeeConfig(), new BungeeListener());
+ }
+
+ @Override
+ public void onDisable() {
+ AntiVPN.getInstance().stop();
+ }
+}
diff --git a/Bungee/src/main/java/dev/brighten/antivpn/bungee/util/Config.java b/Bungee/src/main/java/dev/brighten/antivpn/bungee/util/Config.java
new file mode 100644
index 0000000..28dc453
--- /dev/null
+++ b/Bungee/src/main/java/dev/brighten/antivpn/bungee/util/Config.java
@@ -0,0 +1,114 @@
+package dev.brighten.antivpn.bungee.util;
+
+import com.google.common.io.ByteStreams;
+import dev.brighten.antivpn.bungee.BungeePlugin;
+import net.md_5.bungee.api.ChatColor;
+import net.md_5.bungee.config.Configuration;
+import net.md_5.bungee.config.ConfigurationProvider;
+import net.md_5.bungee.config.YamlConfiguration;
+
+import java.io.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Author: nitramleo (Martin)
+ * Date created: 10-Aug-18
+ */
+public class Config {
+
+ private File file;
+ private Configuration configuration;
+
+ public Config() {
+ this.file = new File(BungeePlugin.pluginInstance.getDataFolder(), "config.yml");
+ try {
+ if (!this.file.exists()) {
+ if (!BungeePlugin.pluginInstance.getDataFolder().exists()) {
+ BungeePlugin.pluginInstance.getDataFolder().mkdir();
+ }
+ this.file.createNewFile();
+ try (final InputStream is = BungeePlugin.pluginInstance.getResourceAsStream("config.yml");
+ final OutputStream os = new FileOutputStream(this.file)) {
+ ByteStreams.copy(is, os);
+ }
+ }
+ this.configuration = ConfigurationProvider.getProvider(YamlConfiguration.class).load(this.file);
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void load() {
+ this.file = new File(BungeePlugin.pluginInstance.getDataFolder(), "config.yml");
+ try {
+ this.configuration = ConfigurationProvider.getProvider(YamlConfiguration.class).load(this.file);
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void save() {
+ try {
+ ConfigurationProvider.getProvider( YamlConfiguration.class).save(this.configuration, this.file);
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public Configuration getConfiguration() {
+ return this.configuration;
+ }
+
+ public File getFile() {
+ return this.file;
+ }
+
+ public double getDouble(final String path) {
+ if (this.configuration.get(path) != null) {
+ return this.configuration.getDouble(path);
+ }
+ return 0.0;
+ }
+
+ public int getInt(final String path) {
+ if (this.configuration.get(path) != null) {
+ return this.configuration.getInt(path);
+ }
+ return 0;
+ }
+
+ public Object get(final String path) {
+ return this.configuration.get(path);
+ }
+
+ public void set(final String path, final Object object) {
+ configuration.set(path, object);
+ }
+
+ public boolean getBoolean(final String path) {
+ return this.configuration.get(path) != null && this.configuration.getBoolean(path);
+ }
+
+ public String getString(final String path) {
+ if (this.configuration.get(path) != null) {
+ return ChatColor.translateAlternateColorCodes('&', this.configuration.getString(path));
+ }
+ return "String at path: " + path + " not found!";
+ }
+
+ public List getStringList(final String path) {
+ if (this.configuration.get(path) != null) {
+ final ArrayList strings = new ArrayList();
+ for (final String string : this.configuration.getStringList(path)) {
+ strings.add(ChatColor.translateAlternateColorCodes('&', string));
+ }
+ return strings;
+ }
+ return Arrays.asList("String List at path: " + path + " not found!");
+ }
+}
diff --git a/Bungee/src/main/java/dev/brighten/antivpn/bungee/util/ConfigDefault.java b/Bungee/src/main/java/dev/brighten/antivpn/bungee/util/ConfigDefault.java
new file mode 100644
index 0000000..7f430de
--- /dev/null
+++ b/Bungee/src/main/java/dev/brighten/antivpn/bungee/util/ConfigDefault.java
@@ -0,0 +1,28 @@
+package dev.brighten.antivpn.bungee.util;
+
+import dev.brighten.antivpn.bungee.BungeePlugin;
+import lombok.AllArgsConstructor;
+
+@AllArgsConstructor
+public class ConfigDefault {
+
+ private final A defaultValue;
+ private final String path;
+ private final BungeePlugin plugin;
+
+ public A get() {
+ if(plugin.getConfig().get(path) != null)
+ return (A) plugin.getConfig().get(path);
+ else {
+ plugin.getConfig().set(path, defaultValue);
+ plugin.getConfig().save();
+ return defaultValue;
+ }
+ }
+
+ public A set(A value) {
+ plugin.getConfig().set(path, value);
+
+ return value;
+ }
+}
diff --git a/Bungee/src/main/resources/bungee.yml b/Bungee/src/main/resources/bungee.yml
new file mode 100644
index 0000000..3b13698
--- /dev/null
+++ b/Bungee/src/main/resources/bungee.yml
@@ -0,0 +1,5 @@
+name: AntiVPN
+main: dev.brighten.anticheat.bungee.BungeePlugin
+description: A simple and fast antivpn plugin.
+version: ${project.version}
+author: funkemunky
\ No newline at end of file
diff --git a/Common/src/main/java/dev/brighten/antivpn/AntiVPN.java b/Common/src/main/java/dev/brighten/antivpn/AntiVPN.java
index b93923b..e6d5b35 100644
--- a/Common/src/main/java/dev/brighten/antivpn/AntiVPN.java
+++ b/Common/src/main/java/dev/brighten/antivpn/AntiVPN.java
@@ -1,11 +1,39 @@
package dev.brighten.antivpn;
+import dev.brighten.antivpn.api.VPNConfig;
+import dev.brighten.antivpn.api.VPNExecutor;
+import dev.brighten.antivpn.utils.VPNResponse;
+import dev.brighten.antivpn.utils.json.JSONException;
+import dev.brighten.antivpn.utils.json.JSONObject;
+import dev.brighten.antivpn.utils.json.JsonReader;
+import lombok.AccessLevel;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.IOException;
+
+@Getter
+@Setter(AccessLevel.PRIVATE)
public class AntiVPN {
private static AntiVPN INSTANCE;
+ private VPNConfig config;
+ private VPNExecutor executor;
+
+ public static void start(VPNConfig config, VPNExecutor executor) {
+ //Initializing
- public static void start() {
INSTANCE = new AntiVPN();
+
+ INSTANCE.setConfig(config);
+ INSTANCE.setExecutor(executor);
+
+ getInstance().getExecutor().registerListeners();
+ getInstance().getConfig().update();
+ }
+
+ public void stop() {
+ executor.shutdown();
}
public static AntiVPN getInstance() {
@@ -14,5 +42,13 @@ public class AntiVPN {
return INSTANCE;
}
- public void getAPI()
+ public static VPNResponse getVPNResponse(String ip, String license, boolean cachedResults /* faster if set to true*/)
+ throws JSONException, IOException {
+ JSONObject result = JsonReader.readJsonFromUrl(String
+ .format("https://funkemunky.cc/vpn?ip=%s&license=%s&cache=%s",
+ ip, license.length() == 0 ? "none" : license, cachedResults));
+
+ return VPNResponse.fromJson(result);
+ }
+
}
diff --git a/Common/src/main/java/dev/brighten/antivpn/api/VPNConfig.java b/Common/src/main/java/dev/brighten/antivpn/api/VPNConfig.java
new file mode 100644
index 0000000..2a550d9
--- /dev/null
+++ b/Common/src/main/java/dev/brighten/antivpn/api/VPNConfig.java
@@ -0,0 +1,13 @@
+package dev.brighten.antivpn.api;
+
+public interface VPNConfig {
+
+ String getLicense();
+
+ boolean cachedResults();
+
+ String getKickString();
+
+ void update();
+
+}
diff --git a/Common/src/main/java/dev/brighten/antivpn/api/VPNExecutor.java b/Common/src/main/java/dev/brighten/antivpn/api/VPNExecutor.java
new file mode 100644
index 0000000..b4a3321
--- /dev/null
+++ b/Common/src/main/java/dev/brighten/antivpn/api/VPNExecutor.java
@@ -0,0 +1,56 @@
+package dev.brighten.antivpn.api;
+
+import dev.brighten.antivpn.AntiVPN;
+import dev.brighten.antivpn.utils.VPNResponse;
+import dev.brighten.antivpn.utils.json.JSONException;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.function.Consumer;
+
+public abstract class VPNExecutor {
+ public static ExecutorService threadExecutor = Executors.newSingleThreadExecutor();
+
+ private static final Map responseCache = new HashMap<>();
+
+ public abstract void registerListeners();
+
+ public abstract void runCacheReset();
+
+ public void resetCache() {
+ responseCache.clear();
+ }
+
+ public abstract void shutdown();
+
+ public void checkIp(String ip, boolean cachedResults, Consumer result) {
+ threadExecutor.execute(() -> result.accept(responseCache.compute(ip, (key, val) -> {
+ if(val == null) {
+ try {
+ return AntiVPN.getVPNResponse(ip, AntiVPN.getInstance().getConfig().getLicense(), cachedResults);
+ } catch (JSONException | IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ return val;
+ })));
+ }
+
+ public VPNResponse checkIp(String ip, boolean cachedResults) {
+ return responseCache.compute(ip, (key, val) -> {
+ if(val == null) {
+ try {
+ return AntiVPN.getVPNResponse(ip, AntiVPN.getInstance().getConfig().getLicense(), cachedResults);
+ } catch (JSONException | IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ return val;
+ });
+ }
+}
diff --git a/Common/src/main/java/dev/brighten/antivpn/utils/VPNResponse.java b/Common/src/main/java/dev/brighten/antivpn/utils/VPNResponse.java
index 24a11d0..fc6a8ba 100644
--- a/Common/src/main/java/dev/brighten/antivpn/utils/VPNResponse.java
+++ b/Common/src/main/java/dev/brighten/antivpn/utils/VPNResponse.java
@@ -4,14 +4,17 @@ import dev.brighten.antivpn.utils.json.JSONException;
import dev.brighten.antivpn.utils.json.JSONObject;
import lombok.AllArgsConstructor;
import lombok.Getter;
+import lombok.RequiredArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@AllArgsConstructor
+@RequiredArgsConstructor
public class VPNResponse {
private String asn, ip, countryName, countryCode, city, timeZone, method, isp;
- private boolean proxy, cached, success;
+ private boolean proxy, cached;
+ private final boolean success;
private double latitude, longitude;
private long lastAccess;
private long queriesLeft;
@@ -47,4 +50,19 @@ public class VPNResponse {
jsonObject.getDouble("latitude"), jsonObject.getDouble("longitude"),
jsonObject.getLong("lastAccess"), jsonObject.getInt("queriesLeft"));
}
+
+ public static VPNResponse fromJson(JSONObject jsonObject) throws JSONException {
+ if(jsonObject.getBoolean("success")) {
+ return new VPNResponse(jsonObject.getString("asn"), jsonObject.getString("ip"),
+ jsonObject.getString("countryName"), jsonObject.getString("countryCode"),
+ jsonObject.getString("city"), jsonObject.getString("timeZone"),
+ jsonObject.has("method") ? jsonObject.getString("method") : "N/A",
+ jsonObject.getString("isp"), jsonObject.getBoolean("proxy"),
+ jsonObject.getBoolean("cached"), jsonObject.getBoolean("success"),
+ jsonObject.getDouble("latitude"), jsonObject.getDouble("longitude"),
+ jsonObject.getLong("lastAccess"), jsonObject.getInt("queriesLeft"));
+ }
+
+ return new VPNResponse(false);
+ }
}
diff --git a/Common/src/main/resources/config.yml b/Common/src/main/resources/config.yml
new file mode 100644
index 0000000..e69de29
diff --git a/pom.xml b/pom.xml
index 35c13b8..82b834e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,10 +8,12 @@
AntiVPN
pom
1.0-SNAPSHOT
+
Common
Bungee
Bukkit
+ Assembly
@@ -19,6 +21,27 @@
8
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.7.0
+
+ 8
+ 8
+ -XDignore.symbol.file
+
+
+
+
+
+ src/main/resources
+ true
+
+
+
+
funkemunky-releases