From 375162ab67cdcb1d20a363759afce180ad909885 Mon Sep 17 00:00:00 2001 From: DNx5 Date: Tue, 3 Nov 2015 14:41:05 +0700 Subject: [PATCH] update email commands to use new async process --- .../executable/email/AddEmailCommand.java | 58 ++---------- .../executable/email/ChangeEmailCommand.java | 54 +---------- .../xephi/authme/commands/EmailCommand.java | 91 ++----------------- .../authme/datasource/CacheDataSource.java | 27 ++---- .../fr/xephi/authme/datasource/MySQL.java | 1 + .../process/email/AsyncChangeEmail.java | 12 ++- 6 files changed, 37 insertions(+), 206 deletions(-) diff --git a/src/main/java/fr/xephi/authme/command/executable/email/AddEmailCommand.java b/src/main/java/fr/xephi/authme/command/executable/email/AddEmailCommand.java index f91e6a24..d73e4397 100644 --- a/src/main/java/fr/xephi/authme/command/executable/email/AddEmailCommand.java +++ b/src/main/java/fr/xephi/authme/command/executable/email/AddEmailCommand.java @@ -1,25 +1,20 @@ package fr.xephi.authme.command.executable.email; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - import fr.xephi.authme.AuthMe; -import fr.xephi.authme.cache.auth.PlayerAuth; -import fr.xephi.authme.cache.auth.PlayerCache; import fr.xephi.authme.command.CommandParts; import fr.xephi.authme.command.ExecutableCommand; import fr.xephi.authme.settings.Messages; -import fr.xephi.authme.settings.Settings; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; public class AddEmailCommand extends ExecutableCommand { /** * Execute the command. * - * @param sender The command sender. + * @param sender The command sender. * @param commandReference The command reference. * @param commandArguments The command arguments. - * * @return True if the command was executed successfully, false otherwise. */ @Override @@ -35,57 +30,16 @@ public class AddEmailCommand extends ExecutableCommand { String playerMailVerify = commandArguments.get(1); // Make sure the current command executor is a player - if(!(sender instanceof Player)) { + if (!(sender instanceof Player)) { return true; } // Get the player instance and name final Player player = (Player) sender; - final String playerName = player.getName(); + final String playerName = player.getName().toLowerCase(); // Command logic - if (Settings.getmaxRegPerEmail > 0) { - if (!plugin.authmePermissible(sender, "authme.allow2accounts") && plugin.database.getAllAuthsByEmail(playerMail).size() >= Settings.getmaxRegPerEmail) { - m.send(player, "max_reg"); - return true; - } - } - - if (playerMail.equals(playerMailVerify) && PlayerCache.getInstance().isAuthenticated(playerName)) { - PlayerAuth auth = PlayerCache.getInstance().getAuth(playerName); - - if (auth.getEmail() == null || (!auth.getEmail().equals("your@email.com") && !auth.getEmail().isEmpty())) { - m.send(player, "usage_email_change"); - return true; - } - - if (!Settings.isEmailCorrect(playerMail)) { - m.send(player, "email_invalid"); - return true; - } - - auth.setEmail(playerMail); - - if (!plugin.database.updateEmail(auth)) { - m.send(player, "error"); - return true; - } - - PlayerCache.getInstance().updatePlayer(auth); - m.send(player, "email_added"); - player.sendMessage(auth.getEmail()); - - } else if (PlayerCache.getInstance().isAuthenticated(playerName)) { - m.send(player, "email_confirm"); - - } else { - if (!plugin.database.isAuthAvailable(playerName)) { - m.send(player, "login_msg"); - } else { - m.send(player, "reg_email_msg"); - } - } - + plugin.management.performAddEmail(player, playerMail, playerMailVerify); return true; } } diff --git a/src/main/java/fr/xephi/authme/command/executable/email/ChangeEmailCommand.java b/src/main/java/fr/xephi/authme/command/executable/email/ChangeEmailCommand.java index 0b5d7e3c..fe6a4be2 100644 --- a/src/main/java/fr/xephi/authme/command/executable/email/ChangeEmailCommand.java +++ b/src/main/java/fr/xephi/authme/command/executable/email/ChangeEmailCommand.java @@ -1,18 +1,12 @@ package fr.xephi.authme.command.executable.email; import fr.xephi.authme.AuthMe; -import fr.xephi.authme.ConsoleLogger; -import fr.xephi.authme.cache.auth.PlayerAuth; -import fr.xephi.authme.cache.auth.PlayerCache; import fr.xephi.authme.command.CommandParts; import fr.xephi.authme.command.ExecutableCommand; import fr.xephi.authme.settings.Messages; -import fr.xephi.authme.settings.Settings; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import java.util.Arrays; - public class ChangeEmailCommand extends ExecutableCommand { /** @@ -45,51 +39,7 @@ public class ChangeEmailCommand extends ExecutableCommand { final String playerName = player.getName(); // Command logic - - try { - if (Settings.getmaxRegPerEmail > 0) { - if (!plugin.authmePermissible(sender, "authme.allow2accounts") && plugin.database.getAllAuthsByEmail(playerMailNew).size() >= Settings.getmaxRegPerEmail) { - m.send(player, "max_reg"); - return true; - } - } - if (PlayerCache.getInstance().isAuthenticated(playerName)) { - PlayerAuth auth = PlayerCache.getInstance().getAuth(playerName); - if (auth.getEmail() == null || auth.getEmail().equals("your@email.com") || auth.getEmail().isEmpty()) { - m.send(player, "usage_email_add"); - return true; - } - if (!playerMailOld.equals(auth.getEmail())) { - m.send(player, "old_email_invalid"); - return true; - } - if (!Settings.isEmailCorrect(playerMailNew)) { - m.send(player, "new_email_invalid"); - return true; - } - auth.setEmail(playerMailNew); - if (!plugin.database.updateEmail(auth)) { - m.send(player, "error"); - return true; - } - PlayerCache.getInstance().updatePlayer(auth); - m.send(player, "email_changed"); - player.sendMessage(Arrays.toString(m.send("email_defined")) + auth.getEmail()); - } else if (PlayerCache.getInstance().isAuthenticated(playerName)) { - m.send(player, "email_confirm"); - } else { - if (!plugin.database.isAuthAvailable(playerName)) { - m.send(player, "login_msg"); - } else { - m.send(player, "reg_email_msg"); - } - } - return true; - } catch (Exception e) { - ConsoleLogger.showError(e.getMessage()); - ConsoleLogger.writeStackTrace(e); - m.send(sender, "error"); - return false; - } + plugin.management.performChangeEmail(player, playerMailOld, playerMailNew); + return true; } } diff --git a/src/main/java/fr/xephi/authme/commands/EmailCommand.java b/src/main/java/fr/xephi/authme/commands/EmailCommand.java index 241d543d..c59bcbc3 100644 --- a/src/main/java/fr/xephi/authme/commands/EmailCommand.java +++ b/src/main/java/fr/xephi/authme/commands/EmailCommand.java @@ -1,13 +1,5 @@ package fr.xephi.authme.commands; -import java.security.NoSuchAlgorithmException; -import java.util.Arrays; - -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.ConsoleLogger; import fr.xephi.authme.cache.auth.PlayerAuth; @@ -16,9 +8,14 @@ import fr.xephi.authme.security.PasswordSecurity; import fr.xephi.authme.security.RandomString; import fr.xephi.authme.settings.Messages; import fr.xephi.authme.settings.Settings; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.security.NoSuchAlgorithmException; /** - * * @author Xephi59 */ public class EmailCommand implements CommandExecutor { @@ -32,7 +29,7 @@ public class EmailCommand implements CommandExecutor { @Override public boolean onCommand(CommandSender sender, Command cmnd, String label, - String[] args) { + String[] args) { if (!(sender instanceof Player)) { return true; } @@ -57,81 +54,13 @@ public class EmailCommand implements CommandExecutor { m.send(player, "usage_email_add"); return true; } - if (Settings.getmaxRegPerEmail > 0) { - if (!plugin.authmePermissible(sender, "authme.allow2accounts") && plugin.database.getAllAuthsByEmail(args[1]).size() >= Settings.getmaxRegPerEmail) { - m.send(player, "max_reg"); - return true; - } - } - if (args[1].equals(args[2]) && PlayerCache.getInstance().isAuthenticated(name)) { - PlayerAuth auth = PlayerCache.getInstance().getAuth(name); - if (auth.getEmail() == null || (!auth.getEmail().equals("your@email.com") && !auth.getEmail().isEmpty())) { - m.send(player, "usage_email_change"); - return true; - } - if (!Settings.isEmailCorrect(args[1])) { - m.send(player, "email_invalid"); - return true; - } - auth.setEmail(args[1]); - if (!plugin.database.updateEmail(auth)) { - m.send(player, "error"); - return true; - } - PlayerCache.getInstance().updatePlayer(auth); - m.send(player, "email_added"); - player.sendMessage(auth.getEmail()); - } else if (PlayerCache.getInstance().isAuthenticated(name)) { - m.send(player, "email_confirm"); - } else { - if (!plugin.database.isAuthAvailable(name)) { - m.send(player, "login_msg"); - } else { - m.send(player, "reg_email_msg"); - } - } + plugin.management.performAddEmail(player, args[1], args[2]); } else if (args[0].equalsIgnoreCase("change")) { if (args.length != 3) { m.send(player, "usage_email_change"); return true; } - if (Settings.getmaxRegPerEmail > 0) { - if (!plugin.authmePermissible(sender, "authme.allow2accounts") && plugin.database.getAllAuthsByEmail(args[2]).size() >= Settings.getmaxRegPerEmail) { - m.send(player, "max_reg"); - return true; - } - } - if (PlayerCache.getInstance().isAuthenticated(name)) { - PlayerAuth auth = PlayerCache.getInstance().getAuth(name); - if (auth.getEmail() == null || auth.getEmail().equals("your@email.com") || auth.getEmail().isEmpty()) { - m.send(player, "usage_email_add"); - return true; - } - if (!args[1].equals(auth.getEmail())) { - m.send(player, "old_email_invalid"); - return true; - } - if (!Settings.isEmailCorrect(args[2])) { - m.send(player, "new_email_invalid"); - return true; - } - auth.setEmail(args[2]); - if (!plugin.database.updateEmail(auth)) { - m.send(player, "error"); - return true; - } - PlayerCache.getInstance().updatePlayer(auth); - m.send(player, "email_changed"); - player.sendMessage(Arrays.toString(m.send("email_defined")) + auth.getEmail()); - } else if (PlayerCache.getInstance().isAuthenticated(name)) { - m.send(player, "email_confirm"); - } else { - if (!plugin.database.isAuthAvailable(name)) { - m.send(player, "login_msg"); - } else { - m.send(player, "reg_email_msg"); - } - } + plugin.management.performChangeEmail(player, args[1], args[2]); } if (args[0].equalsIgnoreCase("recovery")) { if (args.length != 2) { @@ -151,7 +80,7 @@ public class EmailCommand implements CommandExecutor { RandomString rand = new RandomString(Settings.getRecoveryPassLength); String thePass = rand.nextString(); String hashnew = PasswordSecurity.getHash(Settings.getPasswordHash, thePass, name); - PlayerAuth auth = null; + PlayerAuth auth; if (PlayerCache.getInstance().isAuthenticated(name)) { auth = PlayerCache.getInstance().getAuth(name); } else if (plugin.database.isAuthAvailable(name)) { diff --git a/src/main/java/fr/xephi/authme/datasource/CacheDataSource.java b/src/main/java/fr/xephi/authme/datasource/CacheDataSource.java index 40ed684c..dc2ec02c 100644 --- a/src/main/java/fr/xephi/authme/datasource/CacheDataSource.java +++ b/src/main/java/fr/xephi/authme/datasource/CacheDataSource.java @@ -9,10 +9,7 @@ import org.bukkit.entity.Player; import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.concurrent.Callable; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; +import java.util.concurrent.*; public class CacheDataSource implements DataSource { @@ -229,23 +226,15 @@ public class CacheDataSource implements DataSource { @Override public synchronized boolean updateEmail(final PlayerAuth auth) { - if (!cache.containsKey(auth.getNickname())) { + try { + return exec.submit(new Callable() { + public Boolean call() { + return source.updateEmail(auth); + } + }).get(); + } catch (Exception e) { return false; } - PlayerAuth cachedAuth = cache.get(auth.getNickname()); - final String oldEmail = cachedAuth.getEmail(); - cachedAuth.setEmail(auth.getEmail()); - exec.execute(new Runnable() { - @Override - public void run() { - if (!source.updateEmail(auth)) { - if (cache.containsKey(auth.getNickname())) { - cache.get(auth.getNickname()).setEmail(oldEmail); - } - } - } - }); - return true; } @Override diff --git a/src/main/java/fr/xephi/authme/datasource/MySQL.java b/src/main/java/fr/xephi/authme/datasource/MySQL.java index e0479468..f20d99ef 100644 --- a/src/main/java/fr/xephi/authme/datasource/MySQL.java +++ b/src/main/java/fr/xephi/authme/datasource/MySQL.java @@ -692,6 +692,7 @@ public class MySQL implements DataSource { pst.executeUpdate(); } catch (Exception ex) { ConsoleLogger.showError(ex.getMessage()); + ConsoleLogger.writeStackTrace(ex); return false; } finally { close(pst); diff --git a/src/main/java/fr/xephi/authme/process/email/AsyncChangeEmail.java b/src/main/java/fr/xephi/authme/process/email/AsyncChangeEmail.java index 8735aedf..93f6f22a 100644 --- a/src/main/java/fr/xephi/authme/process/email/AsyncChangeEmail.java +++ b/src/main/java/fr/xephi/authme/process/email/AsyncChangeEmail.java @@ -71,13 +71,21 @@ public class AsyncChangeEmail { return; } PlayerCache.getInstance().updatePlayer(auth); + if (oldEmail == null) { + m.send(player, "email_added"); + player.sendMessage(auth.getEmail()); + return; + } m.send(player, "email_changed"); player.sendMessage(Arrays.toString(m.send("email_defined")) + auth.getEmail()); } else { - if (!plugin.database.isAuthAvailable(playerName)) { + if (plugin.database.isAuthAvailable(playerName)) { m.send(player, "login_msg"); } else { - m.send(player, "reg_email_msg"); + if (Settings.emailRegistration) + m.send(player, "reg_email_msg"); + else + m.send(player, "reg_msg"); } } } catch (Exception e) {