diff --git a/src/main/java/fr/xephi/authme/AuthMe.java b/src/main/java/fr/xephi/authme/AuthMe.java index 010eb4b4..34990d79 100644 --- a/src/main/java/fr/xephi/authme/AuthMe.java +++ b/src/main/java/fr/xephi/authme/AuthMe.java @@ -30,6 +30,7 @@ import org.bukkit.entity.Player; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.java.JavaPlugin; + import com.earth2me.essentials.Essentials; import com.maxmind.geoip.LookupService; import com.onarandombox.MultiverseCore.MultiverseCore; @@ -43,6 +44,7 @@ import fr.xephi.authme.cache.limbo.LimboPlayer; import fr.xephi.authme.commands.AdminCommand; import fr.xephi.authme.commands.CaptchaCommand; import fr.xephi.authme.commands.ChangePasswordCommand; +import fr.xephi.authme.commands.ConverterCommand; import fr.xephi.authme.commands.EmailCommand; import fr.xephi.authme.commands.LoginCommand; import fr.xephi.authme.commands.LogoutCommand; @@ -299,6 +301,7 @@ public class AuthMe extends JavaPlugin { this.getCommand("passpartu").setExecutor(new PasspartuCommand(this)); this.getCommand("email").setExecutor(new EmailCommand(this, database)); this.getCommand("captcha").setExecutor(new CaptchaCommand(this)); + this.getCommand("converter").setExecutor(new ConverterCommand(this, database)); if(!Settings.isForceSingleSessionEnabled) { ConsoleLogger.showError("ATTENTION by disabling ForceSingleSession, your server protection is set to low"); diff --git a/src/main/java/fr/xephi/authme/commands/AdminCommand.java b/src/main/java/fr/xephi/authme/commands/AdminCommand.java index f75667a2..bcdb560d 100644 --- a/src/main/java/fr/xephi/authme/commands/AdminCommand.java +++ b/src/main/java/fr/xephi/authme/commands/AdminCommand.java @@ -301,36 +301,6 @@ public class AdminCommand implements CommandExecutor { m._(sender, "error"); } return true; - } else if (args[0].equalsIgnoreCase("convertflattosql")) { - FlatToSql converter = new FlatToSql(); - try { - Bukkit.getScheduler().runTaskAsynchronously(plugin, converter); - } catch (Exception e) { - sender.sendMessage("[AuthMe] Error while converting to authme.sql"); - } - } else if (args[0].equalsIgnoreCase("flattosqlite")) { - FlatToSqlite converter = new FlatToSqlite(sender); - try { - Bukkit.getScheduler().runTaskAsynchronously(plugin, converter); - } catch (Exception e) { - } - return true; - } else if (args[0].equalsIgnoreCase("xauthimport")) { - Converter converter = new xAuthConverter(plugin, database, sender); - try { - Bukkit.getScheduler().runTaskAsynchronously(plugin, converter); - } catch (Exception e) { - sender.sendMessage("Error while importing xAuth data, check your logs"); - } - return true; - } else if (args[0].equalsIgnoreCase("crazyloginimport")) { - Converter converter = new CrazyLoginConverter(plugin, database, sender); - try { - Bukkit.getScheduler().runTaskAsynchronously(plugin, converter); - } catch (Exception e) { - sender.sendMessage("Error while importing CrazyLogin datas, check your logs"); - } - return true; } else if (args[0].equalsIgnoreCase("getemail")) { if (args.length != 2) { sender.sendMessage("Usage: /authme getemail playername"); @@ -363,14 +333,6 @@ public class AdminCommand implements CommandExecutor { if (PlayerCache.getInstance().getAuth(playername) != null) PlayerCache.getInstance().updatePlayer(getAuth); return true; - } else if (args[0].equalsIgnoreCase("convertfromrakamak")) { - Converter converter = new RakamakConverter(plugin, database, sender); - try { - Bukkit.getScheduler().runTaskAsynchronously(plugin, converter); - } catch (Exception e) { - sender.sendMessage("Error while importing Rakamak data, check your logs"); - } - return true; } else if (args[0].equalsIgnoreCase("setspawn")) { try { if (sender instanceof Player) { @@ -568,14 +530,6 @@ public class AdminCommand implements CommandExecutor { } sender.sendMessage("Usage : /authme switchantibot on/off"); return true; - } else if (args[0].equalsIgnoreCase("royalauth")) { - Converter converter = new RoyalAuthConverter(plugin); - try { - Bukkit.getScheduler().runTaskAsynchronously(plugin, converter); - } catch (Exception e) { - sender.sendMessage("Error while importing RoyalAuth data, check your logs"); - } - return true; } else if (args[0].equalsIgnoreCase("getip")) { if (args.length < 2) { sender.sendMessage("Usage : /authme getip onlinePlayerName"); diff --git a/src/main/java/fr/xephi/authme/commands/ConverterCommand.java b/src/main/java/fr/xephi/authme/commands/ConverterCommand.java new file mode 100644 index 00000000..26b5f26c --- /dev/null +++ b/src/main/java/fr/xephi/authme/commands/ConverterCommand.java @@ -0,0 +1,112 @@ +package fr.xephi.authme.commands; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import fr.xephi.authme.AuthMe; +import fr.xephi.authme.converter.Converter; +import fr.xephi.authme.converter.CrazyLoginConverter; +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.vAuthConverter; +import fr.xephi.authme.converter.xAuthConverter; +import fr.xephi.authme.datasource.DataSource; +import fr.xephi.authme.settings.Messages; + + +public class ConverterCommand implements CommandExecutor { + + private AuthMe plugin; + private Messages m = Messages.getInstance(); + private DataSource database; + + public ConverterCommand(AuthMe plugin, DataSource database) { + this.plugin = plugin; + this.database = database; + } + + @Override + public boolean onCommand(CommandSender sender, Command cmnd, String label, final String[] args) { + if (!(sender instanceof Player)) { + return true; + } + + if (!plugin.authmePermissible(sender, "authme.admin.converter")) { + m._(sender, "no_perm"); + return true; + } + + if (args.length == 0) { + sender.sendMessage("Usage : /converter flattosql | flattosqlite | xauth | crazylogin | rakamak | royalauth | vauth"); + return true; + } + + ConvertType type = ConvertType.valueOf(args[0]); + if (type == null) { + m._(sender, "error"); + return true; + } + Converter converter = null; + switch (type) { + case ftsql: + converter = new FlatToSql(); + break; + case ftsqlite: + converter = new FlatToSqlite(sender); + break; + case xauth: + converter = new xAuthConverter(plugin, database, sender); + break; + case crazylogin: + converter = new CrazyLoginConverter(plugin, database, sender); + break; + case rakamak: + converter = new RakamakConverter(plugin, database, sender); + break; + case royalauth: + converter = new RoyalAuthConverter(plugin); + break; + case vauth: + converter = new vAuthConverter(plugin, database, sender); + break; + default: break; + } + if (converter == null) { + m._(sender, "error"); + return true; + } + Bukkit.getScheduler().runTaskAsynchronously(plugin, converter); + sender.sendMessage("[AuthMe] Successfully converted from " + args[0]); + return true; + } + + public enum ConvertType { + + ftsql("flattosql"), + ftsqlite("flattosqlite"), + xauth("xauth"), + crazylogin("crazylogin"), + rakamak("rakamak"), + royalauth("royalauth"), + vauth("vauth"); + + String name; + + ConvertType(String name) { + this.name = name; + } + + String getName() { + return this.name; + } + + ConvertType fromName(String name) { + return ConvertType.valueOf(name); + } + } +} diff --git a/src/main/java/fr/xephi/authme/converter/FlatToSql.java b/src/main/java/fr/xephi/authme/converter/FlatToSql.java index aa255e09..13aa8e3a 100644 --- a/src/main/java/fr/xephi/authme/converter/FlatToSql.java +++ b/src/main/java/fr/xephi/authme/converter/FlatToSql.java @@ -60,18 +60,18 @@ public class FlatToSql implements Converter { br = new BufferedReader(new FileReader(source)); 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 DEFAULT '0'," - + 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 + "));"; + + 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; String newline; diff --git a/src/main/java/fr/xephi/authme/converter/vAuthConverter.java b/src/main/java/fr/xephi/authme/converter/vAuthConverter.java new file mode 100644 index 00000000..df30fbd4 --- /dev/null +++ b/src/main/java/fr/xephi/authme/converter/vAuthConverter.java @@ -0,0 +1,31 @@ +package fr.xephi.authme.converter; + +import org.bukkit.command.CommandSender; + +import fr.xephi.authme.AuthMe; +import fr.xephi.authme.ConsoleLogger; +import fr.xephi.authme.datasource.DataSource; + +public class vAuthConverter implements Converter { + + public AuthMe plugin; + public DataSource database; + public CommandSender sender; + + public vAuthConverter(AuthMe plugin, DataSource database, CommandSender sender) { + this.plugin = plugin; + this.database = database; + this.sender = sender; + } + + @Override + public void run() { + try { + new vAuthFileReader(plugin, database, sender).convert(); + } catch (Exception e) { + sender.sendMessage(e.getMessage()); + ConsoleLogger.showError(e.getMessage()); + } + } + +} diff --git a/src/main/java/fr/xephi/authme/converter/vAuthFileReader.java b/src/main/java/fr/xephi/authme/converter/vAuthFileReader.java new file mode 100644 index 00000000..a54ed43b --- /dev/null +++ b/src/main/java/fr/xephi/authme/converter/vAuthFileReader.java @@ -0,0 +1,75 @@ +package fr.xephi.authme.converter; + +import java.io.File; +import java.io.IOException; +import java.util.Scanner; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.command.CommandSender; + +import fr.xephi.authme.AuthMe; +import fr.xephi.authme.api.API; +import fr.xephi.authme.cache.auth.PlayerAuth; +import fr.xephi.authme.datasource.DataSource; + +public class vAuthFileReader { + + public AuthMe plugin; + public DataSource database; + public CommandSender sender; + + public vAuthFileReader(AuthMe plugin, DataSource database, CommandSender sender) { + this.plugin = plugin; + this.database = database; + this.sender = sender; + } + + public void convert() throws IOException { + final File file = new File(plugin.getDataFolder().getParent() + "/vAuth/passwords.yml"); + Scanner scanner = null; + try { + scanner = new Scanner(file); + while(scanner.hasNextLine()) { + String line = scanner.nextLine(); + String name = line.split(": ")[0]; + String password = line.split(": ")[1]; + PlayerAuth auth = null; + if (isUUIDinstance(password)) { + String pname = null; + try { + pname = Bukkit.getOfflinePlayer(UUID.fromString(name)).getName(); + } catch (Exception e) { + pname = getName(UUID.fromString(name)); + } catch (NoSuchMethodError e) { + pname = getName(UUID.fromString(name)); + } + if (pname == null) continue; + auth = new PlayerAuth(pname.toLowerCase(), password, "127.0.0.1", System.currentTimeMillis(), "your@email.com", pname); + } else { + auth = new PlayerAuth(name, password, "127.0.0.1", System.currentTimeMillis(), "your@email.com", API.getPlayerRealName(name)); + } + if (auth != null) database.saveAuth(auth); + } + } catch (Exception e) { + } + + } + + private boolean isUUIDinstance(String s) { + if (String.valueOf(s.charAt(8)).equalsIgnoreCase("-")) return true; + return true; + } + + private String getName(UUID uuid) { + try { + for (OfflinePlayer op : Bukkit.getOfflinePlayers()) { + if (op.getUniqueId().compareTo(uuid) == 0) return op.getName(); + } + } catch (Exception e) { + } + return null; + } + +} diff --git a/src/main/java/fr/xephi/authme/datasource/MySQLDataSource.java b/src/main/java/fr/xephi/authme/datasource/MySQLDataSource.java index 6b64618c..e51eeefa 100644 --- a/src/main/java/fr/xephi/authme/datasource/MySQLDataSource.java +++ b/src/main/java/fr/xephi/authme/datasource/MySQLDataSource.java @@ -95,7 +95,7 @@ public class MySQLDataSource implements DataSource { + columnName + " VARCHAR(255) NOT NULL UNIQUE," + columnPassword + " VARCHAR(255) NOT NULL," + columnIp + " VARCHAR(40) NOT NULL DEFAULT '127.0.0.1'," - + columnLastLogin + " BIGINT DEFAULT '0'," + + 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'," diff --git a/src/main/java/fr/xephi/authme/threads/MySQLThread.java b/src/main/java/fr/xephi/authme/threads/MySQLThread.java index 6d23f472..14c6d736 100644 --- a/src/main/java/fr/xephi/authme/threads/MySQLThread.java +++ b/src/main/java/fr/xephi/authme/threads/MySQLThread.java @@ -124,7 +124,7 @@ public class MySQLThread extends Thread implements DataSource { + columnName + " VARCHAR(255) NOT NULL UNIQUE," + columnPassword + " VARCHAR(255) NOT NULL," + columnIp + " VARCHAR(40) NOT NULL DEFAULT '127.0.0.1'," - + columnLastLogin + " BIGINT DEFAULT '0'," + + 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'," diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 958d436a..a8975c78 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -35,6 +35,9 @@ commands: captcha: description: Captcha usage: /captcha theCaptcha + converter: + description: Converter from different other auth plugins + usage: /converter permissions: authme.player.*: description: Gives access to all authme player commands @@ -64,6 +67,7 @@ permissions: authme.admin.switchantibot: true authme.bypassantibot: true authme.admin.getip: true + authme.admin.converter: true authme.register: description: Register an account default: true @@ -106,12 +110,6 @@ permissions: authme.admin.purge: description: AuthMe unregister command default: op - authme.admin.convertflattosql: - description: Convert File to Sql method - default: op - authme.admin.convertfromrakamak: - description: Convert from Rakamak database to AuthMe - default: op authme.admin.lastlogin: description: Get last login date about a player default: op @@ -124,9 +122,6 @@ permissions: authme.admin.accounts: description: Display Players Accounts default: op - authme.admin.xauthimport: - description: Import xAuth Database to AuthMe Database - default: op authme.captcha: description: Captcha default: true @@ -142,9 +137,6 @@ permissions: authme.admin.purgebannedplayers: description: Purge banned players default: op - authme.admin.flattosqlite: - description: Convert File to Sqlite method - default: op authme.bypassforcesurvival: description: Bypass all ForceSurvival features default: false @@ -157,9 +149,6 @@ permissions: authme.bypassantibot: description: Bypass the AntiBot check default: op - authme.admin.royalauth: - description: Import RoyalAuth database into AuthMe - default: op authme.admin.setfirstspawn: description: Set the AuthMe First Spawn Point default: op @@ -169,6 +158,6 @@ permissions: authme.admin.getip: description: Get IP from a player ( fake and real ) default: op - authme.admin.crazyloginimport: - description: Import CrazyLogin database into AuthMe database + authme.admin.converter: + description: Allow /converter command default: op \ No newline at end of file