diff --git a/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitListener.java b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitListener.java
index 7f036c3..a4686aa 100644
--- a/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitListener.java
+++ b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitListener.java
@@ -77,7 +77,7 @@ public class BukkitListener extends VPNExecutor implements Listener {
AntiVPN.getInstance().getExecutor().getToKick()
.add(new Tuple<>(instantResult, event.getPlayer().getUniqueId()));
- if(!AntiVPN.getInstance().getVpnConfig().kickPlayersOnDetect()) {
+ if(!AntiVPN.getInstance().getVpnConfig().isKickPlayers()) {
return;
}
@@ -87,25 +87,25 @@ public class BukkitListener extends VPNExecutor implements Listener {
switch (instantResult.resultType()) {
case DENIED_COUNTRY -> event.setKickMessage(StringUtil.translateAlternateColorCodes('&',
StringUtil.varReplace(
- AntiVPN.getInstance().getVpnConfig().countryVanillaKickReason(),
+ AntiVPN.getInstance().getVpnConfig().getCountryVanillaKickReason(),
player,
instantResult.response()
)));
case DENIED_PROXY -> {
- if(AntiVPN.getInstance().getVpnConfig().alertToStaff()) {
+ if(AntiVPN.getInstance().getVpnConfig().isAlertToStaff()) {
AntiVPN.getInstance().getPlayerExecutor().getOnlinePlayers().stream()
.filter(APIPlayer::isAlertsEnabled)
.forEach(pl ->
pl.sendMessage(StringUtil.varReplace(
ChatColor.translateAlternateColorCodes(
'&',
- AntiVPN.getInstance().getVpnConfig().alertMessage()),
+ AntiVPN.getInstance().getVpnConfig().getAlertMsg()),
player,
instantResult.response())));
}
event.setKickMessage(StringUtil.translateAlternateColorCodes('&',
StringUtil.varReplace(
- AntiVPN.getInstance().getVpnConfig().getKickString(),
+ AntiVPN.getInstance().getVpnConfig().getKickMessage(),
player,
instantResult.response()
)));
@@ -116,16 +116,14 @@ public class BukkitListener extends VPNExecutor implements Listener {
@EventHandler(priority = EventPriority.MONITOR)
public void onJoin(final PlayerJoinEvent event) {
AntiVPN.getInstance().getPlayerExecutor().getPlayer(event.getPlayer().getUniqueId())
- .ifPresent(player -> {
- AntiVPN.getInstance().getExecutor().getThreadExecutor().execute(() -> {
- if(AntiVPN.getInstance().getDatabase().getAlertsState(player.getUuid())) {
- player.setAlertsEnabled(true);
- player.sendMessage(AntiVPN.getInstance().getMessageHandler()
- .getString("command-alerts-toggled")
- .getFormattedMessage(new VpnString.Var<>("state", true)));
- }
- });
- });
+ .ifPresent(player -> AntiVPN.getInstance().getExecutor().getThreadExecutor().execute(() -> {
+ if(AntiVPN.getInstance().getDatabase().getAlertsState(player.getUuid())) {
+ player.setAlertsEnabled(true);
+ player.sendMessage(AntiVPN.getInstance().getMessageHandler()
+ .getString("command-alerts-toggled")
+ .getFormattedMessage(new VpnString.Var<>("state", true)));
+ }
+ }));
}
@EventHandler
diff --git a/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitPlugin.java b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitPlugin.java
index 5cb3e69..72e9852 100644
--- a/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitPlugin.java
+++ b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitPlugin.java
@@ -39,7 +39,7 @@ public class BukkitPlugin extends JavaPlugin {
playerCommandRunner.start();
// Loading our bStats metrics to be pushed to https://bstats.org
- if(AntiVPN.getInstance().getVpnConfig().metrics()) {
+ if(AntiVPN.getInstance().getVpnConfig().isMetrics()) {
Bukkit.getLogger().info("Starting bStats metrics...");
Metrics metrics = new Metrics(this, 12615);
metrics.addCustomChart(new SimplePie("database_used", this::getDatabaseType));
diff --git a/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeListener.java b/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeListener.java
index 2ecf55d..7f3aad0 100644
--- a/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeListener.java
+++ b/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeListener.java
@@ -96,7 +96,7 @@ public class BungeeListener extends VPNExecutor implements Listener {
AntiVPN.getInstance().getExecutor().getToKick()
.add(new Tuple<>(instantResult, player.getUuid()));
- if (!AntiVPN.getInstance().getVpnConfig().kickPlayersOnDetect()) {
+ if (!AntiVPN.getInstance().getVpnConfig().isKickPlayers()) {
return;
}
@@ -110,13 +110,13 @@ public class BungeeListener extends VPNExecutor implements Listener {
case DENIED_PROXY -> event.setReason(TextComponent.fromLegacy(ChatColor
.translateAlternateColorCodes('&',
StringUtil.varReplace(
- AntiVPN.getInstance().getVpnConfig().getKickString(),
+ AntiVPN.getInstance().getVpnConfig().getKickMessage(),
player,
instantResult.response()))));
case DENIED_COUNTRY -> event.setReason(TextComponent.fromLegacy(ChatColor
.translateAlternateColorCodes('&',
StringUtil.varReplace(
- AntiVPN.getInstance().getVpnConfig().countryVanillaKickReason(),
+ AntiVPN.getInstance().getVpnConfig().getCountryVanillaKickReason(),
player,
instantResult.response()))));
}
diff --git a/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeePlugin.java b/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeePlugin.java
index 79d2486..c435bfd 100644
--- a/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeePlugin.java
+++ b/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeePlugin.java
@@ -27,7 +27,7 @@ public class BungeePlugin extends Plugin {
getProxy().getLogger().info("Starting AntiVPN services...");
AntiVPN.start(new BungeeListener(), new BungeePlayerExecutor(), getDataFolder());
- if(AntiVPN.getInstance().getVpnConfig().metrics()) {
+ if(AntiVPN.getInstance().getVpnConfig().isMetrics()) {
getProxy().getLogger().info("Starting bStats metrics...");
Metrics metrics = new Metrics(this, 12616);
metrics.addCustomChart(new SimplePie("database_used", this::getDatabaseType));
diff --git a/Common/pom.xml b/Common/pom.xml
index 56fb33a..618aebb 100644
--- a/Common/pom.xml
+++ b/Common/pom.xml
@@ -89,17 +89,8 @@
- com.mysql.cj
- dev.brighten.antivpn.shaded.com.mysql.cj
-
-
- dev.brighten.antivpn.depends.Relocate
- dev.brighten.antivpn.depends.MavenLibraries
-
-
-
- com.mysql.jdbc
- dev.brighten.antivpn.shaded.com.mysql.jdbc
+ org.postgresql
+ dev.brighten.antivpn.shaded.org.postgresql
dev.brighten.antivpn.depends.Relocate
diff --git a/Common/src/main/java/dev/brighten/antivpn/AntiVPN.java b/Common/src/main/java/dev/brighten/antivpn/AntiVPN.java
index 674944b..b663865 100644
--- a/Common/src/main/java/dev/brighten/antivpn/AntiVPN.java
+++ b/Common/src/main/java/dev/brighten/antivpn/AntiVPN.java
@@ -6,7 +6,9 @@ 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.postgres.PostgresDatabase;
import dev.brighten.antivpn.database.sqllite.LiteDatabase;
+import dev.brighten.antivpn.database.sqllite.version.Version;
import dev.brighten.antivpn.depends.LibraryLoader;
import dev.brighten.antivpn.depends.MavenLibrary;
import dev.brighten.antivpn.depends.Relocate;
@@ -36,7 +38,10 @@ import java.util.List;
relocations = {
@Relocate(from = "com\\.github\\.benmanes\\.caffeine", to = "dev.brighten.antivpn.shaded.com.github.benmanes.caffeine"),
})
-@MavenLibrary(groupId = "org\\.postgresql", artifactId = "postgresql", version = "42.7.6")
+@MavenLibrary(groupId = "org\\.postgresql", artifactId = "postgresql", version = "42.7.6",
+ relocations = {
+ @Relocate(from = "org\\.postgresql", to = "dev.brighten.antivpn.shaded.org.postgresql")
+ })
public class AntiVPN {
private static AntiVPN INSTANCE;
@@ -61,6 +66,8 @@ public class AntiVPN {
LibraryLoader.loadAll(INSTANCE);
+ Version.register();
+
try {
File configFile = new File(pluginFolder, "config.yml");
if(!configFile.exists()){
@@ -84,7 +91,14 @@ public class AntiVPN {
INSTANCE.messageHandler = new MessageHandler();
- INSTANCE.database = new LiteDatabase();
+ INSTANCE.database = switch (INSTANCE.vpnConfig.getDatabaseType().toLowerCase()) {
+ case "sqlite", "sqllite" -> new LiteDatabase();
+ case "postgresql", "postgres" -> new PostgresDatabase();
+ default ->
+ throw new IllegalStateException("Unexpected database type set at config.yml 'database.type': \""
+ + INSTANCE.vpnConfig.getDatabaseType().toLowerCase() + "\"!" +
+ "Available types: 'sqlite', 'postgresql', 'mongodb'");
+ };
INSTANCE.database.init();
//Registering commands
diff --git a/Common/src/main/java/dev/brighten/antivpn/api/APIPlayer.java b/Common/src/main/java/dev/brighten/antivpn/api/APIPlayer.java
index 6af17e7..6397f05 100644
--- a/Common/src/main/java/dev/brighten/antivpn/api/APIPlayer.java
+++ b/Common/src/main/java/dev/brighten/antivpn/api/APIPlayer.java
@@ -70,7 +70,7 @@ public abstract class APIPlayer {
// If the countryList() size is zero, no need to check.
// Running country check first
CheckResult checkResult;
- if (!AntiVPN.getInstance().getVpnConfig().countryList().isEmpty()
+ if (!AntiVPN.getInstance().getVpnConfig().getCountryList().isEmpty()
&& !((uuid != null && AntiVPN.getInstance().getExecutor()
.isWhitelisted(uuid))
//Or has a name that starts with a certain prefix. This is for Bedrock exempting.
@@ -79,9 +79,9 @@ public abstract class APIPlayer {
// If it contains the code and it is set to whitelist, it will not kick
// as they are equal and vise versa. However, if the contains does not match
// the state, it will kick.
- && AntiVPN.getInstance().getVpnConfig().countryList()
+ && AntiVPN.getInstance().getVpnConfig().getCountryList()
.contains(result.getCountryCode())
- != AntiVPN.getInstance().getVpnConfig().whitelistCountries()) {
+ != AntiVPN.getInstance().getVpnConfig().isWhitelistCountries()) {
//Using our built in kicking system if no commands are configured
checkResult = new CheckResult(result, ResultType.DENIED_COUNTRY);
} else if (result.isProxy()) {
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 6549945..64e8a13 100644
--- a/Common/src/main/java/dev/brighten/antivpn/api/VPNConfig.java
+++ b/Common/src/main/java/dev/brighten/antivpn/api/VPNConfig.java
@@ -2,17 +2,19 @@ package dev.brighten.antivpn.api;
import dev.brighten.antivpn.AntiVPN;
import dev.brighten.antivpn.utils.ConfigDefault;
+import lombok.Getter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+
public class VPNConfig {
private final ConfigDefault licenseDefault = new ConfigDefault<>("",
"license", AntiVPN.getInstance()), kickStringDefault =
new ConfigDefault<>("Proxies are not allowed on our server",
"kickMessage", AntiVPN.getInstance()),
- defaultDatabaseType = new ConfigDefault<>("H2",
+ defaultDatabaseType = new ConfigDefault<>("SQLite",
"database.type", AntiVPN.getInstance()),
defaultDatabaseName = new ConfigDefault<>("kaurivpn",
"database.database", AntiVPN.getInstance()),
@@ -52,212 +54,22 @@ public class VPNConfig {
defCountrylist = new ConfigDefault<>(new ArrayList<>(), "countries.list",
AntiVPN.getInstance());
- private String license, kickMessage, databaseType, databaseName, mongoURL, username, password, ip, alertMsg,
- countryVanillaKickReason;
+ /**
+ * -- GETTER --
+ * License from ... to be used for more queries.
+ *
+ */
+ @Getter
+ private String license, kickMessage, databaseType, databaseName, mongoURL, username, password,
+ ip, alertMsg, countryVanillaKickReason;
+ @Getter
private List prefixWhitelists, commands, countryList, countryKickCommands;
+ @Getter
private int port;
+ @Getter
private boolean cacheResults, databaseEnabled, useCredentials, commandsEnabled, kickPlayers, alertToStaff,
metrics, whitelistCountries;
- /**
- * License from https://funkemunky.cc/shop to be used for more queries.
- * @return String
- */
- public String getLicense() {
- return license;
- }
-
- /**
- * If true, results will be cached to reduce queries to https://funkemunky.cc
- * @return boolean
- */
- public boolean cachedResults() {
- return cacheResults;
- }
-
- /**
- * Will be used for vanilla kick message when {@link VPNConfig#runCommands()} is true.
- * @return String
- */
- public String getKickString() {
- return kickMessage;
- }
-
- /**
- * Message to send staff on proxy detection.
- * @return String
- */
- public String alertMessage() {
- return alertMsg;
- }
-
- /**
- * If true, staff will be alerted on proxy detection.
- * @return boolean
- */
- public boolean alertToStaff() {
- return alertToStaff;
- }
-
- /**
- * If true, will run {@link VPNConfig#commands()} on detect. If not, it will use vanilla kicking methods.
- * @return boolean
- */
- public boolean runCommands() {
- return commandsEnabled;
- }
-
- /**
- * Commands to run on proxy detection.
- * @return List
- */
- public List commands() {
- return commands;
- }
-
- /**
- * If false, no commands nor kick will be run on proxy detection.
- * @return boolean
- */
- public boolean kickPlayersOnDetect() {
- return kickPlayers;
- }
-
- /**
- * Returns Strings of which are checked against the beginning of player names. Used to
- * allow Geyser-connected players to join.
- * @return List
- */
- public List getPrefixWhitelists() {
- return prefixWhitelists;
- }
-
- /**
- * Returns true if we want to use a database
- * @return boolean
- */
- public boolean isDatabaseEnabled() {
- return databaseEnabled;
- }
-
- /**
- * Whether or not the database we want to connect to requires credentials.
- * @return boolean
- */
- public boolean useDatabaseCreds() {
- return useCredentials;
- }
-
- /**
- * Only for Mongo only. URL used for connecting to database. Overrides other fields
- * @return String
- */
- public String mongoDatabaseURL() {
- return mongoURL;
- }
-
- /**
- * Database type. Either MySQL and Mongo.
- * @return String
- */
- public String getDatabaseType() {
- return databaseType;
- }
-
- /**
- * Database name
- * @return String
- */
- public String getDatabaseName() {
- return databaseName;
- }
-
- /**
- * Database username
- * @return String
- */
- public String getUsername() {
- return username;
- }
-
- /**
- * Database Password
- * @return String
- */
- public String getPassword() {
- return password;
- }
-
- /**
- * Database IP
- * @return String
- */
- public String getIp() {
- return ip;
- }
-
- /**
- * Returns the list of ISO country codes we need to check.
- * @return List
- */
- public List countryList() {
- return countryList;
- }
-
- /**
- * If true, we only allow the {@link VPNConfig#countryKickCommands()}. If false, we blacklist them.
- * @return boolean
- */
- public boolean whitelistCountries() {
- return whitelistCountries;
- }
-
- /**
- * Returns our configured commands to run on player country detection.
- * @return List
- */
- public List countryKickCommands() {
- return countryKickCommands;
- }
-
- /**
- * Returns the vanilla kick reason for bad country locations
- * @return String
- */
- public String countryVanillaKickReason() {
- return countryVanillaKickReason;
- }
-
- /**
- * Gets the port based on configuration. If {@link VPNConfig#port} is -1, will get default port
- * based on {@link VPNConfig#getDatabaseType()} lowerCase().
- * @return int
- */
- public int getPort() {
- if(port == -1) {
- switch (getDatabaseType().toLowerCase()) {
- case "mongodb":
- case "mongo":
- case "mongod":
- return 27017;
- case "sql":
- case "mysql":
- return 3306;
- }
- }
-
- return port;
- }
-
-
- /**
- * If true, https://bstats.org metrics will be collected to improve KauriVPN.
- * @return boolean
- */
- public boolean metrics() {
- return metrics;
- }
-
/**
* Grabs all information from the config.yml
*/
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 e979581..01b2a06 100644
--- a/Common/src/main/java/dev/brighten/antivpn/api/VPNExecutor.java
+++ b/Common/src/main/java/dev/brighten/antivpn/api/VPNExecutor.java
@@ -73,35 +73,35 @@ public abstract class VPNExecutor {
}
public void handleKickingOfPlayer(CheckResult result, APIPlayer player) {
- if (AntiVPN.getInstance().getVpnConfig().alertToStaff()) AntiVPN.getInstance().getPlayerExecutor()
+ if (AntiVPN.getInstance().getVpnConfig().isAlertToStaff()) AntiVPN.getInstance().getPlayerExecutor()
.getOnlinePlayers()
.stream()
.filter(APIPlayer::isAlertsEnabled)
.forEach(pl ->
pl.sendMessage(StringUtil.translateAlternateColorCodes('&',
StringUtil.varReplace(dev.brighten.antivpn.AntiVPN.getInstance().getVpnConfig()
- .alertMessage(), player, result.response()))));
+ .getAlertMsg(), player, result.response()))));
- if(AntiVPN.getInstance().getVpnConfig().kickPlayersOnDetect()) {
+ if(AntiVPN.getInstance().getVpnConfig().isKickPlayers()) {
switch (result.resultType()) {
case DENIED_PROXY -> player.kickPlayer(StringUtil.varReplace(AntiVPN.getInstance().getVpnConfig()
- .getKickString(), player, result.response()));
+ .getKickMessage(), player, result.response()));
case DENIED_COUNTRY -> player.kickPlayer(StringUtil.varReplace(AntiVPN.getInstance().getVpnConfig()
- .countryVanillaKickReason(), player, result.response()));
+ .getCountryVanillaKickReason(), player, result.response()));
}
}
- if(!AntiVPN.getInstance().getVpnConfig().runCommands()) return;
+ if(!AntiVPN.getInstance().getVpnConfig().isCommandsEnabled()) return;
switch (result.resultType()) {
case DENIED_PROXY -> {
- for (String command : AntiVPN.getInstance().getVpnConfig().commands()) {
+ for (String command : AntiVPN.getInstance().getVpnConfig().getCommands()) {
runCommand(StringUtil.translateAlternateColorCodes('&',
StringUtil.varReplace(command, player, result.response())));
}
}
case DENIED_COUNTRY -> {
- for (String command : AntiVPN.getInstance().getVpnConfig().countryKickCommands()) {
+ for (String command : AntiVPN.getInstance().getVpnConfig().getCountryKickCommands()) {
runCommand(StringUtil.translateAlternateColorCodes('&',
StringUtil.varReplace(command, player, result.response())));
}
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 59ebf74..b2378d6 100644
--- a/Common/src/main/java/dev/brighten/antivpn/database/VPNDatabase.java
+++ b/Common/src/main/java/dev/brighten/antivpn/database/VPNDatabase.java
@@ -1,10 +1,15 @@
package dev.brighten.antivpn.database;
+import dev.brighten.antivpn.AntiVPN;
+import dev.brighten.antivpn.database.sqllite.version.Version;
import dev.brighten.antivpn.web.objects.VPNResponse;
+import org.intellij.lang.annotations.Language;
+import java.sql.*;
import java.util.Optional;
import java.util.UUID;
+@SuppressWarnings({"unused", "SqlSourceToSinkFlow"})
public interface VPNDatabase {
Optional getStoredResponse(String ip);
@@ -32,5 +37,52 @@ public interface VPNDatabase {
void init();
+ default void setupTable() throws SQLException {
+ try(Connection connection = connection()) {
+ Statement statement = connection.createStatement();
+ statement.execute("CREATE TABLE IF NOT EXISTS vpn_responses (ip TEXT, response TEXT)");
+ statement.execute("CREATE TABLE IF NOT EXISTS whitelist (uuid TEXT, minimum NUMERIC, maximum NUMERIC)");
+ statement.execute("CREATE TABLE IF NOT EXISTS alerts (uuid TEXT)");
+ statement.execute("CREATE TABLE IF NOT EXISTS version (version INTEGER PRIMARY KEY, updated BOOLEAN)");
+
+ // Run through updates
+ for (Version version : Version.versions) {
+ try(ResultSet result = query("SELECT * FROM version WHERE version = ?",
+ version.versionNumber())) {
+ if(!result.next()) {
+ version.update(this);
+ statement("INSERT INTO version (version, updated) VALUES (?, ?)",
+ version.versionNumber(), true);
+ }
+ } catch (SQLException e) {
+ AntiVPN.getInstance().getExecutor().logException(e);
+ }
+ }
+ }
+ }
+
+ default ResultSet query(@Language("SQL") String query, Object... args) throws SQLException {
+ try(Connection connection = connection()) {
+ PreparedStatement pstmt = connection.prepareStatement(query);
+ for (int i = 0; i < args.length; i++) {
+ pstmt.setObject(i + 1, args[i]);
+ }
+
+ return pstmt.executeQuery();
+ }
+ }
+
+ default void statement(@Language("SQL") String query, Object... args) throws SQLException {
+ try(Connection connection = connection()) {
+ PreparedStatement pstmt = connection.prepareStatement(query);
+ for (int i = 0; i < args.length; i++) {
+ pstmt.setObject(i + 1, args[i]);
+ }
+
+ pstmt.execute();
+ }
+ }
+ Connection connection();
+
void shutdown();
}
diff --git a/Common/src/main/java/dev/brighten/antivpn/database/postgres/PostgresDatabase.java b/Common/src/main/java/dev/brighten/antivpn/database/postgres/PostgresDatabase.java
new file mode 100644
index 0000000..e21a3e0
--- /dev/null
+++ b/Common/src/main/java/dev/brighten/antivpn/database/postgres/PostgresDatabase.java
@@ -0,0 +1,42 @@
+package dev.brighten.antivpn.database.postgres;
+
+import dev.brighten.antivpn.AntiVPN;
+import dev.brighten.antivpn.database.sqllite.LiteDatabase;
+
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.util.Properties;
+
+public class PostgresDatabase extends LiteDatabase {
+
+ @Override
+ public void init() {
+
+ try {
+ Class.forName("org.postgresql.Driver");
+ } catch (ClassNotFoundException e) {
+ AntiVPN.getInstance().getExecutor().logException(e);
+ return;
+ }
+ String databaseName = AntiVPN.getInstance().getVpnConfig().getDatabaseName();
+ String ipAddress = AntiVPN.getInstance().getVpnConfig().getIp();
+ int port = AntiVPN.getInstance().getVpnConfig().getPort();
+ String username = AntiVPN.getInstance().getVpnConfig().getUsername();
+ String password = AntiVPN.getInstance().getVpnConfig().getPassword();
+
+ String url = String.format("jdbc:postgresql://%s:%s/%s", ipAddress, port, databaseName);
+
+ Properties properties = new Properties();
+
+ properties.setProperty("user", username);
+ properties.setProperty("password", password);
+ properties.setProperty("ssl", "true");
+
+ try {
+ connection = DriverManager.getConnection(url, properties);
+ } catch (SQLException e) {
+ AntiVPN.getInstance().getExecutor().logException(e);
+ }
+
+ }
+}
diff --git a/Common/src/main/java/dev/brighten/antivpn/database/sqllite/LiteDatabase.java b/Common/src/main/java/dev/brighten/antivpn/database/sqllite/LiteDatabase.java
index a184ed8..148b5ca 100644
--- a/Common/src/main/java/dev/brighten/antivpn/database/sqllite/LiteDatabase.java
+++ b/Common/src/main/java/dev/brighten/antivpn/database/sqllite/LiteDatabase.java
@@ -2,13 +2,11 @@ package dev.brighten.antivpn.database.sqllite;
import dev.brighten.antivpn.AntiVPN;
import dev.brighten.antivpn.database.VPNDatabase;
-import dev.brighten.antivpn.database.sqllite.version.Version;
import dev.brighten.antivpn.utils.CIDRUtils;
import dev.brighten.antivpn.utils.IpUtils;
import dev.brighten.antivpn.utils.StringUtil;
import dev.brighten.antivpn.utils.json.JSONException;
import dev.brighten.antivpn.web.objects.VPNResponse;
-import org.intellij.lang.annotations.Language;
import java.math.BigDecimal;
import java.net.UnknownHostException;
@@ -18,7 +16,7 @@ import java.util.UUID;
public class LiteDatabase implements VPNDatabase {
- private Connection connection;
+ protected Connection connection;
@Override
public Optional getStoredResponse(String ip) {
@@ -55,6 +53,7 @@ public class LiteDatabase implements VPNDatabase {
}
}
+ @SuppressWarnings("SqlWithoutWhere")
@Override
public void clearResponses() {
try {
@@ -170,8 +169,11 @@ public class LiteDatabase implements VPNDatabase {
@Override
public void updateAlertsState(UUID uuid, boolean state) {
try {
- statement("INSERT INTO alerts (uuid, STATE) VALUES (?, ?) ON CONFLICT(uuid) DO UPDATE SET STATE = ?",
- uuid.toString(), state, state);
+ statement("DELETE FROM alerts WHERE uuid = ?", uuid.toString());
+ if(state) {
+ statement("INSERT INTO alerts (uuid) VALUES (?)",
+ uuid.toString());
+ }
} catch (SQLException e) {
AntiVPN.getInstance().getExecutor().logException(e);
}
@@ -183,33 +185,25 @@ public class LiteDatabase implements VPNDatabase {
try {
Class.forName("org.sqlite.JDBC");
- Connection connection = DriverManager.getConnection(url);
- Statement statement = connection.createStatement();
- statement.execute("CREATE TABLE IF NOT EXISTS vpn_responses (ip TEXT, response TEXT)");
- statement.execute("CREATE TABLE IF NOT EXISTS whitelist (uuid TEXT, minimum NUMERIC, maximum NUMERIC)");
- statement.execute("CREATE TABLE IF NOT EXISTS alerts (uuid TEXT)");
- statement.execute("CREATE TABLE IF NOT EXISTS version (version INTEGER PRIMARY KEY, updated BOOLEAN)");
- this.connection = connection;
+ this.connection = DriverManager.getConnection(url);
- // Run through updates
- for (Version version : Version.versions) {
- try(ResultSet result = query("SELECT * FROM version WHERE version = ?",
- version.versionNumber())) {
- if(!result.next()) {
- version.update(this);
- statement("INSERT INTO version (version, updated) VALUES (?, ?)",
- version.versionNumber(), true);
- }
- } catch (SQLException e) {
- AntiVPN.getInstance().getExecutor().logException(e);
- }
- }
+ setupTable();
} catch (SQLException | ClassNotFoundException e) {
AntiVPN.getInstance().getExecutor().logException(e);
}
}
+ @Override
+ public void setupTable() throws SQLException {
+ VPNDatabase.super.setupTable();
+ }
+
+ @Override
+ public Connection connection() {
+ return connection;
+ }
+
@Override
public void shutdown() {
try {
@@ -218,22 +212,4 @@ public class LiteDatabase implements VPNDatabase {
AntiVPN.getInstance().getExecutor().logException(e);
}
}
-
- private ResultSet query(@Language("SQL") String query, Object... args) throws SQLException {
- PreparedStatement pstmt = connection.prepareStatement(query);
- for (int i = 0; i < args.length; i++) {
- pstmt.setObject(i + 1, args[i]);
- }
-
- return pstmt.executeQuery();
- }
-
- public void statement(@Language("SQL") String query, Object... args) throws SQLException {
- PreparedStatement pstmt = connection.prepareStatement(query);
- for (int i = 0; i < args.length; i++) {
- pstmt.setObject(i + 1, args[i]);
- }
-
- pstmt.execute();
- }
}
diff --git a/Common/src/main/java/dev/brighten/antivpn/database/sqllite/version/Version.java b/Common/src/main/java/dev/brighten/antivpn/database/sqllite/version/Version.java
index 392a2e4..f01202c 100644
--- a/Common/src/main/java/dev/brighten/antivpn/database/sqllite/version/Version.java
+++ b/Common/src/main/java/dev/brighten/antivpn/database/sqllite/version/Version.java
@@ -1,18 +1,19 @@
package dev.brighten.antivpn.database.sqllite.version;
-import dev.brighten.antivpn.database.sqllite.LiteDatabase;
+import dev.brighten.antivpn.database.VPNDatabase;
+import dev.brighten.antivpn.database.sqllite.version.impl.First;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public interface Version {
- void update(LiteDatabase database) throws SQLException;
+ void update(VPNDatabase database) throws SQLException;
int versionNumber();
List versions = new ArrayList<>();
- static void register(Version version) {
- versions.add(version);
+ static void register() {
+ versions.add(new First());
}
}
diff --git a/Common/src/main/java/dev/brighten/antivpn/database/sqllite/version/impl/First.java b/Common/src/main/java/dev/brighten/antivpn/database/sqllite/version/impl/First.java
index 69ff011..fd95bf1 100644
--- a/Common/src/main/java/dev/brighten/antivpn/database/sqllite/version/impl/First.java
+++ b/Common/src/main/java/dev/brighten/antivpn/database/sqllite/version/impl/First.java
@@ -1,12 +1,12 @@
package dev.brighten.antivpn.database.sqllite.version.impl;
-import dev.brighten.antivpn.database.sqllite.LiteDatabase;
+import dev.brighten.antivpn.database.VPNDatabase;
import dev.brighten.antivpn.database.sqllite.version.Version;
public class First implements Version {
@Override
- public void update(LiteDatabase database) {
+ public void update(VPNDatabase database) {
}
diff --git a/Sponge/src/main/java/dev/brighten/antivpn/sponge/SpongeListener.java b/Sponge/src/main/java/dev/brighten/antivpn/sponge/SpongeListener.java
index 47b6664..c26fab1 100644
--- a/Sponge/src/main/java/dev/brighten/antivpn/sponge/SpongeListener.java
+++ b/Sponge/src/main/java/dev/brighten/antivpn/sponge/SpongeListener.java
@@ -38,7 +38,7 @@ public class SpongeListener extends VPNExecutor {
AntiVPN.getInstance().getExecutor().getToKick().add(new Tuple<>(instantResult, player.get().getUuid()));
- if(!AntiVPN.getInstance().getVpnConfig().kickPlayersOnDetect()) {
+ if(!AntiVPN.getInstance().getVpnConfig().isKickPlayers()) {
return;
}
@@ -51,7 +51,7 @@ public class SpongeListener extends VPNExecutor {
+ " joined on a VPN/Proxy (" + instantResult.response().getMethod() + ")");
event.setMessage(Component.text(StringUtil
.translateColorCodes('&', AntiVPN.getInstance().getVpnConfig()
- .getKickString()
+ .getKickMessage()
.replace("%player%", player.get().getName())
.replace("%country%", instantResult.response().getCountryName())
.replace("%code%", instantResult.response().getCountryCode()))));
@@ -59,7 +59,7 @@ public class SpongeListener extends VPNExecutor {
case DENIED_COUNTRY ->
event.setMessage(Component.text(StringUtil
.translateColorCodes('&', AntiVPN.getInstance().getVpnConfig()
- .countryVanillaKickReason()
+ .getCountryVanillaKickReason()
.replace("%player%", player.get().getName())
.replace("%country%", instantResult.response().getCountryName())
.replace("%code%", instantResult.response().getCountryCode()))));
diff --git a/Velocity/src/main/java/dev/brighten/antivpn/velocity/VelocityListener.java b/Velocity/src/main/java/dev/brighten/antivpn/velocity/VelocityListener.java
index 1aca72a..d88f731 100644
--- a/Velocity/src/main/java/dev/brighten/antivpn/velocity/VelocityListener.java
+++ b/Velocity/src/main/java/dev/brighten/antivpn/velocity/VelocityListener.java
@@ -49,7 +49,7 @@ public class VelocityListener extends VPNExecutor {
LegacyComponentSerializer.builder()
.character('&')
.build().deserialize(AntiVPN.getInstance().getVpnConfig()
- .countryVanillaKickReason()
+ .getCountryVanillaKickReason()
.replace("%player%", event.getPlayer().getUsername())
.replace("%country%", instantResult.response().getCountryName())
.replace("%code%", instantResult.response().getCountryCode()))));
@@ -59,7 +59,7 @@ public class VelocityListener extends VPNExecutor {
event.setResult(ResultedEvent.ComponentResult.denied(LegacyComponentSerializer.builder()
.character('&')
.build().deserialize(AntiVPN.getInstance().getVpnConfig()
- .getKickString()
+ .getKickMessage()
.replace("%player%", event.getPlayer().getUsername())
.replace("%country%", instantResult.response().getCountryName())
.replace("%code%", instantResult.response().getCountryCode()))));
@@ -77,12 +77,12 @@ public class VelocityListener extends VPNExecutor {
private void handleDeniedTasks(LoginEvent event, CheckResult checkResult, boolean deniedOnLogin) {
VPNResponse result = checkResult.response();
//Ensuring the user wishes to alert to staff
- if (AntiVPN.getInstance().getVpnConfig().alertToStaff())
+ if (AntiVPN.getInstance().getVpnConfig().isAlertToStaff())
AntiVPN.getInstance().getPlayerExecutor().getOnlinePlayers().stream()
.filter(APIPlayer::isAlertsEnabled)
.forEach(pl ->
pl.sendMessage(dev.brighten.antivpn.AntiVPN.getInstance().getVpnConfig()
- .alertMessage()
+ .getAlertMsg()
.replace("%player%",
event.getPlayer().getUsername())
.replace("%reason%",
@@ -97,14 +97,14 @@ public class VelocityListener extends VPNExecutor {
//In case the user wants to run their own commands instead of using the
// built in kicking
- if (AntiVPN.getInstance().getVpnConfig().kickPlayersOnDetect()) {
+ if (AntiVPN.getInstance().getVpnConfig().isKickPlayers()) {
switch (checkResult.resultType()) {
case DENIED_PROXY -> VelocityPlugin.INSTANCE.getServer().getScheduler()
.buildTask(VelocityPlugin.INSTANCE, () ->
event.getPlayer().disconnect(LegacyComponentSerializer.builder()
.character('&')
.build().deserialize(AntiVPN.getInstance().getVpnConfig()
- .getKickString()
+ .getKickMessage()
.replace("%player%", event.getPlayer().getUsername())
.replace("%country%", result.getCountryName())
.replace("%code%", result.getCountryCode()))))
@@ -114,7 +114,7 @@ public class VelocityListener extends VPNExecutor {
event.getPlayer().disconnect(LegacyComponentSerializer.builder()
.character('&')
.build().deserialize(AntiVPN.getInstance().getVpnConfig()
- .countryVanillaKickReason()
+ .getCountryVanillaKickReason()
.replace("%player%", event.getPlayer().getUsername())
.replace("%country%", result.getCountryName())
.replace("%code%", result.getCountryCode()))))
@@ -122,11 +122,11 @@ public class VelocityListener extends VPNExecutor {
}
}
- if (!AntiVPN.getInstance().getVpnConfig().runCommands()) return;
+ if (!AntiVPN.getInstance().getVpnConfig().isCommandsEnabled()) return;
switch (checkResult.resultType()) {
case DENIED_PROXY -> {
- for (String command : AntiVPN.getInstance().getVpnConfig().commands()) {
+ for (String command : AntiVPN.getInstance().getVpnConfig().getCommands()) {
VelocityPlugin.INSTANCE.getServer().getCommandManager()
.executeAsync(VelocityPlugin.INSTANCE.getServer()
.getConsoleCommandSource(),
@@ -144,7 +144,7 @@ public class VelocityListener extends VPNExecutor {
}
}
case DENIED_COUNTRY -> {
- for (String cmd : AntiVPN.getInstance().getVpnConfig().countryKickCommands()) {
+ for (String cmd : AntiVPN.getInstance().getVpnConfig().getCountryKickCommands()) {
final String formattedCommand = StringUtil
.translateAlternateColorCodes('&',
StringUtil.varReplace(
diff --git a/Velocity/src/main/java/dev/brighten/antivpn/velocity/VelocityPlugin.java b/Velocity/src/main/java/dev/brighten/antivpn/velocity/VelocityPlugin.java
index 2fc4d36..2252ee9 100644
--- a/Velocity/src/main/java/dev/brighten/antivpn/velocity/VelocityPlugin.java
+++ b/Velocity/src/main/java/dev/brighten/antivpn/velocity/VelocityPlugin.java
@@ -52,7 +52,7 @@ public class VelocityPlugin {
logger.info("Starting AntiVPN services...");
AntiVPN.start(new VelocityListener(), new VelocityPlayerExecutor(), configDir.toFile());
- if(AntiVPN.getInstance().getVpnConfig().metrics()) {
+ if(AntiVPN.getInstance().getVpnConfig().isMetrics()) {
logger.info("Starting metrics...");
metrics = metricsFactory.make(this, 12791);