summaryrefslogtreecommitdiffstats
path: root/bukkit/src/main
diff options
context:
space:
mode:
authorLMBishop <13875753+LMBishop@users.noreply.github.com>2022-05-06 20:30:12 +0100
committerLMBishop <13875753+LMBishop@users.noreply.github.com>2022-05-06 20:30:12 +0100
commit55691a6b054d4b9fd1cb1a4b2425a28f16d64436 (patch)
treeb6cad6db54142ef3155558e48acb771e50d43b53 /bukkit/src/main
parent887589d57b658da26c37e108c544d16b9a40dbb7 (diff)
Prevent migration from similar mysql databases
Diffstat (limited to 'bukkit/src/main')
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminMigrateCommandHandler.java7
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/MySqlStorageProvider.java17
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/YamlStorageProvider.java5
3 files changed, 25 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;
+ }
}