From c12735d2f4883d74e72ba45ae86a1a879fbb22be Mon Sep 17 00:00:00 2001 From: Xephi Date: Thu, 28 Aug 2014 06:24:47 +0200 Subject: [PATCH] Add sqltoflat converter type --- .../authme/commands/ConverterCommand.java | 9 +++- .../fr/xephi/authme/converter/FlatToSql.java | 7 ++- .../fr/xephi/authme/converter/SqlToFlat.java | 52 +++++++++++++++++++ .../xephi/authme/datasource/DataSource.java | 2 + .../authme/datasource/FlatFileThread.java | 42 ++++++++++++++- .../xephi/authme/datasource/MySQLThread.java | 52 ++++++++++++++++++- .../xephi/authme/datasource/SQLiteThread.java | 35 ++++++++++++- 7 files changed, 190 insertions(+), 9 deletions(-) create mode 100644 src/main/java/fr/xephi/authme/converter/SqlToFlat.java diff --git a/src/main/java/fr/xephi/authme/commands/ConverterCommand.java b/src/main/java/fr/xephi/authme/commands/ConverterCommand.java index 5262f0aa6..16ddb976a 100644 --- a/src/main/java/fr/xephi/authme/commands/ConverterCommand.java +++ b/src/main/java/fr/xephi/authme/commands/ConverterCommand.java @@ -13,6 +13,7 @@ import fr.xephi.authme.converter.FlatToSql; import fr.xephi.authme.converter.FlatToSqlite; import fr.xephi.authme.converter.RakamakConverter; import fr.xephi.authme.converter.RoyalAuthConverter; +import fr.xephi.authme.converter.SqlToFlat; import fr.xephi.authme.converter.vAuthConverter; import fr.xephi.authme.converter.xAuthConverter; import fr.xephi.authme.datasource.DataSource; @@ -42,7 +43,7 @@ public class ConverterCommand implements CommandExecutor { } if (args.length == 0) { - sender.sendMessage("Usage : /converter flattosql | flattosqlite | xauth | crazylogin | rakamak | royalauth | vauth"); + sender.sendMessage("Usage : /converter flattosql | flattosqlite | xauth | crazylogin | rakamak | royalauth | vauth | sqltoflat"); return true; } @@ -74,6 +75,9 @@ public class ConverterCommand implements CommandExecutor { case vauth: converter = new vAuthConverter(plugin, database, sender); break; + case sqltoflat: + converter = new SqlToFlat(plugin, database, sender); + break; default: break; } @@ -94,7 +98,8 @@ public class ConverterCommand implements CommandExecutor { crazylogin("crazylogin"), rakamak("rakamak"), royalauth("royalauth"), - vauth("vauth"); + vauth("vauth"), + sqltoflat("sqltoflat"); String name; diff --git a/src/main/java/fr/xephi/authme/converter/FlatToSql.java b/src/main/java/fr/xephi/authme/converter/FlatToSql.java index 2c52ab668..45772f2b2 100644 --- a/src/main/java/fr/xephi/authme/converter/FlatToSql.java +++ b/src/main/java/fr/xephi/authme/converter/FlatToSql.java @@ -54,10 +54,9 @@ public class FlatToSql implements Converter { source = new File(AuthMe.getInstance().getDataFolder() + File.separator + "auths.db"); source.createNewFile(); output = new File(AuthMe.getInstance().getDataFolder() + File.separator + "authme.sql"); - BufferedReader br = null; - BufferedWriter sql = null; - br = new BufferedReader(new FileReader(source)); - sql = new BufferedWriter(new FileWriter(output)); + output.createNewFile(); + BufferedReader br = new BufferedReader(new FileReader(source)); + BufferedWriter sql = new BufferedWriter(new FileWriter(output)); String createDB = "CREATE TABLE IF NOT EXISTS " + tableName + " (" + columnID + " INTEGER AUTO_INCREMENT," + columnName + " VARCHAR(255) NOT NULL UNIQUE," + columnPassword + " VARCHAR(255) NOT NULL," + columnIp + " VARCHAR(40) NOT NULL DEFAULT '127.0.0.1'," + columnLastLogin + " BIGINT NOT NULL DEFAULT '" + System.currentTimeMillis() + "'," + lastlocX + " DOUBLE NOT NULL DEFAULT '0.0'," + lastlocY + " DOUBLE NOT NULL DEFAULT '0.0'," + lastlocZ + " DOUBLE NOT NULL DEFAULT '0.0'," + lastlocWorld + " VARCHAR(255) DEFAULT 'world'," + columnEmail + " VARCHAR(255) DEFAULT 'your@email.com'," + columnLogged + " SMALLINT NOT NULL DEFAULT '0'," + "CONSTRAINT table_const_prim PRIMARY KEY (" + columnID + "));"; sql.write(createDB); String line; diff --git a/src/main/java/fr/xephi/authme/converter/SqlToFlat.java b/src/main/java/fr/xephi/authme/converter/SqlToFlat.java new file mode 100644 index 000000000..674242e7f --- /dev/null +++ b/src/main/java/fr/xephi/authme/converter/SqlToFlat.java @@ -0,0 +1,52 @@ +package fr.xephi.authme.converter; + +import java.util.List; + +import org.bukkit.command.CommandSender; + +import fr.xephi.authme.AuthMe; +import fr.xephi.authme.ConsoleLogger; +import fr.xephi.authme.cache.auth.PlayerAuth; +import fr.xephi.authme.datasource.DataSource; +import fr.xephi.authme.datasource.FlatFileThread; +import fr.xephi.authme.settings.Messages; + +public class SqlToFlat implements Converter { + + public AuthMe plugin; + public DataSource database; + public CommandSender sender; + + public SqlToFlat(AuthMe plugin, DataSource database, CommandSender sender) { + this.plugin = plugin; + this.database = database; + this.sender = sender; + } + + @Override + public void run() { + try { + FlatFileThread flat = new FlatFileThread(); + flat.start(); + List auths = database.getAllAuths(); + int i = 0; + final int size = auths.size(); + for (PlayerAuth auth : auths) { + flat.saveAuth(auth); + i++; + if ((i % 100) == 0) { + sender.sendMessage("Conversion Status : " + i + " / " + size); + } + } + if (flat != null && flat.isAlive()) + flat.interrupt(); + sender.sendMessage("Successfully convert from SQL table to file auths.db"); + return; + } catch (Exception ex) { + ConsoleLogger.showError(ex.getMessage()); + Messages.getInstance()._(sender, "error"); + return; + } + } + +} diff --git a/src/main/java/fr/xephi/authme/datasource/DataSource.java b/src/main/java/fr/xephi/authme/datasource/DataSource.java index 81c65172d..0c893d6a2 100644 --- a/src/main/java/fr/xephi/authme/datasource/DataSource.java +++ b/src/main/java/fr/xephi/authme/datasource/DataSource.java @@ -63,4 +63,6 @@ public interface DataSource { void updateName(String oldone, String newone); + List getAllAuths(); + } diff --git a/src/main/java/fr/xephi/authme/datasource/FlatFileThread.java b/src/main/java/fr/xephi/authme/datasource/FlatFileThread.java index e69576553..2ea78ddf5 100644 --- a/src/main/java/fr/xephi/authme/datasource/FlatFileThread.java +++ b/src/main/java/fr/xephi/authme/datasource/FlatFileThread.java @@ -12,7 +12,6 @@ import java.util.List; import fr.xephi.authme.AuthMe; import fr.xephi.authme.ConsoleLogger; -import fr.xephi.authme.api.API; import fr.xephi.authme.cache.auth.PlayerAuth; import fr.xephi.authme.settings.PlayersLogs; import fr.xephi.authme.settings.Settings; @@ -700,4 +699,45 @@ public class FlatFileThread extends Thread implements DataSource { this.saveAuth(auth); this.removeAuth(oldone); } + + @Override + public List getAllAuths() { + BufferedReader br = null; + List auths = new ArrayList(); + try { + br = new BufferedReader(new FileReader(source)); + String line; + while ((line = br.readLine()) != null) { + String[] args = line.split(":"); + switch (args.length) { + case 2: + auths.add(new PlayerAuth(args[0], args[1], "198.18.0.1", 0, "your@email.com")); + case 3: + auths.add(new PlayerAuth(args[0], args[1], args[2], 0, "your@email.com")); + case 4: + auths.add(new PlayerAuth(args[0], args[1], args[2], Long.parseLong(args[3]), "your@email.com")); + case 7: + auths.add(new PlayerAuth(args[0], args[1], args[2], Long.parseLong(args[3]), Double.parseDouble(args[4]), Double.parseDouble(args[5]), Double.parseDouble(args[6]), "unavailableworld", "your@email.com")); + case 8: + auths.add(new PlayerAuth(args[0], args[1], args[2], Long.parseLong(args[3]), Double.parseDouble(args[4]), Double.parseDouble(args[5]), Double.parseDouble(args[6]), args[7], "your@email.com")); + case 9: + auths.add(new PlayerAuth(args[0], args[1], args[2], Long.parseLong(args[3]), Double.parseDouble(args[4]), Double.parseDouble(args[5]), Double.parseDouble(args[6]), args[7], args[8])); + } + } + } catch (FileNotFoundException ex) { + ConsoleLogger.showError(ex.getMessage()); + return auths; + } catch (IOException ex) { + ConsoleLogger.showError(ex.getMessage()); + return auths; + } finally { + if (br != null) { + try { + br.close(); + } catch (IOException ex) { + } + } + } + return auths; + } } diff --git a/src/main/java/fr/xephi/authme/datasource/MySQLThread.java b/src/main/java/fr/xephi/authme/datasource/MySQLThread.java index e1d6fd398..ffeda7b08 100644 --- a/src/main/java/fr/xephi/authme/datasource/MySQLThread.java +++ b/src/main/java/fr/xephi/authme/datasource/MySQLThread.java @@ -13,7 +13,6 @@ import com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource; import fr.xephi.authme.AuthMe; import fr.xephi.authme.ConsoleLogger; -import fr.xephi.authme.api.API; import fr.xephi.authme.cache.auth.PlayerAuth; import fr.xephi.authme.datasource.MiniConnectionPoolManager.TimeoutException; import fr.xephi.authme.security.HashAlgorithm; @@ -1041,4 +1040,55 @@ public class MySQLThread extends Thread implements DataSource { return; } + @Override + public List getAllAuths() { + List auths = new ArrayList(); + Connection con = null; + PreparedStatement pst = null; + ResultSet rs = null; + try { + con = makeSureConnectionIsReady(); + pst = con.prepareStatement("SELECT * FROM " + tableName + ";"); + rs = pst.executeQuery(); + while (rs.next()) { + PlayerAuth pAuth = null; + int id = rs.getInt(columnID); + if (rs.getString(columnIp).isEmpty() && rs.getString(columnIp) != null) { + pAuth = new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword), "198.18.0.1", rs.getLong(columnLastLogin), rs.getDouble(lastlocX), rs.getDouble(lastlocY), rs.getDouble(lastlocZ), rs.getString(lastlocWorld), rs.getString(columnEmail)); + } else { + if (!columnSalt.isEmpty()) { + if (!columnGroup.isEmpty()) + pAuth = new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword), rs.getString(columnSalt), rs.getInt(columnGroup), rs.getString(columnIp), rs.getLong(columnLastLogin), rs.getDouble(lastlocX), rs.getDouble(lastlocY), rs.getDouble(lastlocZ), rs.getString(lastlocWorld), rs.getString(columnEmail)); + else pAuth = new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword), rs.getString(columnSalt), rs.getString(columnIp), rs.getLong(columnLastLogin), rs.getDouble(lastlocX), rs.getDouble(lastlocY), rs.getDouble(lastlocZ), rs.getString(lastlocWorld), rs.getString(columnEmail)); + } else { + pAuth = new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword), rs.getString(columnIp), rs.getLong(columnLastLogin), rs.getDouble(lastlocX), rs.getDouble(lastlocY), rs.getDouble(lastlocZ), rs.getString(lastlocWorld), rs.getString(columnEmail)); + } + } + if (Settings.getPasswordHash == HashAlgorithm.XENFORO) { + rs.close(); + pst = con.prepareStatement("SELECT * FROM xf_user_authenticate WHERE " + columnID + "=?;"); + pst.setInt(1, id); + rs = pst.executeQuery(); + if (rs.next()) { + Blob blob = rs.getBlob("data"); + byte[] bytes = blob.getBytes(1, (int) blob.length()); + pAuth.setHash(new String(bytes)); + } + } + if (pAuth != null) + auths.add(pAuth); + } + } catch (SQLException ex) { + ConsoleLogger.showError(ex.getMessage()); + return auths; + } catch (TimeoutException ex) { + ConsoleLogger.showError(ex.getMessage()); + return auths; + } finally { + close(pst); + close(con); + } + return auths; + } + } diff --git a/src/main/java/fr/xephi/authme/datasource/SQLiteThread.java b/src/main/java/fr/xephi/authme/datasource/SQLiteThread.java index 98e3bfd0c..3e27282b4 100644 --- a/src/main/java/fr/xephi/authme/datasource/SQLiteThread.java +++ b/src/main/java/fr/xephi/authme/datasource/SQLiteThread.java @@ -11,7 +11,6 @@ import java.util.List; import fr.xephi.authme.AuthMe; import fr.xephi.authme.ConsoleLogger; -import fr.xephi.authme.api.API; import fr.xephi.authme.cache.auth.PlayerAuth; import fr.xephi.authme.datasource.MiniConnectionPoolManager.TimeoutException; import fr.xephi.authme.settings.PlayersLogs; @@ -569,4 +568,38 @@ public class SQLiteThread extends Thread implements DataSource { } return; } + + @Override + public List getAllAuths() { + List auths = new ArrayList(); + PreparedStatement pst = null; + ResultSet rs = null; + try { + pst = con.prepareStatement("SELECT * FROM " + tableName + ";"); + rs = pst.executeQuery(); + while (rs.next()) { + PlayerAuth pAuth = null; + if (rs.getString(columnIp).isEmpty()) { + pAuth = new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword), "127.0.0.1", rs.getLong(columnLastLogin), rs.getDouble(lastlocX), rs.getDouble(lastlocY), rs.getDouble(lastlocZ), rs.getString(lastlocWorld), rs.getString(columnEmail)); + } else { + if (!columnSalt.isEmpty()) { + pAuth = new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword), rs.getString(columnSalt), rs.getInt(columnGroup), rs.getString(columnIp), rs.getLong(columnLastLogin), rs.getDouble(lastlocX), rs.getDouble(lastlocY), rs.getDouble(lastlocZ), rs.getString(lastlocWorld), rs.getString(columnEmail)); + } else { + pAuth = new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword), rs.getString(columnIp), rs.getLong(columnLastLogin), rs.getDouble(lastlocX), rs.getDouble(lastlocY), rs.getDouble(lastlocZ), rs.getString(lastlocWorld), rs.getString(columnEmail)); + } + } + if (pAuth != null) + auths.add(pAuth); + } + } catch (SQLException ex) { + ConsoleLogger.showError(ex.getMessage()); + return auths; + } catch (TimeoutException ex) { + ConsoleLogger.showError(ex.getMessage()); + return auths; + } finally { + close(pst); + } + return auths; + } }