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);