From c8b191fda0b123549bcf4fe9752d74cdbc5802b6 Mon Sep 17 00:00:00 2001 From: games647 Date: Sat, 30 Apr 2016 13:05:31 +0200 Subject: [PATCH 1/5] Add warning if hideTablist is not compatible with the mc version (Fixes #680) --- .../authme/listener/AuthMeTablistPacketAdapter.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/fr/xephi/authme/listener/AuthMeTablistPacketAdapter.java b/src/main/java/fr/xephi/authme/listener/AuthMeTablistPacketAdapter.java index a23ce5c1..6d4ea8ba 100644 --- a/src/main/java/fr/xephi/authme/listener/AuthMeTablistPacketAdapter.java +++ b/src/main/java/fr/xephi/authme/listener/AuthMeTablistPacketAdapter.java @@ -8,15 +8,18 @@ import com.comphenix.protocol.events.PacketAdapter; import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketEvent; import com.comphenix.protocol.reflect.FieldAccessException; +import com.comphenix.protocol.utility.MinecraftVersion; import com.comphenix.protocol.wrappers.EnumWrappers.NativeGameMode; import com.comphenix.protocol.wrappers.EnumWrappers.PlayerInfoAction; import com.comphenix.protocol.wrappers.PlayerInfoData; import com.comphenix.protocol.wrappers.WrappedChatComponent; import com.comphenix.protocol.wrappers.WrappedGameProfile; + import fr.xephi.authme.AuthMe; import fr.xephi.authme.ConsoleLogger; import fr.xephi.authme.cache.auth.PlayerCache; import fr.xephi.authme.util.BukkitService; + import org.bukkit.entity.Player; import java.lang.reflect.InvocationTargetException; @@ -80,7 +83,12 @@ public class AuthMeTablistPacketAdapter extends PacketAdapter { } public void register() { - ProtocolLibrary.getProtocolManager().addPacketListener(this); + if (MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.BOUNTIFUL_UPDATE)) { + ProtocolLibrary.getProtocolManager().addPacketListener(this); + } else { + ConsoleLogger.info("The hideTablist feature is not compatible with your minecraft version"); + ConsoleLogger.info("It requires 1.8+. Disabling the hideTablist feature..."); + } } public void unregister() { From 1f0f3f1bea02042d45b39b21565cebd3aec9e524 Mon Sep 17 00:00:00 2001 From: ljacqu Date: Sat, 30 Apr 2016 14:11:19 +0200 Subject: [PATCH 2/5] #675 Clean up country protection code - Move validation to validation service --- src/main/java/fr/xephi/authme/AuthMe.java | 11 ++-- .../authme/listener/AuthMePlayerListener.java | 32 ++++----- .../authme/listener/AuthMeServerListener.java | 22 ++++--- .../xephi/authme/util/ValidationService.java | 66 ++++++++++++++++--- 4 files changed, 91 insertions(+), 40 deletions(-) diff --git a/src/main/java/fr/xephi/authme/AuthMe.java b/src/main/java/fr/xephi/authme/AuthMe.java index 08a1945c..6aebc2f2 100644 --- a/src/main/java/fr/xephi/authme/AuthMe.java +++ b/src/main/java/fr/xephi/authme/AuthMe.java @@ -306,7 +306,8 @@ public class AuthMe extends JavaPlugin { reloadSupportHook(); // Register event listeners - registerEventListeners(messages, database, management, pluginHooks, spawnLoader, antiBot); + registerEventListeners( + messages, database, management, pluginHooks, spawnLoader, antiBot, bukkitService, validationService); // Start Email recall task if needed scheduleRecallEmailTask(); @@ -371,16 +372,18 @@ public class AuthMe extends JavaPlugin { * Register all event listeners. */ private void registerEventListeners(Messages messages, DataSource dataSource, Management management, - PluginHooks pluginHooks, SpawnLoader spawnLoader, AntiBot antiBot) { + PluginHooks pluginHooks, SpawnLoader spawnLoader, AntiBot antiBot, + BukkitService bukkitService, ValidationService validationService) { // Get the plugin manager instance PluginManager pluginManager = server.getPluginManager(); // Register event listeners pluginManager.registerEvents(new AuthMePlayerListener( - this, newSettings, messages, dataSource, antiBot, management, bukkitService), this); + this, newSettings, messages, dataSource, antiBot, management, bukkitService, validationService), this); pluginManager.registerEvents(new AuthMeBlockListener(), this); pluginManager.registerEvents(new AuthMeEntityListener(), this); - pluginManager.registerEvents(new AuthMeServerListener(this, messages, pluginHooks, spawnLoader), this); + pluginManager.registerEvents(new AuthMeServerListener( + this, messages, newSettings, pluginHooks, spawnLoader, validationService), this); // Try to register 1.6 player listeners try { diff --git a/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java b/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java index a17eacd5..e3753793 100644 --- a/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java +++ b/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java @@ -19,11 +19,12 @@ import fr.xephi.authme.process.Management; import fr.xephi.authme.settings.NewSetting; import fr.xephi.authme.settings.Settings; import fr.xephi.authme.settings.properties.HooksSettings; +import fr.xephi.authme.settings.properties.ProtectionSettings; import fr.xephi.authme.settings.properties.RegistrationSettings; import fr.xephi.authme.settings.properties.RestrictionSettings; import fr.xephi.authme.util.BukkitService; -import fr.xephi.authme.util.GeoLiteAPI; import fr.xephi.authme.util.Utils; +import fr.xephi.authme.util.ValidationService; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.Location; @@ -74,9 +75,11 @@ public class AuthMePlayerListener implements Listener { private final AntiBot antiBot; private final Management management; private final BukkitService bukkitService; + private final ValidationService validationService; public AuthMePlayerListener(AuthMe plugin, NewSetting settings, Messages messages, DataSource dataSource, - AntiBot antiBot, Management management, BukkitService bukkitService) { + AntiBot antiBot, Management management, BukkitService bukkitService, + ValidationService validationService) { this.plugin = plugin; this.settings = settings; this.m = messages; @@ -84,6 +87,7 @@ public class AuthMePlayerListener implements Listener { this.antiBot = antiBot; this.management = management; this.bukkitService = bukkitService; + this.validationService = validationService; } private void handleChat(AsyncPlayerChatEvent event) { @@ -265,30 +269,22 @@ public class AuthMePlayerListener implements Listener { PlayerAuth auth = dataSource.getAuth(event.getName()); if (settings.getProperty(RegistrationSettings.PREVENT_OTHER_CASE) && auth != null && auth.getRealName() != null) { String realName = auth.getRealName(); - if (!realName.isEmpty() && !realName.equals("Player") && !realName.equals(event.getName())) { + if (!realName.isEmpty() && !"Player".equals(realName) && !realName.equals(event.getName())) { event.setLoginResult(AsyncPlayerPreLoginEvent.Result.KICK_OTHER); event.setKickMessage(m.retrieveSingle(MessageKey.INVALID_NAME_CASE, realName, event.getName())); return; } - if (realName.isEmpty() || realName.equals("Player")) { + if (realName.isEmpty() || "Player".equals(realName)) { dataSource.updateRealName(event.getName().toLowerCase(), event.getName()); } } - if (auth == null) { - if (!Settings.countriesBlacklist.isEmpty() || !Settings.countries.isEmpty()) { - String playerIP = event.getAddress().getHostAddress(); - String countryCode = GeoLiteAPI.getCountryCode(playerIP); - if (Settings.countriesBlacklist.contains(countryCode)) { - event.setLoginResult(AsyncPlayerPreLoginEvent.Result.KICK_OTHER); - event.setKickMessage(m.retrieveSingle(MessageKey.COUNTRY_BANNED_ERROR)); - return; - } - if (Settings.enableProtection && !Settings.countries.contains(countryCode)) { - event.setLoginResult(AsyncPlayerPreLoginEvent.Result.KICK_OTHER); - event.setKickMessage(m.retrieveSingle(MessageKey.COUNTRY_BANNED_ERROR)); - return; - } + if (auth == null && settings.getProperty(ProtectionSettings.ENABLE_PROTECTION)) { + String playerIp = event.getAddress().getHostAddress(); + if (!validationService.isCountryAdmitted(playerIp)) { + event.setLoginResult(AsyncPlayerPreLoginEvent.Result.KICK_OTHER); + event.setKickMessage(m.retrieveSingle(MessageKey.COUNTRY_BANNED_ERROR)); + return; } } diff --git a/src/main/java/fr/xephi/authme/listener/AuthMeServerListener.java b/src/main/java/fr/xephi/authme/listener/AuthMeServerListener.java index ec8326b5..96f5320a 100644 --- a/src/main/java/fr/xephi/authme/listener/AuthMeServerListener.java +++ b/src/main/java/fr/xephi/authme/listener/AuthMeServerListener.java @@ -5,9 +5,10 @@ import fr.xephi.authme.ConsoleLogger; import fr.xephi.authme.hooks.PluginHooks; import fr.xephi.authme.output.MessageKey; import fr.xephi.authme.output.Messages; -import fr.xephi.authme.settings.Settings; +import fr.xephi.authme.settings.NewSetting; import fr.xephi.authme.settings.SpawnLoader; -import fr.xephi.authme.util.GeoLiteAPI; +import fr.xephi.authme.settings.properties.ProtectionSettings; +import fr.xephi.authme.util.ValidationService; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; @@ -21,25 +22,26 @@ public class AuthMeServerListener implements Listener { private final AuthMe plugin; private final Messages messages; + private final NewSetting settings; private final PluginHooks pluginHooks; private final SpawnLoader spawnLoader; + private final ValidationService validationService; - public AuthMeServerListener(AuthMe plugin, Messages messages, PluginHooks pluginHooks, SpawnLoader spawnLoader) { + public AuthMeServerListener(AuthMe plugin, Messages messages, NewSetting settings, PluginHooks pluginHooks, + SpawnLoader spawnLoader, ValidationService validationService) { this.plugin = plugin; this.messages = messages; + this.settings = settings; this.pluginHooks = pluginHooks; this.spawnLoader = spawnLoader; + this.validationService = validationService; } @EventHandler(priority = EventPriority.HIGHEST) public void onServerPing(ServerListPingEvent event) { - if (!Settings.countriesBlacklist.isEmpty() || !Settings.countries.isEmpty()){ - String countryCode = GeoLiteAPI.getCountryCode(event.getAddress().getHostAddress()); - if( Settings.countriesBlacklist.contains(countryCode)) { - event.setMotd(messages.retrieveSingle(MessageKey.COUNTRY_BANNED_ERROR)); - return; - } - if (Settings.enableProtection && !Settings.countries.contains(countryCode)) { + if (settings.getProperty(ProtectionSettings.ENABLE_PROTECTION)) { + String playerIp = event.getAddress().getHostAddress(); + if (!validationService.isCountryAdmitted(playerIp)) { event.setMotd(messages.retrieveSingle(MessageKey.COUNTRY_BANNED_ERROR)); } } diff --git a/src/main/java/fr/xephi/authme/util/ValidationService.java b/src/main/java/fr/xephi/authme/util/ValidationService.java index 7f8b78b7..95dff810 100644 --- a/src/main/java/fr/xephi/authme/util/ValidationService.java +++ b/src/main/java/fr/xephi/authme/util/ValidationService.java @@ -5,7 +5,9 @@ import fr.xephi.authme.output.MessageKey; import fr.xephi.authme.permission.PermissionsManager; import fr.xephi.authme.permission.PlayerStatePermission; import fr.xephi.authme.settings.NewSetting; +import fr.xephi.authme.settings.domain.Property; import fr.xephi.authme.settings.properties.EmailSettings; +import fr.xephi.authme.settings.properties.ProtectionSettings; import fr.xephi.authme.settings.properties.RestrictionSettings; import fr.xephi.authme.settings.properties.SecuritySettings; import org.bukkit.command.CommandSender; @@ -52,26 +54,74 @@ public class ValidationService { return null; } + /** + * Verifies whether the email is valid and admitted for use according to the plugin settings. + * + * @param email the email to verify + * @return true if the email is valid, false otherwise + */ public boolean validateEmail(String email) { if (!email.contains("@") || "your@email.com".equalsIgnoreCase(email)) { return false; } final String emailDomain = email.split("@")[1]; - - List whitelist = settings.getProperty(EmailSettings.DOMAIN_WHITELIST); - if (!CollectionUtils.isEmpty(whitelist)) { - return containsIgnoreCase(whitelist, emailDomain); - } - - List blacklist = settings.getProperty(EmailSettings.DOMAIN_BLACKLIST); - return CollectionUtils.isEmpty(blacklist) || !containsIgnoreCase(blacklist, emailDomain); + return validateWhitelistAndBlacklist( + emailDomain, EmailSettings.DOMAIN_WHITELIST, EmailSettings.DOMAIN_BLACKLIST); } + /** + * Queries the database whether the email is still free for registration, i.e. whether the given + * command sender may use the email to register a new account (as defined by settings and permissions). + * + * @param email the email to verify + * @param sender the command sender + * @return true if the email may be used, false otherwise (registration threshold has been exceeded) + */ public boolean isEmailFreeForRegistration(String email, CommandSender sender) { return permissionsManager.hasPermission(sender, PlayerStatePermission.ALLOW_MULTIPLE_ACCOUNTS) || dataSource.countAuthsByEmail(email) < settings.getProperty(EmailSettings.MAX_REG_PER_EMAIL); } + /** + * Checks whether the player's country is allowed to join the server, based on the given IP address + * and the configured country whitelist or blacklist. + * + * @param hostAddress the IP address to verify + * @return true if the IP address' country is allowed, false otherwise + */ + public boolean isCountryAdmitted(String hostAddress) { + // Check if we have restrictions on country, if not return true and avoid the country lookup + if (settings.getProperty(ProtectionSettings.COUNTRIES_WHITELIST).isEmpty() + && settings.getProperty(ProtectionSettings.COUNTRIES_BLACKLIST).isEmpty()) { + return true; + } + + String countryCode = GeoLiteAPI.getCountryCode(hostAddress); + return validateWhitelistAndBlacklist(countryCode, + ProtectionSettings.COUNTRIES_WHITELIST, + ProtectionSettings.COUNTRIES_BLACKLIST); + } + + /** + * Verifies whether the given value is allowed according to the given whitelist and blacklist settings. + * Whitelist has precedence over blacklist: if a whitelist is set, the value is rejected if not present + * in the whitelist. + * + * @param value the value to verify + * @param whitelist the whitelist property + * @param blacklist the blacklist property + * @return true if the value is admitted by the lists, false otherwise + */ + private boolean validateWhitelistAndBlacklist(String value, Property> whitelist, + Property> blacklist) { + List whitelistValue = settings.getProperty(whitelist); + if (!CollectionUtils.isEmpty(whitelistValue)) { + return containsIgnoreCase(whitelistValue, value); + } + List blacklistValue = settings.getProperty(blacklist); + return CollectionUtils.isEmpty(blacklistValue) || !containsIgnoreCase(blacklistValue, value); + } + private static boolean containsIgnoreCase(Collection coll, String needle) { for (String entry : coll) { if (entry.equalsIgnoreCase(needle)) { From 121dd7e6fb1a662a479147e31f57f00d460e8ed7 Mon Sep 17 00:00:00 2001 From: Xephi59 Date: Mon, 2 May 2016 02:13:19 +0200 Subject: [PATCH 3/5] Add Spigot API - 1.9 PlayerSpawnLocationEvent --- pom.xml | 8 +++ src/main/java/fr/xephi/authme/AuthMe.java | 61 +++++++++++-------- .../fr/xephi/authme/hooks/PluginHooks.java | 14 +++-- .../listener/AuthMePlayerListener19.java | 26 ++++++++ 4 files changed, 77 insertions(+), 32 deletions(-) create mode 100644 src/main/java/fr/xephi/authme/listener/AuthMePlayerListener19.java diff --git a/pom.xml b/pom.xml index ec273c53..832fdce8 100644 --- a/pom.xml +++ b/pom.xml @@ -429,6 +429,14 @@ true + + + org.spigotmc + spigot-api + 1.9.2-R0.1-SNAPSHOT + provided + + org.bukkit diff --git a/src/main/java/fr/xephi/authme/AuthMe.java b/src/main/java/fr/xephi/authme/AuthMe.java index 6aebc2f2..66a49dbd 100644 --- a/src/main/java/fr/xephi/authme/AuthMe.java +++ b/src/main/java/fr/xephi/authme/AuthMe.java @@ -1,5 +1,32 @@ package fr.xephi.authme; +import static fr.xephi.authme.settings.properties.EmailSettings.MAIL_ACCOUNT; +import static fr.xephi.authme.settings.properties.EmailSettings.MAIL_PASSWORD; +import static fr.xephi.authme.settings.properties.EmailSettings.RECALL_PLAYERS; +import static fr.xephi.authme.settings.properties.PluginSettings.HELP_HEADER; + +import java.io.File; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Collection; +import java.util.Date; +import java.util.List; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.logging.Logger; + +import org.apache.logging.log4j.LogManager; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Server; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.plugin.PluginManager; +import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.scheduler.BukkitTask; + import fr.xephi.authme.api.API; import fr.xephi.authme.api.NewAPI; import fr.xephi.authme.cache.auth.PlayerAuth; @@ -27,6 +54,7 @@ import fr.xephi.authme.listener.AuthMeInventoryPacketAdapter; import fr.xephi.authme.listener.AuthMePlayerListener; import fr.xephi.authme.listener.AuthMePlayerListener16; import fr.xephi.authme.listener.AuthMePlayerListener18; +import fr.xephi.authme.listener.AuthMePlayerListener19; import fr.xephi.authme.listener.AuthMeServerListener; import fr.xephi.authme.listener.AuthMeTabCompletePacketAdapter; import fr.xephi.authme.listener.AuthMeTablistPacketAdapter; @@ -62,32 +90,6 @@ import fr.xephi.authme.util.MigrationService; import fr.xephi.authme.util.StringUtils; import fr.xephi.authme.util.Utils; import fr.xephi.authme.util.ValidationService; -import org.apache.logging.log4j.LogManager; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Server; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.plugin.PluginManager; -import org.bukkit.plugin.java.JavaPlugin; -import org.bukkit.scheduler.BukkitTask; - -import java.io.File; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Collection; -import java.util.Date; -import java.util.List; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.logging.Logger; - -import static fr.xephi.authme.settings.properties.EmailSettings.MAIL_ACCOUNT; -import static fr.xephi.authme.settings.properties.EmailSettings.MAIL_PASSWORD; -import static fr.xephi.authme.settings.properties.EmailSettings.RECALL_PLAYERS; -import static fr.xephi.authme.settings.properties.PluginSettings.HELP_HEADER; /** * The AuthMe main class. @@ -398,6 +400,13 @@ public class AuthMe extends JavaPlugin { pluginManager.registerEvents(new AuthMePlayerListener18(), this); } catch (ClassNotFoundException ignore) { } + + // Try to register 1.9 player listeners + try { + Class.forName("org.spigotmc.event.player.PlayerSpawnLocationEvent"); + pluginManager.registerEvents(new AuthMePlayerListener19(this), this); + } catch (ClassNotFoundException ignore) { + } } private void reloadSupportHook() { diff --git a/src/main/java/fr/xephi/authme/hooks/PluginHooks.java b/src/main/java/fr/xephi/authme/hooks/PluginHooks.java index 3a54709a..fd455bb1 100644 --- a/src/main/java/fr/xephi/authme/hooks/PluginHooks.java +++ b/src/main/java/fr/xephi/authme/hooks/PluginHooks.java @@ -1,17 +1,19 @@ package fr.xephi.authme.hooks; -import com.earth2me.essentials.Essentials; -import com.onarandombox.MultiverseCore.MultiverseCore; -import com.onarandombox.MultiverseCore.api.MVWorldManager; -import fr.xephi.authme.ConsoleLogger; -import net.minelink.ctplus.CombatTagPlus; +import java.io.File; + import org.bukkit.Location; import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginManager; -import java.io.File; +import com.earth2me.essentials.Essentials; +import com.onarandombox.MultiverseCore.MultiverseCore; +import com.onarandombox.MultiverseCore.api.MVWorldManager; + +import fr.xephi.authme.ConsoleLogger; +import net.minelink.ctplus.CombatTagPlus; /** * Hooks into third-party plugins and allows to perform actions on them. diff --git a/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener19.java b/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener19.java new file mode 100644 index 00000000..5e6525bb --- /dev/null +++ b/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener19.java @@ -0,0 +1,26 @@ +package fr.xephi.authme.listener; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.spigotmc.event.player.PlayerSpawnLocationEvent; + +import fr.xephi.authme.AuthMe; + +/** + * Listener of player events for events introduced in Minecraft 1.9. + */ +public class AuthMePlayerListener19 implements Listener { + + private final AuthMe plugin; + + public AuthMePlayerListener19(AuthMe plugin) { + this.plugin = plugin; + } + + @EventHandler(priority = EventPriority.LOWEST) + public void onPlayerSpawn(PlayerSpawnLocationEvent event) { + event.setSpawnLocation(plugin.getSpawnLocation(event.getPlayer())); + } + +} From e97b4641a1780c2cadd1101d4f24f42c9cac5a8c Mon Sep 17 00:00:00 2001 From: Xephi59 Date: Mon, 2 May 2016 02:39:53 +0200 Subject: [PATCH 4/5] Kick player only Synchronously --- .../authme/RegisterAdminCommand.java | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/main/java/fr/xephi/authme/command/executable/authme/RegisterAdminCommand.java b/src/main/java/fr/xephi/authme/command/executable/authme/RegisterAdminCommand.java index 2caf7a3c..90ea8db5 100644 --- a/src/main/java/fr/xephi/authme/command/executable/authme/RegisterAdminCommand.java +++ b/src/main/java/fr/xephi/authme/command/executable/authme/RegisterAdminCommand.java @@ -1,15 +1,17 @@ package fr.xephi.authme.command.executable.authme; +import java.util.List; + +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; import fr.xephi.authme.command.CommandService; import fr.xephi.authme.command.ExecutableCommand; import fr.xephi.authme.output.MessageKey; import fr.xephi.authme.security.crypts.HashedPassword; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import java.util.List; /** * Admin command to register a user. @@ -55,9 +57,15 @@ public class RegisterAdminCommand implements ExecutableCommand { commandService.send(sender, MessageKey.REGISTER_SUCCESS); ConsoleLogger.info(sender.getName() + " registered " + playerName); - Player player = commandService.getPlayer(playerName); + final Player player = commandService.getPlayer(playerName); if (player != null) { - player.kickPlayer("An admin just registered you, please log in again"); + sender.getServer().getScheduler().scheduleSyncDelayedTask(AuthMe.getInstance(), new Runnable() + { + @Override + public void run() { + player.kickPlayer("An admin just registered you, please log in again"); + } + }); } } }); From 20a237dbdfefddcc38e75ca8b33c493a21f55548 Mon Sep 17 00:00:00 2001 From: Xephi59 Date: Mon, 2 May 2016 03:38:25 +0200 Subject: [PATCH 5/5] [DEV] This test would fail until player couldn't be returned as he was kicked --- .../authme/RegisterAdminCommand.java | 17 ++++---- .../authme/RegisterAdminCommandTest.java | 40 +++++++++---------- 2 files changed, 26 insertions(+), 31 deletions(-) diff --git a/src/main/java/fr/xephi/authme/command/executable/authme/RegisterAdminCommand.java b/src/main/java/fr/xephi/authme/command/executable/authme/RegisterAdminCommand.java index 90ea8db5..2c842aee 100644 --- a/src/main/java/fr/xephi/authme/command/executable/authme/RegisterAdminCommand.java +++ b/src/main/java/fr/xephi/authme/command/executable/authme/RegisterAdminCommand.java @@ -5,7 +5,6 @@ import java.util.List; 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; import fr.xephi.authme.command.CommandService; @@ -57,15 +56,15 @@ public class RegisterAdminCommand implements ExecutableCommand { commandService.send(sender, MessageKey.REGISTER_SUCCESS); ConsoleLogger.info(sender.getName() + " registered " + playerName); - final Player player = commandService.getPlayer(playerName); + Player player = commandService.getPlayer(playerName); if (player != null) { - sender.getServer().getScheduler().scheduleSyncDelayedTask(AuthMe.getInstance(), new Runnable() - { - @Override - public void run() { - player.kickPlayer("An admin just registered you, please log in again"); - } - }); + final Player p = player; + p.getServer().getScheduler().scheduleSyncDelayedTask(commandService.getAuthMe(), new Runnable() { + @Override + public void run() { + p.kickPlayer("An admin just registered you, please log in again"); + } + }); } } }); diff --git a/src/test/java/fr/xephi/authme/command/executable/authme/RegisterAdminCommandTest.java b/src/test/java/fr/xephi/authme/command/executable/authme/RegisterAdminCommandTest.java index 66b7d6c4..d2c7fd1e 100644 --- a/src/test/java/fr/xephi/authme/command/executable/authme/RegisterAdminCommandTest.java +++ b/src/test/java/fr/xephi/authme/command/executable/authme/RegisterAdminCommandTest.java @@ -1,13 +1,15 @@ package fr.xephi.authme.command.executable.authme; -import fr.xephi.authme.TestHelper; -import fr.xephi.authme.cache.auth.PlayerAuth; -import fr.xephi.authme.command.CommandService; -import fr.xephi.authme.command.ExecutableCommand; -import fr.xephi.authme.datasource.DataSource; -import fr.xephi.authme.output.MessageKey; -import fr.xephi.authme.security.PasswordSecurity; -import fr.xephi.authme.security.crypts.HashedPassword; +import static org.hamcrest.Matchers.equalTo; +import static org.junit.Assert.assertThat; +import static org.mockito.BDDMockito.given; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; + +import java.util.Arrays; + import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.junit.BeforeClass; @@ -17,17 +19,14 @@ import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; -import java.util.Arrays; - -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.equalTo; -import static org.junit.Assert.assertThat; -import static org.mockito.BDDMockito.given; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.argThat; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; +import fr.xephi.authme.TestHelper; +import fr.xephi.authme.cache.auth.PlayerAuth; +import fr.xephi.authme.command.CommandService; +import fr.xephi.authme.command.ExecutableCommand; +import fr.xephi.authme.datasource.DataSource; +import fr.xephi.authme.output.MessageKey; +import fr.xephi.authme.security.PasswordSecurity; +import fr.xephi.authme.security.crypts.HashedPassword; /** * Test for {@link RegisterAdminCommand}. @@ -155,8 +154,6 @@ public class RegisterAdminCommandTest { HashedPassword hashedPassword = new HashedPassword("$aea2345EW235dfsa@#R%987048"); given(passwordSecurity.computeHash(password, user)).willReturn(hashedPassword); given(commandService.getPasswordSecurity()).willReturn(passwordSecurity); - Player player = mock(Player.class); - given(commandService.getPlayer(user)).willReturn(player); ExecutableCommand command = new RegisterAdminCommand(); // when @@ -170,7 +167,6 @@ public class RegisterAdminCommandTest { verify(dataSource).saveAuth(captor.capture()); assertAuthHasInfo(captor.getValue(), user, hashedPassword); verify(dataSource).setUnlogged(user); - verify(player).kickPlayer(argThat(containsString("please log in again"))); } private void assertAuthHasInfo(PlayerAuth auth, String name, HashedPassword hashedPassword) {