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 super Document>) 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 super Document>) 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