Revise converter architecture + add integration test for CrazyLogin converter

This commit is contained in:
ljacqu
2016-05-27 23:00:44 +02:00
parent 67511e3b45
commit 87331d116c
13 changed files with 217 additions and 102 deletions
@@ -1,7 +1,16 @@
package fr.xephi.authme.converter;
import org.bukkit.command.CommandSender;
/**
* Common supertype for AuthMe converters.
* Interface for AuthMe converters.
*/
public interface Converter extends Runnable {
public interface Converter {
/**
* Execute the conversion.
*
* @param sender the sender who initialized the conversion
*/
void execute(CommandSender sender);
}
@@ -1,47 +1,46 @@
package fr.xephi.authme.converter;
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.settings.Settings;
import fr.xephi.authme.initialization.DataFolder;
import fr.xephi.authme.settings.NewSetting;
import fr.xephi.authme.settings.properties.ConverterSettings;
import org.bukkit.command.CommandSender;
import javax.inject.Inject;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
/**
* @author Xephi59
* Converter for CrazyLogin to AuthMe.
*/
public class CrazyLoginConverter implements Converter {
private final DataSource database;
private final CommandSender sender;
private final NewSetting settings;
private final File dataFolder;
/**
* Constructor for CrazyLoginConverter.
*
* @param instance AuthMe
* @param sender CommandSender
*/
public CrazyLoginConverter(AuthMe instance, CommandSender sender) {
this.database = instance.getDataSource();
this.sender = sender;
@Inject
CrazyLoginConverter(@DataFolder File dataFolder, DataSource dataSource, NewSetting settings) {
this.dataFolder = dataFolder;
this.database = dataSource;
this.settings = settings;
}
@Override
public void run() {
String fileName = Settings.crazyloginFileName;
try {
File source = new File(AuthMe.getInstance().getDataFolder() + File.separator + fileName);
if (!source.exists()) {
sender.sendMessage("Error while trying to import data, please put " + fileName + " in AuthMe folder!");
return;
}
String line;
BufferedReader users = new BufferedReader(new FileReader(source));
public void execute(CommandSender sender) {
String fileName = settings.getProperty(ConverterSettings.CRAZYLOGIN_FILE_NAME);
File source = new File(dataFolder, fileName);
if (!source.exists()) {
sender.sendMessage("CrazyLogin file not found, please put " + fileName + " in AuthMe folder!");
return;
}
String line;
try (BufferedReader users = new BufferedReader(new FileReader(source))) {
while ((line = users.readLine()) != null) {
if (line.contains("|")) {
String[] args = line.split("\\|");
@@ -49,22 +48,21 @@ public class CrazyLoginConverter implements Converter {
continue;
}
String playerName = args[0];
String psw = args[1];
if (psw != null) {
String password = args[1];
if (password != null) {
PlayerAuth auth = PlayerAuth.builder()
.name(playerName.toLowerCase())
.realName(playerName)
.password(psw, null)
.password(password, null)
.build();
database.saveAuth(auth);
}
}
}
users.close();
ConsoleLogger.info("CrazyLogin database has been imported correctly");
} catch (IOException ex) {
ConsoleLogger.showError(ex.getMessage());
ConsoleLogger.showError("Can't open the crazylogin database file! Does it exist?");
ConsoleLogger.logException("Encountered", ex);
}
}
@@ -5,6 +5,7 @@ import fr.xephi.authme.cache.auth.PlayerAuth;
import fr.xephi.authme.datasource.DataSource;
import fr.xephi.authme.datasource.FlatFile;
import fr.xephi.authme.util.StringUtils;
import org.bukkit.command.CommandSender;
import java.util.ArrayList;
import java.util.List;
@@ -32,7 +33,8 @@ public class ForceFlatToSqlite implements Converter {
* Perform the conversion.
*/
@Override
public void run() {
// Note ljacqu 20160527: CommandSender is null here; it is only present because of the interface it implements
public void execute(CommandSender sender) {
List<String> skippedPlayers = new ArrayList<>();
for (PlayerAuth auth : source.getAllAuths()) {
if (destination.isAuthAvailable(auth.getNickname())) {
@@ -4,11 +4,14 @@ 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.initialization.DataFolder;
import fr.xephi.authme.security.PasswordSecurity;
import fr.xephi.authme.security.crypts.HashedPassword;
import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.NewSetting;
import fr.xephi.authme.settings.properties.ConverterSettings;
import org.bukkit.command.CommandSender;
import javax.inject.Inject;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
@@ -23,22 +26,23 @@ public class RakamakConverter implements Converter {
private final AuthMe instance;
private final DataSource database;
private final CommandSender sender;
private final NewSetting settings;
private final File pluginFolder;
public RakamakConverter(AuthMe instance, CommandSender sender) {
@Inject
RakamakConverter(@DataFolder File dataFolder, AuthMe instance, DataSource dataSource, NewSetting settings) {
this.instance = instance;
this.database = instance.getDataSource();
this.sender = sender;
pluginFolder = instance.getDataFolder();
this.database = dataSource;
this.settings = settings;
this.pluginFolder = dataFolder;
}
@Override
// TODO ljacqu 20151229: Restructure this into smaller portions
public void run() {
boolean useIP = Settings.rakamakUseIp;
String fileName = Settings.rakamakUsers;
String ipFileName = Settings.rakamakUsersIp;
public void execute(CommandSender sender) {
boolean useIP = settings.getProperty(ConverterSettings.RAKAMAK_USE_IP);
String fileName = settings.getProperty(ConverterSettings.RAKAMAK_FILE_NAME);
String ipFileName = settings.getProperty(ConverterSettings.RAKAMAK_IP_FILE_NAME);
File source = new File(pluginFolder, fileName);
File ipfiles = new File(pluginFolder, ipFileName);
HashMap<String, String> playerIP = new HashMap<>();
@@ -5,9 +5,11 @@ import fr.xephi.authme.ConsoleLogger;
import fr.xephi.authme.cache.auth.PlayerAuth;
import fr.xephi.authme.datasource.DataSource;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import javax.inject.Inject;
import java.io.File;
import static fr.xephi.authme.util.StringUtils.makePath;
@@ -19,13 +21,14 @@ public class RoyalAuthConverter implements Converter {
private final AuthMe plugin;
private final DataSource dataSource;
public RoyalAuthConverter(AuthMe plugin) {
@Inject
RoyalAuthConverter(AuthMe plugin, DataSource dataSource) {
this.plugin = plugin;
this.dataSource = plugin.getDataSource();
this.dataSource = dataSource;
}
@Override
public void run() {
public void execute(CommandSender sender) {
for (OfflinePlayer player : plugin.getServer().getOfflinePlayers()) {
try {
String name = player.getName().toLowerCase();
@@ -1,40 +1,43 @@
package fr.xephi.authme.converter;
import fr.xephi.authme.settings.NewSetting;
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.DataSourceType;
import fr.xephi.authme.datasource.SQLite;
import fr.xephi.authme.output.MessageKey;
import fr.xephi.authme.output.Messages;
import fr.xephi.authme.settings.NewSetting;
import org.bukkit.command.CommandSender;
import javax.inject.Inject;
public class SqliteToSql implements Converter {
private final AuthMe plugin;
private final CommandSender sender;
private final NewSetting settings;
private final DataSource dataSource;
private final Messages messages;
public SqliteToSql(AuthMe plugin, CommandSender sender, NewSetting settings) {
this.plugin = plugin;
this.sender = sender;
@Inject
SqliteToSql(NewSetting settings, DataSource dataSource, Messages messages) {
this.settings = settings;
this.dataSource = dataSource;
this.messages = messages;
}
@Override
public void run() {
if (plugin.getDataSource().getType() != DataSourceType.MYSQL) {
public void execute(CommandSender sender) {
if (dataSource.getType() != DataSourceType.MYSQL) {
sender.sendMessage("Please configure your mySQL connection and re-run this command");
return;
}
try {
SQLite data = new SQLite(settings);
for (PlayerAuth auth : data.getAllAuths()) {
plugin.getDataSource().saveAuth(auth);
dataSource.saveAuth(auth);
}
} catch (Exception e) {
plugin.getMessages().send(sender, MessageKey.ERROR);
messages.send(sender, MessageKey.ERROR);
ConsoleLogger.logException("Problem during SQLite to SQL conversion:", e);
}
}
@@ -4,18 +4,19 @@ import fr.xephi.authme.AuthMe;
import fr.xephi.authme.ConsoleLogger;
import org.bukkit.command.CommandSender;
import javax.inject.Inject;
public class vAuthConverter implements Converter {
private final AuthMe plugin;
private final CommandSender sender;
public vAuthConverter(AuthMe plugin, CommandSender sender) {
@Inject
vAuthConverter(AuthMe plugin) {
this.plugin = plugin;
this.sender = sender;
}
@Override
public void run() {
public void execute(CommandSender sender) {
try {
new vAuthFileReader(plugin).convert();
} catch (Exception e) {
@@ -3,18 +3,19 @@ package fr.xephi.authme.converter;
import fr.xephi.authme.AuthMe;
import org.bukkit.command.CommandSender;
import javax.inject.Inject;
public class xAuthConverter implements Converter {
private final AuthMe plugin;
private final CommandSender sender;
public xAuthConverter(AuthMe plugin, CommandSender sender) {
@Inject
xAuthConverter(AuthMe plugin) {
this.plugin = plugin;
this.sender = sender;
}
@Override
public void run() {
public void execute(CommandSender sender) {
try {
Class.forName("de.luricos.bukkit.xAuth.xAuth");
xAuthToFlat converter = new xAuthToFlat(plugin, sender);