diff --git a/Assembly/dependency-reduced-pom.xml b/Assembly/dependency-reduced-pom.xml index 680acbb..9e49b30 100644 --- a/Assembly/dependency-reduced-pom.xml +++ b/Assembly/dependency-reduced-pom.xml @@ -3,7 +3,7 @@ AntiVPN dev.brighten.antivpn - 1.7.1.1 + 1.8 4.0.0 Assembly diff --git a/Assembly/pom.xml b/Assembly/pom.xml index 49a9587..e06ea4d 100644 --- a/Assembly/pom.xml +++ b/Assembly/pom.xml @@ -5,7 +5,7 @@ AntiVPN dev.brighten.antivpn - 1.7.1.1 + 1.8 4.0.0 diff --git a/Bukkit/dependency-reduced-pom.xml b/Bukkit/dependency-reduced-pom.xml index e6a9f7c..9e87c11 100644 --- a/Bukkit/dependency-reduced-pom.xml +++ b/Bukkit/dependency-reduced-pom.xml @@ -3,7 +3,7 @@ AntiVPN dev.brighten.antivpn - 1.7.1.1 + 1.8 4.0.0 Bukkit @@ -56,7 +56,7 @@ dev.brighten.antivpn Common - 1.7.1.1 + 1.8 provided diff --git a/Bukkit/pom.xml b/Bukkit/pom.xml index eb0f246..6a0561f 100644 --- a/Bukkit/pom.xml +++ b/Bukkit/pom.xml @@ -5,7 +5,7 @@ AntiVPN dev.brighten.antivpn - 1.7.1.1 + 1.8 4.0.0 @@ -69,7 +69,7 @@ dev.brighten.antivpn Common - 1.7.1.1 + 1.8 provided diff --git a/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitCommandExecutor.java b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitCommandExecutor.java index 1fc025b..c8df5ae 100644 --- a/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitCommandExecutor.java +++ b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitCommandExecutor.java @@ -16,8 +16,9 @@ public class BukkitCommandExecutor implements CommandExecutor { private final CommandSender sender; @Override - public void sendMessage(String message) { - sender.sendMessage(ChatColor.translateAlternateColorCodes('&', message)); + public void sendMessage(String message, Object... objects) { + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', + String.format(message, objects))); } @Override diff --git a/Bungee/dependency-reduced-pom.xml b/Bungee/dependency-reduced-pom.xml index e8a4fff..8df74b3 100644 --- a/Bungee/dependency-reduced-pom.xml +++ b/Bungee/dependency-reduced-pom.xml @@ -3,7 +3,7 @@ AntiVPN dev.brighten.antivpn - 1.7.1.1 + 1.8 4.0.0 Bungee @@ -50,7 +50,7 @@ dev.brighten.antivpn Common - 1.7.1.1 + 1.8 provided diff --git a/Bungee/pom.xml b/Bungee/pom.xml index a5c8ecd..1919049 100644 --- a/Bungee/pom.xml +++ b/Bungee/pom.xml @@ -5,7 +5,7 @@ AntiVPN dev.brighten.antivpn - 1.7.1.1 + 1.8 4.0.0 @@ -63,7 +63,7 @@ dev.brighten.antivpn Common - 1.7.1.1 + 1.8 provided diff --git a/Bungee/src/main/java/dev/brighten/antivpn/bungee/command/BungeeCommandExecutor.java b/Bungee/src/main/java/dev/brighten/antivpn/bungee/command/BungeeCommandExecutor.java index f6d77c8..41b955e 100644 --- a/Bungee/src/main/java/dev/brighten/antivpn/bungee/command/BungeeCommandExecutor.java +++ b/Bungee/src/main/java/dev/brighten/antivpn/bungee/command/BungeeCommandExecutor.java @@ -17,9 +17,9 @@ public class BungeeCommandExecutor implements CommandExecutor { private final CommandSender sender; @Override - public void sendMessage(String message) { + public void sendMessage(String message, Object... objects) { sender.sendMessage(TextComponent.fromLegacyText(ChatColor - .translateAlternateColorCodes('&', message))); + .translateAlternateColorCodes('&', String.format(message, objects)))); } @Override diff --git a/Common/pom.xml b/Common/pom.xml index e5cff0f..28dbdbd 100644 --- a/Common/pom.xml +++ b/Common/pom.xml @@ -5,7 +5,7 @@ AntiVPN dev.brighten.antivpn - 1.7.1.1 + 1.8 4.0.0 diff --git a/Common/src/main/java/dev/brighten/antivpn/command/CommandExecutor.java b/Common/src/main/java/dev/brighten/antivpn/command/CommandExecutor.java index 7baa689..fbbc949 100644 --- a/Common/src/main/java/dev/brighten/antivpn/command/CommandExecutor.java +++ b/Common/src/main/java/dev/brighten/antivpn/command/CommandExecutor.java @@ -2,11 +2,12 @@ package dev.brighten.antivpn.command; import dev.brighten.antivpn.api.APIPlayer; +import java.util.Objects; import java.util.Optional; public interface CommandExecutor { - void sendMessage(String message); + void sendMessage(String message, Object... objects); boolean hasPermission(String permission); Optional getPlayer(); boolean isPlayer(); diff --git a/Common/src/main/java/dev/brighten/antivpn/command/impl/AntiVPNCommand.java b/Common/src/main/java/dev/brighten/antivpn/command/impl/AntiVPNCommand.java index ab89ea4..e0d0dc8 100644 --- a/Common/src/main/java/dev/brighten/antivpn/command/impl/AntiVPNCommand.java +++ b/Common/src/main/java/dev/brighten/antivpn/command/impl/AntiVPNCommand.java @@ -45,7 +45,7 @@ public class AntiVPNCommand extends Command { @Override public Command[] children() { return new Command[] {new LookupCommand(), new AllowlistCommand(), new AlertsCommand(), - new ClearCacheCommand()}; + new ClearCacheCommand(), new PlanCommand()}; } @Override diff --git a/Common/src/main/java/dev/brighten/antivpn/command/impl/LookupCommand.java b/Common/src/main/java/dev/brighten/antivpn/command/impl/LookupCommand.java index 1f1ac2e..cd2ba12 100644 --- a/Common/src/main/java/dev/brighten/antivpn/command/impl/LookupCommand.java +++ b/Common/src/main/java/dev/brighten/antivpn/command/impl/LookupCommand.java @@ -67,13 +67,13 @@ public class LookupCommand extends Command { executor.sendMessage(StringUtil.line("&8")); executor.sendMessage("&6&l" + player.get().getName() + "&7&l's Connection Information"); executor.sendMessage(""); - executor.sendMessage(String.format("&e%s&8: &f%s", "Proxy", result.isProxy() - ? "&a" + result.getMethod() : "&cNo")); - executor.sendMessage(String.format("&e%s&8: &f%s", "ISP", result.getIsp())); - executor.sendMessage(String.format("&e%s&8: &f%s", "Country", result.getCountryName())); - executor.sendMessage(String.format("&e%s&8: &f%s", "City", result.getCity())); - executor.sendMessage(String.format("&e%s&8: &f%s", "Coordinates", result.getLatitude() - + "&7/&f" + result.getLongitude())); + executor.sendMessage("&e%s&8: &f%s", "Proxy", result.isProxy() + ? "&a" + result.getMethod() : "&cNo"); + executor.sendMessage("&e%s&8: &f%s", "ISP", result.getIsp()); + executor.sendMessage("&e%s&8: &f%s", "Country", result.getCountryName()); + executor.sendMessage("&e%s&8: &f%s", "City", result.getCity()); + executor.sendMessage("&e%s&8: &f%s", "Coordinates", result.getLatitude() + + "&7/&f" + result.getLongitude()); executor.sendMessage(StringUtil.line("&8")); } }); diff --git a/Common/src/main/java/dev/brighten/antivpn/command/impl/PlanCommand.java b/Common/src/main/java/dev/brighten/antivpn/command/impl/PlanCommand.java new file mode 100644 index 0000000..5b193ab --- /dev/null +++ b/Common/src/main/java/dev/brighten/antivpn/command/impl/PlanCommand.java @@ -0,0 +1,100 @@ +package dev.brighten.antivpn.command.impl; + +import dev.brighten.antivpn.AntiVPN; +import dev.brighten.antivpn.api.VPNExecutor; +import dev.brighten.antivpn.command.Command; +import dev.brighten.antivpn.command.CommandExecutor; +import dev.brighten.antivpn.utils.StringUtil; +import dev.brighten.antivpn.utils.json.JSONException; +import dev.brighten.antivpn.web.FunkemunkyAPI; +import dev.brighten.antivpn.web.objects.QueryResponse; + +import java.io.IOException; +import java.util.List; + +public class PlanCommand extends Command { + @Override + public String permission() { + return "antivpn.command.plan"; + } + + @Override + public String name() { + return "plan"; + } + + @Override + public String[] aliases() { + return new String[] {"queries", "query"}; + } + + @Override + public String description() { + return "Info related to KauriVPN Plan"; + } + + @Override + public String usage() { + return ""; + } + + @Override + public String parent() { + return "antivpn"; + } + + @Override + public Command[] children() { + return new Command[0]; + } + + @Override + public String execute(CommandExecutor executor, String[] args) { + VPNExecutor.threadExecutor.execute(() -> { + QueryResponse result; + try { + if(AntiVPN.getInstance().getVpnConfig().getLicense().equals("")) { + result = FunkemunkyAPI.getQueryResponse(); + } else { + result = FunkemunkyAPI.getQueryResponse(AntiVPN.getInstance().getVpnConfig().getLicense()); + + if(!result.isValidPlan()) { + executor.sendMessage("&cThe license &f%s &cis not a valid license, " + + "checking your Free plan information...", + AntiVPN.getInstance().getVpnConfig().getLicense()); + + result = FunkemunkyAPI.getQueryResponse(); + } + } + + String plan = result.getPlanType(); + if(plan.equals("IP")) plan+= " (Free)"; + + String queryMax = result.getQueriesMax() == Long.MAX_VALUE + ? "Unlimited" : String.valueOf(result.getQueriesMax()); + + executor.sendMessage(StringUtil.line("&8")); + executor.sendMessage("&6&lKauriVPN Plan Information"); + executor.sendMessage(""); + executor.sendMessage("&e%s&8: &f%s", "Plan", plan); + executor.sendMessage("&e%s&8: &f%s&7/&f%s", "Queries Used", + result.getQueries(), queryMax); + executor.sendMessage(StringUtil.line("&8")); + } catch(JSONException e) { + e.printStackTrace(); + executor.sendMessage("&cThere was a JSONException thrown while looking up your query " + + "information. Check console for more details."); + } catch (IOException e) { + e.printStackTrace(); + executor.sendMessage("&cThere was a IOException thrown while looking up your query " + + "information. Check console for more details."); + } + }); + return "&7Looking up your query information..."; + } + + @Override + public List tabComplete(CommandExecutor executor, String alias, String[] args) { + return null; + } +} diff --git a/Common/src/main/java/dev/brighten/antivpn/web/FunkemunkyAPI.java b/Common/src/main/java/dev/brighten/antivpn/web/FunkemunkyAPI.java index b97c3eb..5c7ab21 100644 --- a/Common/src/main/java/dev/brighten/antivpn/web/FunkemunkyAPI.java +++ b/Common/src/main/java/dev/brighten/antivpn/web/FunkemunkyAPI.java @@ -10,6 +10,17 @@ import java.io.IOException; public class FunkemunkyAPI { + /** + * + * Queries https://funkemunky.cc/vpn API and returns information on the IP + * + * @param ip String + * @param license String + * @param cachedResults boolean + * @return VPNResponse + * @throws JSONException Throws when JSON response is not formatted properly. + * @throws IOException Throws when there is an error connecting to and processing information from API. + */ public static VPNResponse getVPNResponse(String ip, String license, boolean cachedResults /* faster if set to true*/) throws JSONException, IOException { JSONObject result = JsonReader.readJsonFromUrl(String @@ -19,6 +30,27 @@ public class FunkemunkyAPI { return VPNResponse.fromJson(result); } + /** + * Feeds into {@link FunkemunkyAPI#getQueryResponse(String)} using "none" as argument + * to grab query information based on the connecting IP address. + * + * @return QueryResponse + * @throws JSONException Throws when JSON response is not formatted properly. + * @throws IOException Throws when there is an error connecting to and processing information from API. + */ + public static QueryResponse getQueryResponse() throws JSONException, IOException { + return getQueryResponse("none"); + } + + /** + * Queries https://funkemunky.cc/vpn/queryCheck and returns information based on the + * provided licence input. + * + * @param license String + * @return QueryResponse + * @throws JSONException Throws when JSON response is not formatted properly. + * @throws IOException Throws when there is an error connecting to and processing information from API. + */ public static QueryResponse getQueryResponse(String license) throws JSONException, IOException { JSONObject result = JsonReader.readJsonFromUrl("https://funkemunky.cc/vpn/queryCheck?license=" + license); diff --git a/Common/src/main/java/dev/brighten/antivpn/web/objects/QueryResponse.java b/Common/src/main/java/dev/brighten/antivpn/web/objects/QueryResponse.java index 651aa0a..2b2d6dd 100644 --- a/Common/src/main/java/dev/brighten/antivpn/web/objects/QueryResponse.java +++ b/Common/src/main/java/dev/brighten/antivpn/web/objects/QueryResponse.java @@ -19,24 +19,22 @@ public class QueryResponse { private long queriesMax; /** - * * Takes a JSON String and feeds it into {@link QueryResponse#fromJson(JSONObject)} * * @param jsonString String (formatted in JSON) * @return QueryResponse - * @throws JSONException Will throw if JSON is not formatted properly. + * @throws JSONException Throws when JSON is not formatted properly. */ public static QueryResponse fromJson(String jsonString) throws JSONException { return fromJson(new JSONObject(jsonString)); } /** + * Formats response from https://funkemunky.cc/vpn/queryCheck into {@link QueryResponse} for project use. * - * Will format response from https://funkemunky.cc/vpn/queryCheck into an Object for use. - * - * @param object JSOnObject + * @param object JSONObject * @return QueryResponse - * @throws JSONException If there is an error with the API. + * @throws JSONException Throws when JSON is not formatted properly. */ public static QueryResponse fromJson(JSONObject object) throws JSONException { boolean validPlan = object.getBoolean("validPlan"); @@ -48,6 +46,6 @@ public class QueryResponse { return QueryResponse.builder().validPlan(object.getBoolean("validPlan")) .planType(object.getString("planType")) .queries(object.getLong("queries")) - .queriesMax(object.getLong("queriesMax")).build(); + .queriesMax(object.getLong("queryLimit")).build(); } } diff --git a/Common/src/main/java/dev/brighten/antivpn/web/objects/VPNResponse.java b/Common/src/main/java/dev/brighten/antivpn/web/objects/VPNResponse.java index a3e83b9..a36a06d 100644 --- a/Common/src/main/java/dev/brighten/antivpn/web/objects/VPNResponse.java +++ b/Common/src/main/java/dev/brighten/antivpn/web/objects/VPNResponse.java @@ -6,7 +6,6 @@ import lombok.*; @Data @AllArgsConstructor -@RequiredArgsConstructor @Builder public class VPNResponse { private String asn, ip, countryName, countryCode, city, timeZone, method, isp, failureReason = "N/A"; @@ -28,34 +27,31 @@ public class VPNResponse { json.put("proxy", proxy); json.put("success", success); json.put("timeZone", timeZone); - json.put("success", true); json.put("queriesLeft", queriesLeft); json.put("cached", cached); return json; } + /** + * Feeds into {@link VPNResponse#fromJson(JSONObject)} formatting the JSON {@link String} into + * a {@link JSONObject} + * + * @param json String + * @return VPNResponse + * @throws JSONException + */ public static VPNResponse fromJson(String json) throws JSONException { - JSONObject jsonObject = new JSONObject(json); - - 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"), "N/A", jsonObject.getBoolean("proxy"), - jsonObject.getBoolean("cached"), jsonObject.getBoolean("success"), - jsonObject.getDouble("latitude"), jsonObject.getDouble("longitude"), - jsonObject.getLong("lastAccess"), jsonObject.getInt("queriesLeft")); - } else { - VPNResponse response = new VPNResponse(false); - - response.failureReason = jsonObject.getString("failureReason"); - - return response; - } + return fromJson(new JSONObject(json)); } + /** + * Formats response from https://funkemunky.cc/vpn into {@link VPNResponse} for project use. + * + * @param jsonObject JSONObject + * @return VPNResponse + * @throws JSONException Throws when JSON is not formatted properly. + */ public static VPNResponse fromJson(JSONObject jsonObject) throws JSONException { if(jsonObject.getBoolean("success")) { return new VPNResponse(jsonObject.getString("asn"), jsonObject.getString("ip"), @@ -67,11 +63,8 @@ public class VPNResponse { jsonObject.getDouble("latitude"), jsonObject.getDouble("longitude"), jsonObject.getLong("lastAccess"), jsonObject.getInt("queriesLeft")); } else { - VPNResponse response = new VPNResponse(false); - - response.failureReason = jsonObject.getString("failureReason"); - - return response; + return VPNResponse.builder().success(false) + .failureReason(jsonObject.getString("failureReason")).build(); } } } diff --git a/Velocity/pom.xml b/Velocity/pom.xml index eea43d7..cfd8b5e 100644 --- a/Velocity/pom.xml +++ b/Velocity/pom.xml @@ -5,7 +5,7 @@ AntiVPN dev.brighten.antivpn - 1.7.1.1 + 1.8 4.0.0 @@ -33,7 +33,7 @@ dev.brighten.antivpn Common - 1.7.1.1 + 1.8 provided diff --git a/Velocity/src/main/java/dev/brighten/antivpn/velocity/command/VelocityCommandExecutor.java b/Velocity/src/main/java/dev/brighten/antivpn/velocity/command/VelocityCommandExecutor.java index 7603cb8..b581543 100644 --- a/Velocity/src/main/java/dev/brighten/antivpn/velocity/command/VelocityCommandExecutor.java +++ b/Velocity/src/main/java/dev/brighten/antivpn/velocity/command/VelocityCommandExecutor.java @@ -16,8 +16,9 @@ public class VelocityCommandExecutor implements CommandExecutor { private final CommandSource sender; @Override - public void sendMessage(String message) { - sender.sendMessage(LegacyComponentSerializer.builder().character('&').build().deserialize(message)); + public void sendMessage(String message, Object... objects) { + sender.sendMessage(LegacyComponentSerializer.builder().character('&').build() + .deserialize(String.format(message, objects))); } @Override diff --git a/pom.xml b/pom.xml index ce4882d..8d4e955 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ dev.brighten.antivpn AntiVPN pom - 1.7.1.1 + 1.8 Common