From 55691a6b054d4b9fd1cb1a4b2425a28f16d64436 Mon Sep 17 00:00:00 2001 From: LMBishop <13875753+LMBishop@users.noreply.github.com> Date: Fri, 6 May 2022 20:30:12 +0100 Subject: Prevent migration from similar mysql databases --- .../bukkit/command/AdminMigrateCommandHandler.java | 7 +++---- .../quests/bukkit/storage/MySqlStorageProvider.java | 17 +++++++++++++++++ .../quests/bukkit/storage/YamlStorageProvider.java | 5 +++++ 3 files changed, 25 insertions(+), 4 deletions(-) (limited to 'bukkit/src/main') diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminMigrateCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminMigrateCommandHandler.java index 88e39d32..2f3ad0af 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminMigrateCommandHandler.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminMigrateCommandHandler.java @@ -71,10 +71,9 @@ public class AdminMigrateCommandHandler implements CommandHandler { StorageProvider fromProvider = getStorageProvider(fromConfiguration); StorageProvider toProvider = getStorageProvider(toConfiguration); - if (fromProvider.getName().equals("yaml") && toProvider.getName().equals("yaml")) { - //TODO check mysql databases aren't the same as well - sender.sendMessage(ChatColor.RED + "Refusing to migrate from 'yaml' to 'yaml'."); - sender.sendMessage(ChatColor.RED + "Please see the migrate_data.yml file, or the wiki, for instructions."); + if (fromProvider.isSimilar(toProvider)) { + sender.sendMessage(ChatColor.RED + "Refusing to migrate from and to identical database! " + + "Your configured storage providers effectively point to the same data source."); return; } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/MySqlStorageProvider.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/MySqlStorageProvider.java index 640bbd98..3d5f6ea1 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/MySqlStorageProvider.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/MySqlStorageProvider.java @@ -353,6 +353,23 @@ public class MySqlStorageProvider implements StorageProvider { } } + @Override + public boolean isSimilar(StorageProvider provider) { + if (!(provider instanceof MySqlStorageProvider)) { + return false; + } + + MySqlStorageProvider other = (MySqlStorageProvider) provider; + + String address = configuration.getString("network.address", "localhost:3306"); + String database = configuration.getString("network.database", "minecraft"); + + String otherAddress = other.configuration.getString("network.address", "localhost:3306"); + String otherDatabase = other.configuration.getString("network.database", "minecraft"); + + return address.equalsIgnoreCase(otherAddress) && database.equalsIgnoreCase(otherDatabase); + } + private class DatabaseMigrator { private static final String GET_STARTED_DATE_COLUMN = "SHOW COLUMNS from `{prefix}quest_progress` LIKE 'started_date';"; diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/YamlStorageProvider.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/YamlStorageProvider.java index c5aae904..4d758145 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/YamlStorageProvider.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/YamlStorageProvider.java @@ -196,4 +196,9 @@ public class YamlStorageProvider implements StorageProvider { saveProgressFile(file.getPlayerUUID(), file); } } + + @Override + public boolean isSimilar(StorageProvider provider) { + return provider instanceof YamlStorageProvider; + } } -- cgit v1.2.3-70-g09d2