diff options
| author | LMBishop <13875753+LMBishop@users.noreply.github.com> | 2022-05-06 20:30:12 +0100 |
|---|---|---|
| committer | LMBishop <13875753+LMBishop@users.noreply.github.com> | 2022-05-06 20:30:12 +0100 |
| commit | 55691a6b054d4b9fd1cb1a4b2425a28f16d64436 (patch) | |
| tree | b6cad6db54142ef3155558e48acb771e50d43b53 | |
| parent | 887589d57b658da26c37e108c544d16b9a40dbb7 (diff) | |
Prevent migration from similar mysql databases
4 files changed, 34 insertions, 4 deletions
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; + } } diff --git a/common/src/main/java/com/leonardobishop/quests/common/storage/StorageProvider.java b/common/src/main/java/com/leonardobishop/quests/common/storage/StorageProvider.java index 8eaaf181..be2178c6 100644 --- a/common/src/main/java/com/leonardobishop/quests/common/storage/StorageProvider.java +++ b/common/src/main/java/com/leonardobishop/quests/common/storage/StorageProvider.java @@ -49,4 +49,13 @@ public interface StorageProvider { **/ void saveAllProgressFiles(List<QuestProgressFile> files); + /** + * Whether this provider is 'similar' to another one. + * Similarity is determined if the provider effectively points to the same data source. + * + * @param provider the provider to compare to + * @return true if similar, false otherwise + */ + boolean isSimilar(StorageProvider provider); + } |
