diff --git a/Assembly/dependency-reduced-pom.xml b/Assembly/dependency-reduced-pom.xml index ee2850c..d2ea6a0 100644 --- a/Assembly/dependency-reduced-pom.xml +++ b/Assembly/dependency-reduced-pom.xml @@ -3,7 +3,7 @@ AntiVPN dev.brighten.antivpn - 1.5.2.1 + 1.6.0 4.0.0 Assembly diff --git a/Assembly/pom.xml b/Assembly/pom.xml index d9da090..b29e73e 100644 --- a/Assembly/pom.xml +++ b/Assembly/pom.xml @@ -5,7 +5,7 @@ AntiVPN dev.brighten.antivpn - 1.5.2.1 + 1.6.0 4.0.0 diff --git a/Bukkit/dependency-reduced-pom.xml b/Bukkit/dependency-reduced-pom.xml index 69a2d6f..2348ca2 100644 --- a/Bukkit/dependency-reduced-pom.xml +++ b/Bukkit/dependency-reduced-pom.xml @@ -3,7 +3,7 @@ AntiVPN dev.brighten.antivpn - 1.5.2.1 + 1.6.0 4.0.0 Bukkit @@ -56,7 +56,7 @@ dev.brighten.antivpn Common - 1.5.2.1 + 1.6.0 provided @@ -67,6 +67,14 @@ mysql-connector-java mysql + + h2 + com.h2database + + + mongo-java-driver + org.mongodb + diff --git a/Bukkit/pom.xml b/Bukkit/pom.xml index 74fc477..df1d5d8 100644 --- a/Bukkit/pom.xml +++ b/Bukkit/pom.xml @@ -5,7 +5,7 @@ AntiVPN dev.brighten.antivpn - 1.5.2.1 + 1.6.0 4.0.0 @@ -69,7 +69,7 @@ dev.brighten.antivpn Common - 1.5.2.1 + 1.6.0 provided diff --git a/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitConfig.java b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitConfig.java index e9a95f7..a7f35be 100644 --- a/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitConfig.java +++ b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitConfig.java @@ -18,18 +18,19 @@ public class BukkitConfig implements VPNConfig { "database.type", BukkitPlugin.pluginInstance), defaultDatabaseName = new ConfigDefault<>("kaurivpn", "database.database", BukkitPlugin.pluginInstance), + defaultMongoURL = new ConfigDefault<>("", "database.mongoURL", BukkitPlugin.pluginInstance), defaultUsername = new ConfigDefault<>("root", "database.username", BukkitPlugin.pluginInstance), defaultPassword = new ConfigDefault<>("password", "database.password", BukkitPlugin.pluginInstance), - defaultAuthDatabase = new ConfigDefault<>("admin", - "database.auth", BukkitPlugin.pluginInstance), defaultIp = new ConfigDefault<>("localhost", "database.ip", BukkitPlugin.pluginInstance), defaultAlertMsg = new ConfigDefault<>("&8[&6KauriVPN&8] &e%player% &7has joined on a VPN/proxy" + " &8(&f%reason%&8) &7in location &8(&f%city%&7, &f%country%&8)", "alerts.message", BukkitPlugin.pluginInstance); private final ConfigDefault cacheResultsDefault = new ConfigDefault<>(true, "cachedResults", BukkitPlugin.pluginInstance), + defaultUseCredentials = new ConfigDefault<>(true, + "database.useCredentials", BukkitPlugin.pluginInstance), defaultDatabaseEnabled = new ConfigDefault<>(false, "database.enabled", BukkitPlugin.pluginInstance), defaultCommandsEnable = new ConfigDefault<>(false, "commands.enabled", BukkitPlugin.pluginInstance), defaultKickPlayers @@ -44,10 +45,10 @@ public class BukkitConfig implements VPNConfig { Collections.singletonList("kick %player% VPNs are not allowed on our server!"), "commands.execute", BukkitPlugin.pluginInstance); - private String license, kickMessage, databaseType, databaseName, username, password, ip, alertMsg; + private String license, kickMessage, databaseType, databaseName, mongoURL, username, password, ip, alertMsg; private List prefixWhitelists, commands; private int port; - private boolean cacheResults, databaseEnabled, commandsEnabled, kickPlayers, alertToStaff, metrics; + private boolean cacheResults, databaseEnabled, useCredentials, commandsEnabled, kickPlayers, alertToStaff, metrics; @Override public String getLicense() { @@ -99,6 +100,16 @@ public class BukkitConfig implements VPNConfig { return databaseEnabled; } + @Override + public boolean useDatabaseCreds() { + return useCredentials; + } + + @Override + public String mongoDatabaseURL() { + return mongoURL; + } + @Override public String getDatabaseType() { return databaseType; @@ -152,8 +163,10 @@ public class BukkitConfig implements VPNConfig { cacheResults = cacheResultsDefault.get(); prefixWhitelists = prefixWhitelistsDefault.get(); databaseEnabled = defaultDatabaseEnabled.get(); + useCredentials = defaultUseCredentials.get(); databaseType = defaultDatabaseType.get(); databaseName = defaultDatabaseName.get(); + mongoURL = defaultMongoURL.get(); username = defaultUsername.get(); password = defaultPassword.get(); ip = defaultIp.get(); diff --git a/Bungee/dependency-reduced-pom.xml b/Bungee/dependency-reduced-pom.xml index 0b08a46..408f362 100644 --- a/Bungee/dependency-reduced-pom.xml +++ b/Bungee/dependency-reduced-pom.xml @@ -3,7 +3,7 @@ AntiVPN dev.brighten.antivpn - 1.5.2.1 + 1.6.0 4.0.0 Bungee @@ -50,7 +50,7 @@ dev.brighten.antivpn Common - 1.5.2.1 + 1.6.0 provided @@ -61,6 +61,14 @@ mysql-connector-java mysql + + h2 + com.h2database + + + mongo-java-driver + org.mongodb + diff --git a/Bungee/pom.xml b/Bungee/pom.xml index fb558f2..e0da18b 100644 --- a/Bungee/pom.xml +++ b/Bungee/pom.xml @@ -5,7 +5,7 @@ AntiVPN dev.brighten.antivpn - 1.5.2.1 + 1.6.0 4.0.0 @@ -63,7 +63,7 @@ dev.brighten.antivpn Common - 1.5.2.1 + 1.6.0 provided diff --git a/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeConfig.java b/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeConfig.java index 91c9db4..89f43b5 100644 --- a/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeConfig.java +++ b/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeConfig.java @@ -16,12 +16,11 @@ public class BungeeConfig implements VPNConfig { "database.type", BungeePlugin.pluginInstance), defaultDatabaseName = new ConfigDefault<>("kaurivpn", "database.database", BungeePlugin.pluginInstance), + defaultMongoURL = new ConfigDefault<>("", "database.mongoURL", BungeePlugin.pluginInstance), defaultUsername = new ConfigDefault<>("root", "database.username", BungeePlugin.pluginInstance), defaultPassword = new ConfigDefault<>("password", "database.password", BungeePlugin.pluginInstance), - defaultAuthDatabase = new ConfigDefault<>("admin", - "database.auth", BungeePlugin.pluginInstance), defaultIp = new ConfigDefault<>("localhost", "database.ip", BungeePlugin.pluginInstance), defaultAlertMsg = new ConfigDefault<>("&8[&6KauriVPN&8] &e%player% &7has joined on a VPN/proxy" + " &8(&f%reason%&8) &7in location &8(&f%city%&7, &f%country%&8)", "alerts.message", @@ -34,6 +33,8 @@ public class BungeeConfig implements VPNConfig { = new ConfigDefault<>(true, "kickPlayers", BungeePlugin.pluginInstance), defaultAlertToStaff = new ConfigDefault<>(true, "alerts.enabled", BungeePlugin.pluginInstance), + defaultUseCredentials = new ConfigDefault<>(true, + "database.useCredentials", BungeePlugin.pluginInstance), defaultMetrics = new ConfigDefault<>(true, "bstats", BungeePlugin.pluginInstance); private final ConfigDefault defaultPort = new ConfigDefault<>(-1, "database.port", BungeePlugin.pluginInstance); @@ -42,10 +43,10 @@ public class BungeeConfig implements VPNConfig { Collections.singletonList("kick %player% VPNs are not allowed on our server!"), "commands.execute", BungeePlugin.pluginInstance); - private String license, kickMessage, databaseType, databaseName, username, password, ip, alertMsg; + private String license, kickMessage, databaseType, databaseName, mongoURL, username, password, ip, alertMsg; private List prefixWhitelists, commands; private int port; - private boolean cacheResults, databaseEnabled, commandsEnabled, kickPlayers, alertToStaff, metrics; + private boolean cacheResults, useCredentials, databaseEnabled, commandsEnabled, kickPlayers, alertToStaff, metrics; @Override public String getLicense() { @@ -97,6 +98,16 @@ public class BungeeConfig implements VPNConfig { return databaseEnabled; } + @Override + public boolean useDatabaseCreds() { + return useCredentials; + } + + @Override + public String mongoDatabaseURL() { + return mongoURL; + } + @Override public String getDatabaseType() { return databaseType; @@ -150,8 +161,10 @@ public class BungeeConfig implements VPNConfig { cacheResults = cacheResultsDefault.get(); prefixWhitelists = prefixWhitelistsDefault.get(); databaseEnabled = defaultDatabaseEnabled.get(); + useCredentials = defaultUseCredentials.get(); databaseType = defaultDatabaseType.get(); databaseName = defaultDatabaseName.get(); + mongoURL = defaultMongoURL.get(); username = defaultUsername.get(); password = defaultPassword.get(); ip = defaultIp.get(); diff --git a/Common/pom.xml b/Common/pom.xml index b3e903c..7e2ac04 100644 --- a/Common/pom.xml +++ b/Common/pom.xml @@ -5,7 +5,7 @@ AntiVPN dev.brighten.antivpn - 1.5.2.1 + 1.6.0 4.0.0 @@ -62,7 +62,13 @@ com.h2database h2 1.4.200 - provided + compile + + + org.mongodb + mongo-java-driver + 3.12.10 + compile diff --git a/Common/src/main/java/dev/brighten/antivpn/AntiVPN.java b/Common/src/main/java/dev/brighten/antivpn/AntiVPN.java index 876b7e1..53a0768 100644 --- a/Common/src/main/java/dev/brighten/antivpn/AntiVPN.java +++ b/Common/src/main/java/dev/brighten/antivpn/AntiVPN.java @@ -6,6 +6,7 @@ import dev.brighten.antivpn.api.VPNExecutor; import dev.brighten.antivpn.command.Command; import dev.brighten.antivpn.command.impl.AntiVPNCommand; import dev.brighten.antivpn.database.VPNDatabase; +import dev.brighten.antivpn.database.mongo.MongoVPN; import dev.brighten.antivpn.database.sql.MySqlVPN; import dev.brighten.antivpn.message.MessageHandler; import dev.brighten.antivpn.utils.VPNResponse; @@ -61,7 +62,8 @@ public class AntiVPN { case "mongo": case "mongodb": case "mongod": { - AntiVPN.getInstance().getExecutor().log("We currently do not support Mongo, but this is coming in future updates."); + INSTANCE.database = new MongoVPN(); + INSTANCE.database.init(); break; } default: { diff --git a/Common/src/main/java/dev/brighten/antivpn/api/VPNConfig.java b/Common/src/main/java/dev/brighten/antivpn/api/VPNConfig.java index b6a1507..1a53d85 100644 --- a/Common/src/main/java/dev/brighten/antivpn/api/VPNConfig.java +++ b/Common/src/main/java/dev/brighten/antivpn/api/VPNConfig.java @@ -24,6 +24,10 @@ public interface VPNConfig { boolean isDatabaseEnabled(); + boolean useDatabaseCreds(); + + String mongoDatabaseURL(); + String getDatabaseType(); String getDatabaseName(); diff --git a/Common/src/main/java/dev/brighten/antivpn/api/VPNExecutor.java b/Common/src/main/java/dev/brighten/antivpn/api/VPNExecutor.java index 01da20f..7d5a8b6 100644 --- a/Common/src/main/java/dev/brighten/antivpn/api/VPNExecutor.java +++ b/Common/src/main/java/dev/brighten/antivpn/api/VPNExecutor.java @@ -15,7 +15,7 @@ import java.util.function.Consumer; public abstract class VPNExecutor { public static ExecutorService threadExecutor = Executors.newSingleThreadExecutor(); - private static final Map responseCache = new HashMap<>(); + public static final Map responseCache = new HashMap<>(); @Getter private final Set whitelisted = Collections.synchronizedSet(new HashSet<>()); @Getter 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 5c5ce11..b2cf735 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 @@ -41,7 +41,8 @@ public class AntiVPNCommand extends Command { @Override public Command[] children() { - return new Command[] {new LookupCommand(), new AllowlistCommand(), new AlertsCommand()}; + return new Command[] {new LookupCommand(), new AllowlistCommand(), new AlertsCommand(), + new ClearCacheCommand()}; } @Override diff --git a/Common/src/main/java/dev/brighten/antivpn/command/impl/ClearCacheCommand.java b/Common/src/main/java/dev/brighten/antivpn/command/impl/ClearCacheCommand.java new file mode 100644 index 0000000..0ad648c --- /dev/null +++ b/Common/src/main/java/dev/brighten/antivpn/command/impl/ClearCacheCommand.java @@ -0,0 +1,58 @@ +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 java.util.Collections; +import java.util.List; + +public class ClearCacheCommand extends Command { + @Override + public String permission() { + return "antivpn.command.clearcache"; + } + + @Override + public String name() { + return "clearcache"; + } + + @Override + public String[] aliases() { + return new String[] {"clear", "cc"}; + } + + @Override + public String description() { + return "Clear the API response cache if you're having problems."; + } + + @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) { + AntiVPN.getInstance().getDatabase().clearResponses(); + VPNExecutor.responseCache.clear(); + return "&aCleared all cached API response information!"; + } + + @Override + public List tabComplete(CommandExecutor executor, String alias, String[] args) { + return Collections.emptyList(); + } +} diff --git a/Common/src/main/java/dev/brighten/antivpn/database/VPNDatabase.java b/Common/src/main/java/dev/brighten/antivpn/database/VPNDatabase.java index 15bb052..6e06c7a 100644 --- a/Common/src/main/java/dev/brighten/antivpn/database/VPNDatabase.java +++ b/Common/src/main/java/dev/brighten/antivpn/database/VPNDatabase.java @@ -34,6 +34,8 @@ public interface VPNDatabase { void updateAlertsState(UUID uuid, boolean state); + void clearResponses(); + void init(); void shutdown(); diff --git a/Common/src/main/java/dev/brighten/antivpn/database/mongo/MongoVPN.java b/Common/src/main/java/dev/brighten/antivpn/database/mongo/MongoVPN.java new file mode 100644 index 0000000..5c85444 --- /dev/null +++ b/Common/src/main/java/dev/brighten/antivpn/database/mongo/MongoVPN.java @@ -0,0 +1,208 @@ +package dev.brighten.antivpn.database.mongo; + +import com.mongodb.*; +import com.mongodb.client.MongoClient; +import com.mongodb.client.MongoClients; +import com.mongodb.client.MongoCollection; +import com.mongodb.client.MongoDatabase; +import com.mongodb.client.model.Filters; +import com.mongodb.client.model.Indexes; +import dev.brighten.antivpn.AntiVPN; +import dev.brighten.antivpn.api.VPNExecutor; +import dev.brighten.antivpn.database.VPNDatabase; +import dev.brighten.antivpn.utils.VPNResponse; +import org.bson.Document; + +import java.util.*; +import java.util.function.Consumer; + +public class MongoVPN implements VPNDatabase { + + private MongoCollection settingsDocument, cacheDocument; + private MongoClient client; + private MongoDatabase antivpnDatabase; + + @Override + public Optional getStoredResponse(String ip) { + Document rdoc = cacheDocument.find(Filters.eq("ip", ip)).first(); + + if(rdoc != null) { + return Optional.of(VPNResponse.builder().asn(rdoc.getString("asn")).ip(ip) + .countryName(rdoc.getString("countryName")) + .countryCode(rdoc.getString("countryCode")) + .city(rdoc.getString("city")) + .isp(rdoc.getString("isp")) + .method(rdoc.getString("method")) + .timeZone(rdoc.getString("timeZone")) + .proxy(rdoc.getBoolean("proxy")) + .cached(rdoc.getBoolean("cached")) + .success(true) + .latitude(rdoc.getDouble("latitude")) + .longitude(rdoc.getDouble("longitude")) + .build()); + } + return Optional.empty(); + } + + @Override + public void cacheResponse(VPNResponse toCache) { + Document rdoc = new Document("ip", toCache.getIp()); + + rdoc.put("asn", toCache.getAsn()); + rdoc.put("countryName", toCache.getCountryName()); + rdoc.put("countryCode", toCache.getCountryCode()); + rdoc.put("city", toCache.getCity()); + rdoc.put("isp", toCache.getIsp()); + rdoc.put("method", toCache.getMethod()); + rdoc.put("timeZone", toCache.getTimeZone()); + rdoc.put("proxy", toCache.isProxy()); + rdoc.put("cached", toCache.isCached()); + rdoc.put("success", toCache.isSuccess()); + rdoc.put("latitude", toCache.getLatitude()); + rdoc.put("longitude", toCache.getLongitude()); + + VPNExecutor.threadExecutor.execute(() -> { + cacheDocument.deleteMany(Filters.eq("ip", toCache.getIp())); + cacheDocument.insertOne(rdoc); + }); + } + + @Override + public boolean isWhitelisted(UUID uuid) { + return settingsDocument + .find(Filters.and(Filters.eq("setting", "whitelist"), + Filters.eq("uuid", uuid.toString()))).first() != null; + } + + @Override + public boolean isWhitelisted(String ip) { + return settingsDocument + .find(Filters.and(Filters.eq("setting", "whitelist"), + Filters.eq("ip", ip))).first() != null; + } + + @Override + public void setWhitelisted(UUID uuid, boolean whitelisted) { + if(whitelisted) { + Document wdoc = new Document("setting", "whitelist"); + wdoc.put("uuid", uuid.toString()); + VPNExecutor.threadExecutor.execute(() -> settingsDocument.insertOne(wdoc)); + } else { + VPNExecutor.threadExecutor.execute(() -> settingsDocument.deleteMany(Filters + .and( + Filters.eq("setting", "whitelist"), + Filters.eq("uuid", uuid.toString())))); + } + } + + @Override + public void setWhitelisted(String ip, boolean whitelisted) { + if(whitelisted) { + Document wdoc = new Document("setting", "whitelist"); + wdoc.put("ip", ip); + VPNExecutor.threadExecutor.execute(() -> settingsDocument.insertOne(wdoc)); + } else { + VPNExecutor.threadExecutor.execute(() -> settingsDocument.deleteMany(Filters + .and( + Filters.eq("setting", "whitelist"), + Filters.eq("ip", ip)))); + } + } + + @Override + public List getAllWhitelisted() { + List uuids = new ArrayList<>(); + settingsDocument.find(Filters.and(Filters.eq("setting", "whitelist"), + Filters.exists("uuid"))) + .forEach((Consumer) doc -> uuids.add(UUID.fromString(doc.getString("uuid")))); + return uuids; + } + + @Override + public List getAllWhitelistedIps() { + List ips = new ArrayList<>(); + settingsDocument.find(Filters.and(Filters.eq("setting", "whitelist"), + Filters.exists("ip"))) + .forEach((Consumer) doc -> ips.add(doc.getString("ip"))); + return ips; + } + + @Override + public void getStoredResponseAsync(String ip, Consumer> result) { + VPNExecutor.threadExecutor.execute(() -> result.accept(getStoredResponse(ip))); + } + + @Override + public void isWhitelistedAsync(UUID uuid, Consumer result) { + VPNExecutor.threadExecutor.execute(() -> result.accept(isWhitelisted(uuid))); + } + + @Override + public void isWhitelistedAsync(String ip, Consumer result) { + VPNExecutor.threadExecutor.execute(() -> result.accept(isWhitelisted(ip))); + } + + @Override + public void alertsState(UUID uuid, Consumer result) { + VPNExecutor.threadExecutor.execute(() -> result.accept(settingsDocument + .find(Filters.and(Filters.eq("setting", "alerts"), + Filters.eq("uuid", uuid.toString()))).first() != null)); + } + + @Override + public void updateAlertsState(UUID uuid, boolean state) { + VPNExecutor.threadExecutor.execute(() -> { + settingsDocument.deleteMany(Filters.and(Filters.eq("setting", "alerts"), + Filters.eq("uuid", uuid.toString()))); + if(state) { + Document adoc = new Document("setting", "alerts"); + + adoc.put("uuid", uuid.toString()); + settingsDocument.insertOne(adoc); + } + }); + } + + @Override + public void clearResponses() { + cacheDocument.deleteMany(Filters.exists("ip")); + } + + @Override + public void init() { + if(AntiVPN.getInstance().getConfig().mongoDatabaseURL().length() > 0) { //URL + ConnectionString cs = new ConnectionString(AntiVPN.getInstance().getConfig().mongoDatabaseURL()); + MongoClientSettings settings = MongoClientSettings.builder().applyConnectionString(cs).build(); + client = MongoClients.create(settings); + } else { + MongoClientSettings.Builder settingsBld = MongoClientSettings.builder().readPreference(ReadPreference.nearest()) + .applyToClusterSettings(builder -> { + builder.hosts(Collections.singletonList(new ServerAddress(AntiVPN.getInstance().getConfig().getIp(), + AntiVPN.getInstance().getConfig().getPort()))); + }); + if(AntiVPN.getInstance().getConfig().useDatabaseCreds()) { + settingsBld = settingsBld.credential(MongoCredential + .createCredential(AntiVPN.getInstance().getConfig().getUsername(), + AntiVPN.getInstance().getConfig().getDatabaseName(), + AntiVPN.getInstance().getConfig().getPassword().toCharArray())); + } + + client = MongoClients.create(settingsBld.build()); + } + antivpnDatabase = client.getDatabase(AntiVPN.getInstance().getConfig().getDatabaseName()); + + settingsDocument = antivpnDatabase.getCollection("settings"); + if(settingsDocument.listIndexes().first() == null) { + AntiVPN.getInstance().getExecutor().log("Created index for settings collection!"); + settingsDocument.createIndex(Indexes.ascending("ip")); + } + cacheDocument = antivpnDatabase.getCollection("cache"); + } + + @Override + public void shutdown() { + settingsDocument = null; + cacheDocument = null; + client.close(); + } +} diff --git a/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java b/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java index 43f4378..af93dc8 100644 --- a/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java +++ b/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java @@ -225,6 +225,13 @@ public class MySqlVPN implements VPNDatabase { .execute()); } + @Override + public void clearResponses() { + if(MySQL.isClosed()) return; + + VPNExecutor.threadExecutor.execute(() -> Query.prepare("delete from `responses`").execute()); + } + @Override public void init() { if (!AntiVPN.getInstance().getConfig().isDatabaseEnabled()) diff --git a/Common/src/main/java/dev/brighten/antivpn/utils/MiscUtils.java b/Common/src/main/java/dev/brighten/antivpn/utils/MiscUtils.java index 1837b7d..6941b88 100644 --- a/Common/src/main/java/dev/brighten/antivpn/utils/MiscUtils.java +++ b/Common/src/main/java/dev/brighten/antivpn/utils/MiscUtils.java @@ -41,33 +41,4 @@ public class MiscUtils { return false; } } - - /* Borrowed from FireFlyx ngxdev */ - public static void download(File file, String from) throws Exception { - URL url = new URL(from); - InputStream stream = url.openStream(); - ReadableByteChannel channel = Channels.newChannel(stream); - FileOutputStream out = new FileOutputStream(file); - out.getChannel().transferFrom(channel, 0L, Long.MAX_VALUE); - } - - /* Borrowed from FireFlyx ngxdev */ - public static ClassLoader injectorClassLoader = MiscUtils.class.getClassLoader(); - - /* Borrowed from FireFlyx ngxdev */ - public static void injectURL(URL url) { - try { - URLClassLoader systemClassLoader = (URLClassLoader) injectorClassLoader; - Class classLoaderClass = URLClassLoader.class; - - try { - Method method = classLoaderClass.getDeclaredMethod("addURL", URL.class); - method.setAccessible(true); - method.invoke(systemClassLoader, url); - } catch (Throwable t) { - t.printStackTrace(); - } - } catch (Exception e) { - } - } } 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 fdab00f..07e1a58 100644 --- a/Common/src/main/java/dev/brighten/antivpn/utils/VPNResponse.java +++ b/Common/src/main/java/dev/brighten/antivpn/utils/VPNResponse.java @@ -2,15 +2,13 @@ package dev.brighten.antivpn.utils; 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; +import lombok.*; @Getter @Setter @AllArgsConstructor @RequiredArgsConstructor +@Builder public class VPNResponse { private String asn, ip, countryName, countryCode, city, timeZone, method, isp, failureReason = "N/A"; private boolean proxy, cached; diff --git a/Velocity/pom.xml b/Velocity/pom.xml index 47e0f6d..68ddfe1 100644 --- a/Velocity/pom.xml +++ b/Velocity/pom.xml @@ -5,7 +5,7 @@ AntiVPN dev.brighten.antivpn - 1.5.2.1 + 1.6.0 4.0.0 @@ -33,7 +33,7 @@ dev.brighten.antivpn Common - 1.5.2.1 + 1.6.0 provided diff --git a/Velocity/src/main/java/dev/brighten/antivpn/velocity/VelocityConfig.java b/Velocity/src/main/java/dev/brighten/antivpn/velocity/VelocityConfig.java index 55b11fe..218d306 100644 --- a/Velocity/src/main/java/dev/brighten/antivpn/velocity/VelocityConfig.java +++ b/Velocity/src/main/java/dev/brighten/antivpn/velocity/VelocityConfig.java @@ -16,12 +16,11 @@ public class VelocityConfig implements VPNConfig { "database.type", VelocityPlugin.INSTANCE), defaultDatabaseName = new ConfigDefault<>("kaurivpn", "database.database", VelocityPlugin.INSTANCE), + defaultMongoURL = new ConfigDefault<>("", "database.mongoURL", VelocityPlugin.INSTANCE), defaultUsername = new ConfigDefault<>("root", "database.username", VelocityPlugin.INSTANCE), defaultPassword = new ConfigDefault<>("password", "database.password", VelocityPlugin.INSTANCE), - defaultAuthDatabase = new ConfigDefault<>("admin", - "database.auth", VelocityPlugin.INSTANCE), defaultIp = new ConfigDefault<>("localhost", "database.ip", VelocityPlugin.INSTANCE), defaultAlertMsg = new ConfigDefault<>("&8[&6KauriVPN&8] &e%player% &7has joined on a VPN/proxy" + " &8(&f%reason%&8) &7in location &8(&f%city%&7, &f%country%&8)", "alerts.message", @@ -32,6 +31,8 @@ public class VelocityConfig implements VPNConfig { VelocityPlugin.INSTANCE), defaultCommandsEnable = new ConfigDefault<>(false, "commands.enabled", VelocityPlugin.INSTANCE), defaultKickPlayers = new ConfigDefault<>(true, "kickPlayers", VelocityPlugin.INSTANCE), + defaultUseCredentials = new ConfigDefault<>(true, + "database.useCredentials", VelocityPlugin.INSTANCE), defaultAlertToStaff = new ConfigDefault<>(true, "alerts.enabled", VelocityPlugin.INSTANCE), defaultMetrics = new ConfigDefault<>(true, "bstats", VelocityPlugin.INSTANCE); @@ -42,10 +43,10 @@ public class VelocityConfig implements VPNConfig { Collections.singletonList("kick %player% VPNs are not allowed on our server!"), "commands.execute", VelocityPlugin.INSTANCE); - private String license, kickMessage, databaseType, databaseName, username, password, ip, alertMsg; + private String license, kickMessage, databaseType, databaseName, mongoURL, username, password, ip, alertMsg; private List prefixWhitelists, commands; private int port; - private boolean cacheResults, databaseEnabled, commandsEnabled, kickPlayers, alertToStaff, metrics; + private boolean cacheResults, useCredentials, databaseEnabled, commandsEnabled, kickPlayers, alertToStaff, metrics; @Override public String getLicense() { @@ -97,6 +98,16 @@ public class VelocityConfig implements VPNConfig { return databaseEnabled; } + @Override + public boolean useDatabaseCreds() { + return useCredentials; + } + + @Override + public String mongoDatabaseURL() { + return mongoURL; + } + @Override public String getDatabaseType() { return databaseType; @@ -150,8 +161,10 @@ public class VelocityConfig implements VPNConfig { cacheResults = cacheResultsDefault.get(); prefixWhitelists = prefixWhitelistsDefault.get(); databaseEnabled = defaultDatabaseEnabled.get(); + useCredentials = defaultUseCredentials.get(); databaseType = defaultDatabaseType.get(); databaseName = defaultDatabaseName.get(); + mongoURL = defaultMongoURL.get(); username = defaultUsername.get(); password = defaultPassword.get(); ip = defaultIp.get(); diff --git a/pom.xml b/pom.xml index 494b91e..9e39d65 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ dev.brighten.antivpn AntiVPN pom - 1.5.2.1 + 1.6.0 Common