From 9600f2d5d9d9a4ab816cf85a48d04497081c3470 Mon Sep 17 00:00:00 2001 From: Taah Date: Tue, 19 Apr 2022 13:33:58 -0700 Subject: [PATCH] add warning for querying plex players by ip when using sqlite --- .../java/dev/plex/command/impl/PlexCMD.java | 1 + .../plex/storage/player/SQLPlayerData.java | 133 ++++++++++++------ src/main/java/dev/plex/util/PlexLog.java | 19 ++- 3 files changed, 106 insertions(+), 47 deletions(-) diff --git a/src/main/java/dev/plex/command/impl/PlexCMD.java b/src/main/java/dev/plex/command/impl/PlexCMD.java index 564ed5d..0012fff 100644 --- a/src/main/java/dev/plex/command/impl/PlexCMD.java +++ b/src/main/java/dev/plex/command/impl/PlexCMD.java @@ -16,6 +16,7 @@ import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.apache.commons.lang.StringUtils; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; diff --git a/src/main/java/dev/plex/storage/player/SQLPlayerData.java b/src/main/java/dev/plex/storage/player/SQLPlayerData.java index f16a9bf..a015ffc 100644 --- a/src/main/java/dev/plex/storage/player/SQLPlayerData.java +++ b/src/main/java/dev/plex/storage/player/SQLPlayerData.java @@ -5,6 +5,9 @@ import com.google.gson.Gson; import dev.plex.Plex; import dev.plex.cache.PlayerCache; import dev.plex.player.PlexPlayer; +import dev.plex.storage.StorageType; +import dev.plex.util.PlexLog; + import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -35,8 +38,7 @@ public class SQLPlayerData statement.setString(1, uuid.toString()); ResultSet set = statement.executeQuery(); return set.next(); - } - catch (SQLException throwables) + } catch (SQLException throwables) { throwables.printStackTrace(); } @@ -51,8 +53,7 @@ public class SQLPlayerData statement.setString(1, username); ResultSet set = statement.executeQuery(); return set.next(); - } - catch (SQLException throwables) + } catch (SQLException throwables) { throwables.printStackTrace(); } @@ -103,8 +104,7 @@ public class SQLPlayerData plexPlayer.setCommandSpy(commandspy); } return plexPlayer; - } - catch (SQLException throwables) + } catch (SQLException throwables) { throwables.printStackTrace(); } @@ -148,8 +148,7 @@ public class SQLPlayerData return plexPlayer; } return null; - } - catch (SQLException throwables) + } catch (SQLException throwables) { throwables.printStackTrace(); } @@ -171,44 +170,90 @@ public class SQLPlayerData return player; } - try (Connection con = Plex.get().getSqlConnection().getCon()) + if (Plex.get().getStorageType() == StorageType.MARIADB) { - PreparedStatement statement = con.prepareStatement("select * from `players` where json_search(ips, ?, ?) IS NOT NULL LIMIT 1"); - statement.setString(1, "one"); - statement.setString(2, ip); - ResultSet set = statement.executeQuery(); - - PlexPlayer plexPlayer = null; - while (set.next()) + try (Connection con = Plex.get().getSqlConnection().getCon()) { - String uuid = set.getString("uuid"); - String name = set.getString("name"); - String loginMSG = set.getString("login_msg"); - String prefix = set.getString("prefix"); - String rankName = set.getString("rank").toUpperCase(); - boolean adminActive = set.getBoolean("adminActive"); - long coins = set.getLong("coins"); - boolean vanished = set.getBoolean("vanished"); - boolean commandspy = set.getBoolean("commandspy"); - List ips = new Gson().fromJson(set.getString("ips"), new TypeToken>() + PreparedStatement statement = con.prepareStatement("select * from `players` where json_search(ips, ?, ?) IS NOT NULL LIMIT 1"); + statement.setString(1, "one"); + statement.setString(2, ip); + ResultSet set = statement.executeQuery(); + + PlexPlayer plexPlayer = null; + while (set.next()) { - }.getType()); - plexPlayer = new PlexPlayer(UUID.fromString(uuid)); - plexPlayer.setName(name); - plexPlayer.setLoginMessage(loginMSG); - plexPlayer.setPrefix(prefix); - plexPlayer.setRank(rankName); - plexPlayer.setAdminActive(adminActive); - plexPlayer.setIps(ips); - plexPlayer.setCoins(coins); - plexPlayer.setVanished(vanished); - plexPlayer.setCommandSpy(commandspy); + String uuid = set.getString("uuid"); + String name = set.getString("name"); + String loginMSG = set.getString("login_msg"); + String prefix = set.getString("prefix"); + String rankName = set.getString("rank").toUpperCase(); + boolean adminActive = set.getBoolean("adminActive"); + long coins = set.getLong("coins"); + boolean vanished = set.getBoolean("vanished"); + boolean commandspy = set.getBoolean("commandspy"); + List ips = new Gson().fromJson(set.getString("ips"), new TypeToken>() + { + }.getType()); + plexPlayer = new PlexPlayer(UUID.fromString(uuid)); + plexPlayer.setName(name); + plexPlayer.setLoginMessage(loginMSG); + plexPlayer.setPrefix(prefix); + plexPlayer.setRank(rankName); + plexPlayer.setAdminActive(adminActive); + plexPlayer.setIps(ips); + plexPlayer.setCoins(coins); + plexPlayer.setVanished(vanished); + plexPlayer.setCommandSpy(commandspy); + } + return plexPlayer; + } catch (SQLException throwables) + { + throwables.printStackTrace(); } - return plexPlayer; - } - catch (SQLException throwables) + } else if (Plex.get().getStorageType() == StorageType.SQLITE) { - throwables.printStackTrace(); + PlexLog.warn("Querying a user by IP running SQLite can cause performance issues! Please try to switch to a remote DB ASAP!"); + try (Connection con = Plex.get().getSqlConnection().getCon()) + { + PreparedStatement statement = con.prepareStatement("select * from `players`"); + ResultSet set = statement.executeQuery(); + + PlexPlayer plexPlayer = null; + while (set.next()) + { + List ips = new Gson().fromJson(set.getString("ips"), new TypeToken>() + { + }.getType()); + if (!ips.contains(ip)) + { + continue; + } + String uuid = set.getString("uuid"); + String name = set.getString("name"); + String loginMSG = set.getString("login_msg"); + String prefix = set.getString("prefix"); + String rankName = set.getString("rank").toUpperCase(); + boolean adminActive = set.getBoolean("adminActive"); + long coins = set.getLong("coins"); + boolean vanished = set.getBoolean("vanished"); + boolean commandspy = set.getBoolean("commandspy"); + + plexPlayer = new PlexPlayer(UUID.fromString(uuid)); + plexPlayer.setName(name); + plexPlayer.setLoginMessage(loginMSG); + plexPlayer.setPrefix(prefix); + plexPlayer.setRank(rankName); + plexPlayer.setAdminActive(adminActive); + plexPlayer.setIps(ips); + plexPlayer.setCoins(coins); + plexPlayer.setVanished(vanished); + plexPlayer.setCommandSpy(commandspy); + } + return plexPlayer; + } catch (SQLException throwables) + { + throwables.printStackTrace(); + } } return null; } @@ -235,8 +280,7 @@ public class SQLPlayerData statement.setBoolean(9, player.isCommandSpy()); statement.setString(10, player.getUuid().toString()); statement.executeUpdate(); - } - catch (SQLException throwables) + } catch (SQLException throwables) { throwables.printStackTrace(); } @@ -264,8 +308,7 @@ public class SQLPlayerData statement.setBoolean(9, player.isVanished()); statement.setBoolean(10, player.isCommandSpy()); statement.execute(); - } - catch (SQLException throwables) + } catch (SQLException throwables) { throwables.printStackTrace(); } diff --git a/src/main/java/dev/plex/util/PlexLog.java b/src/main/java/dev/plex/util/PlexLog.java index 5c745dd..f6d5f42 100644 --- a/src/main/java/dev/plex/util/PlexLog.java +++ b/src/main/java/dev/plex/util/PlexLog.java @@ -34,7 +34,21 @@ public class PlexLog message = message.replace("{" + i + "}", strings[i].toString()); } } - Bukkit.getConsoleSender().sendMessage(String.format(ChatColor.RED + "[Plex Error] " + ChatColor.GOLD + "%s", message)); + Bukkit.getConsoleSender().sendMessage(PlexUtils.mmDeserialize("[Plex Error] " + message)); +// Bukkit.getConsoleSender().sendMessage(String.format(ChatColor.RED + "[Plex Error] " + ChatColor.GOLD + "%s", message)); + } + + public static void warn(String message, Object... strings) + { + for (int i = 0; i < strings.length; i++) + { + if (message.contains("{" + i + "}")) + { + message = message.replace("{" + i + "}", strings[i].toString()); + } + } +// Bukkit.getConsoleSender().sendMessage(String.format(ChatColor.YELLOW + "[Plex Warning] " + ChatColor.GOLD + "%s", message)); + Bukkit.getConsoleSender().sendMessage(PlexUtils.mmDeserialize("<#eb7c0e>[Plex Warning] " + message)); } public static void debug(String message, Object... strings) @@ -48,7 +62,8 @@ public class PlexLog } if (Plex.get().config.getBoolean("debug")) { - Bukkit.getConsoleSender().sendMessage(String.format(ChatColor.DARK_PURPLE + "[Plex Debug] " + ChatColor.GOLD + "%s", message)); + Bukkit.getConsoleSender().sendMessage(PlexUtils.mmDeserialize("[Plex Debug] " + message)); +// Bukkit.getConsoleSender().sendMessage(String.format(ChatColor.DARK_PURPLE + "[Plex Debug] " + ChatColor.GOLD + "%s", message)); } } }