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