From 8bfb56f34e010a96107bd435b94ce7bd7fc527fd Mon Sep 17 00:00:00 2001 From: Gabriele C Date: Wed, 23 Dec 2015 11:51:06 +0100 Subject: [PATCH 01/10] fix blindness when timeout = 0 --- .../executable/register/RegisterCommand.java | 4 +- .../authme/process/join/AsynchronousJoin.java | 42 +++++++++++++------ .../fr/xephi/authme/settings/Settings.java | 12 +++++- 3 files changed, 42 insertions(+), 16 deletions(-) diff --git a/src/main/java/fr/xephi/authme/command/executable/register/RegisterCommand.java b/src/main/java/fr/xephi/authme/command/executable/register/RegisterCommand.java index 0aa3e31b..df4f4501 100644 --- a/src/main/java/fr/xephi/authme/command/executable/register/RegisterCommand.java +++ b/src/main/java/fr/xephi/authme/command/executable/register/RegisterCommand.java @@ -29,7 +29,7 @@ public class RegisterCommand extends ExecutableCommand { // Make sure the command arguments are valid final Player player = (Player) sender; - if (arguments.isEmpty() || (Settings.getEnablePasswordVerifier && arguments.size() < 2)) { + if (arguments.isEmpty() || (Settings.enablePasswordConfirmation && arguments.size() < 2)) { m.send(player, MessageKey.USAGE_REGISTER); return; } @@ -49,7 +49,7 @@ public class RegisterCommand extends ExecutableCommand { management.performRegister(player, thePass, email); return; } - if (arguments.size() > 1 && Settings.getEnablePasswordVerifier) { + if (arguments.size() > 1 && Settings.enablePasswordConfirmation) { if (!arguments.get(0).equals(arguments.get(1))) { m.send(player, MessageKey.PASSWORD_MATCH_ERROR); return; diff --git a/src/main/java/fr/xephi/authme/process/join/AsynchronousJoin.java b/src/main/java/fr/xephi/authme/process/join/AsynchronousJoin.java index e95d3a31..b9c2859b 100644 --- a/src/main/java/fr/xephi/authme/process/join/AsynchronousJoin.java +++ b/src/main/java/fr/xephi/authme/process/join/AsynchronousJoin.java @@ -107,7 +107,8 @@ public class AsynchronousJoin { }); } - if (!Settings.noTeleport) + + if (!Settings.noTeleport) { if (Settings.isTeleportToSpawnEnabled || (Settings.isForceSpawnLocOnJoinEnabled && Settings.getForcedWorlds.contains(player.getWorld().getName()))) { sched.scheduleSyncDelayedTask(plugin, new Runnable() { @@ -117,26 +118,32 @@ public class AsynchronousJoin { plugin.getServer().getPluginManager().callEvent(tpEvent); if (!tpEvent.isCancelled()) { if (player.isOnline() && tpEvent.getTo() != null) { - if (tpEvent.getTo().getWorld() != null) + if (tpEvent.getTo().getWorld() != null) { player.teleport(tpEvent.getTo()); + } } } } }); } + } + placePlayerSafely(player, spawnLoc); LimboCache.getInstance().updateLimboPlayer(player); + // protect inventory if (Settings.protectInventoryBeforeLogInEnabled && plugin.inventoryProtector != null) { ProtectInventoryEvent ev = new ProtectInventoryEvent(player); plugin.getServer().getPluginManager().callEvent(ev); if (ev.isCancelled()) { plugin.inventoryProtector.sendInventoryPacket(player); - if (!Settings.noConsoleSpam) + if (!Settings.noConsoleSpam) { ConsoleLogger.info("ProtectInventoryEvent has been cancelled for " + player.getName() + " ..."); + } } } + } else { if (Settings.isForceSurvivalModeEnabled && !Settings.forceOnlyAfterLogin) { sched.scheduleSyncDelayedTask(plugin, new Runnable() { @@ -155,7 +162,8 @@ public class AsynchronousJoin { if (!Settings.isForcedRegistrationEnabled) { return; } - if (!Settings.noTeleport) + + if (!Settings.noTeleport) { if (!needFirstSpawn() && Settings.isTeleportToSpawnEnabled || (Settings.isForceSpawnLocOnJoinEnabled && Settings.getForcedWorlds.contains(player.getWorld().getName()))) { sched.scheduleSyncDelayedTask(plugin, new Runnable() { @@ -165,29 +173,26 @@ public class AsynchronousJoin { plugin.getServer().getPluginManager().callEvent(tpEvent); if (!tpEvent.isCancelled()) { if (player.isOnline() && tpEvent.getTo() != null) { - if (tpEvent.getTo().getWorld() != null) + if (tpEvent.getTo().getWorld() != null) { player.teleport(tpEvent.getTo()); + } } } } }); } + } } if (!LimboCache.getInstance().hasLimboPlayer(name)) { LimboCache.getInstance().addLimboPlayer(player); } + Utils.setGroup(player, isAuthAvailable ? GroupType.NOTLOGGEDIN : GroupType.UNREGISTERED); final int timeOut = Settings.getRegistrationTimeout * 20; - int msgInterval = Settings.getWarnMessageInterval; - if (timeOut > 0) { - BukkitTask id = sched.runTaskLaterAsynchronously(plugin, new TimeoutTask(plugin, name, player), timeOut); - LimboCache.getInstance().getLimboPlayer(name).setTimeoutTaskId(id); - } - Utils.setGroup(player, isAuthAvailable ? GroupType.NOTLOGGEDIN : GroupType.UNREGISTERED); sched.scheduleSyncDelayedTask(plugin, new Runnable() { @Override public void run() { @@ -205,11 +210,24 @@ public class AsynchronousJoin { player.performCommand("motd"); } if (Settings.applyBlindEffect) { - player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, timeOut, 2)); + int blindTimeOut; + // Allow infinite blindness effect + if(timeOut < 0) { + blindTimeOut = 99999; + } else { + blindTimeOut = timeOut; + } + player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, blindTimeOut, 2)); } } }); + + int msgInterval = Settings.getWarnMessageInterval; + if (timeOut > 0) { + BukkitTask id = sched.runTaskLaterAsynchronously(plugin, new TimeoutTask(plugin, name, player), timeOut); + LimboCache.getInstance().getLimboPlayer(name).setTimeoutTaskId(id); + } if (Settings.isSessionsEnabled && isAuthAvailable && (PlayerCache.getInstance().isAuthenticated(name) || database.isLogged(name))) { if (plugin.sessions.containsKey(name)) { diff --git a/src/main/java/fr/xephi/authme/settings/Settings.java b/src/main/java/fr/xephi/authme/settings/Settings.java index ba0496a0..98d5b38c 100644 --- a/src/main/java/fr/xephi/authme/settings/Settings.java +++ b/src/main/java/fr/xephi/authme/settings/Settings.java @@ -67,7 +67,7 @@ public final class Settings { isForceSingleSessionEnabled, isForceSpawnLocOnJoinEnabled, isSaveQuitLocationEnabled, isForceSurvivalModeEnabled, isResetInventoryIfCreative, isCachingEnabled, - isKickOnWrongPasswordEnabled, getEnablePasswordVerifier, + isKickOnWrongPasswordEnabled, enablePasswordConfirmation, protectInventoryBeforeLogInEnabled, isBackupActivated, isBackupOnStart, isBackupOnStop, isStopEnabled, reloadSupport, rakamakUseIp, noConsoleSpam, removePassword, displayOtherAccounts, @@ -202,7 +202,7 @@ public final class Settings { } getRegisteredGroup = configFile.getString("GroupOptions.RegisteredPlayerGroup", ""); - getEnablePasswordVerifier = configFile.getBoolean("settings.restrictions.enablePasswordVerifier", true); + enablePasswordConfirmation = configFile.getBoolean("settings.restrictions.enablePasswordConfirmation", true); protectInventoryBeforeLogInEnabled = configFile.getBoolean("settings.restrictions.ProtectInventoryBeforeLogIn", true); plugin.checkProtocolLib(); @@ -581,6 +581,14 @@ public final class Settings { set("settings.useWelcomeMessage", true); changes = true; } + if (!contains("settings.restrictions.enablePasswordConfirmation")) { + set("settings.restrictions.enablePasswordConfirmation", true); + changes = true; + } + if (contains("settings.restrictions.enablePasswordVerifier")) { + set("settings.restrictions.enablePasswordVerifier", null); + changes = true; + } if (!contains("settings.security.unsafePasswords")) { List str = new ArrayList<>(); str.add("123456"); From 0a2f26deea7c6caf98ea52d46bdbd9907b32c698 Mon Sep 17 00:00:00 2001 From: Gabriele C Date: Wed, 23 Dec 2015 12:12:00 +0100 Subject: [PATCH 02/10] Start main class cleanup 1/? --- src/main/java/fr/xephi/authme/AuthMe.java | 93 +++++++++++------------ 1 file changed, 44 insertions(+), 49 deletions(-) diff --git a/src/main/java/fr/xephi/authme/AuthMe.java b/src/main/java/fr/xephi/authme/AuthMe.java index 7acc03d3..cd4e1e47 100644 --- a/src/main/java/fr/xephi/authme/AuthMe.java +++ b/src/main/java/fr/xephi/authme/AuthMe.java @@ -76,39 +76,21 @@ import java.util.logging.Logger; */ public class AuthMe extends JavaPlugin { - /** - * Defines the name of the plugin. - */ + // Defines the name of the plugin. private static final String PLUGIN_NAME = "AuthMeReloaded"; + // Default version and build number values; private static String pluginVersion = "N/D"; private static String pluginBuildNumber = "Unknown"; + /* + * Private Instances + * TODO: should we set every instance to null as initial status? + */ private static AuthMe plugin; private static Server server; private static Wrapper wrapper = Wrapper.getInstance(); - private Management management; - public NewAPI api; - public SendMailSSL mail; - public DataManager dataManager; - public DataSource database; - public OtherAccounts otherAccounts; - public Location essentialsSpawn; - - // Hooks TODO: Move into modules - public Essentials ess; - public MultiverseCore multiverse; - public CombatTagPlus combatTagPlus; - public AuthMeInventoryPacketAdapter inventoryProtector; - - // Data maps and stuff - // TODO: Move into a manager - public final ConcurrentHashMap sessions = new ConcurrentHashMap<>(); - public final ConcurrentHashMap captcha = new ConcurrentHashMap<>(); - public final ConcurrentHashMap cap = new ConcurrentHashMap<>(); - public final ConcurrentHashMap realIp = new ConcurrentHashMap<>(); - private CommandHandler commandHandler = null; private PermissionsManager permsMan = null; private Settings settings; @@ -116,9 +98,34 @@ public class AuthMe extends JavaPlugin { private JsonCache playerBackup; private ModuleManager moduleManager; + // Public Instances + public NewAPI api; + public SendMailSSL mail; + public DataManager dataManager; + public DataSource database; + public OtherAccounts otherAccounts; + public Location essentialsSpawn; + + /* + * Plugin Hooks + * TODO: Move into modules + */ + public Essentials ess; + public MultiverseCore multiverse; + public CombatTagPlus combatTagPlus; + public AuthMeInventoryPacketAdapter inventoryProtector; + + /* + * Maps and stuff + * TODO: Clean up and Move into a manager + */ + public final ConcurrentHashMap sessions = new ConcurrentHashMap<>(); + public final ConcurrentHashMap captcha = new ConcurrentHashMap<>(); + public final ConcurrentHashMap cap = new ConcurrentHashMap<>(); + public final ConcurrentHashMap realIp = new ConcurrentHashMap<>(); + /** - * Returns the plugin's instance. - * + * Get the plugin's instance. * @return AuthMe */ public static AuthMe getInstance() { @@ -127,52 +134,46 @@ public class AuthMe extends JavaPlugin { /** * Get the plugin's name. - * - * @return Plugin name. + * @return The plugin's name. */ public static String getPluginName() { return PLUGIN_NAME; } /** - * Get the current installed AuthMeReloaded version name. - * - * @return The version name of the currently installed AuthMeReloaded instance. + * Get the plugin's version. + * @return The plugin's version. */ public static String getPluginVersion() { return pluginVersion; } /** - * Get the current installed AuthMeReloaded version code. - * - * @return The version code of the currently installed AuthMeReloaded instance. + * Get the plugin's build number. + * @return The plugin's build number. */ public static String getPluginBuildNumber() { return pluginBuildNumber; } /** - * Returns the plugin's Settings. - * - * @return Settings + * Get the plugin's Settings. + * @return Plugin's settings. */ public Settings getSettings() { return settings; } /** - * Returns the Messages instance. - * - * @return Messages + * Get the Messages instance. + * @return Plugin's messages. */ public Messages getMessages() { return messages; } // Get version and build number of the plugin - // TODO: enhance this - private void setupConstants() { + private void setPluginInfos() { String versionRaw = this.getDescription().getVersion(); int index = versionRaw.lastIndexOf("-"); if (index != -1) { @@ -186,7 +187,6 @@ public class AuthMe extends JavaPlugin { /** * Method called when the server enables the plugin. - * * @see org.bukkit.plugin.Plugin#onEnable() */ @Override @@ -194,7 +194,7 @@ public class AuthMe extends JavaPlugin { // Set various instances server = getServer(); plugin = this; - setupConstants(); + setPluginInfos(); // Set up the permissions manager and command handler permsMan = initializePermissionsManager(); @@ -491,9 +491,6 @@ public class AuthMe extends JavaPlugin { } } - // Show the exception message and stop/unload the server/plugin as defined - // in the configuration - /** * Method onDisable. * @@ -524,8 +521,6 @@ public class AuthMe extends JavaPlugin { ConsoleLogger.info("AuthMe " + this.getDescription().getVersion() + " disabled!"); } - // Initialize and setup the database - // Stop/unload the server/plugin as defined in the configuration public void stopOrUnload() { if (Settings.isStopEnabled) { From 1d21333c9473cb427e5c3ec721f30abaa662edb3 Mon Sep 17 00:00:00 2001 From: Gabriele C Date: Wed, 23 Dec 2015 12:27:41 +0100 Subject: [PATCH 03/10] I'm a noob --- .../java/fr/xephi/authme/process/join/AsynchronousJoin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/fr/xephi/authme/process/join/AsynchronousJoin.java b/src/main/java/fr/xephi/authme/process/join/AsynchronousJoin.java index b9c2859b..8da0fb84 100644 --- a/src/main/java/fr/xephi/authme/process/join/AsynchronousJoin.java +++ b/src/main/java/fr/xephi/authme/process/join/AsynchronousJoin.java @@ -212,7 +212,7 @@ public class AsynchronousJoin { if (Settings.applyBlindEffect) { int blindTimeOut; // Allow infinite blindness effect - if(timeOut < 0) { + if(timeOut <= 0) { blindTimeOut = 99999; } else { blindTimeOut = timeOut; From 857042ba5f9f57d326328c60ccf07e5f1c583f49 Mon Sep 17 00:00:00 2001 From: ljacqu Date: Wed, 23 Dec 2015 12:39:48 +0100 Subject: [PATCH 04/10] Minor - mark password confirmation as optional for /register --- src/main/java/fr/xephi/authme/command/CommandInitializer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/fr/xephi/authme/command/CommandInitializer.java b/src/main/java/fr/xephi/authme/command/CommandInitializer.java index 40646d2a..66d13803 100644 --- a/src/main/java/fr/xephi/authme/command/CommandInitializer.java +++ b/src/main/java/fr/xephi/authme/command/CommandInitializer.java @@ -338,7 +338,7 @@ public final class CommandInitializer { .description("Registration command") .detailedDescription("Command to register using AuthMeReloaded.") .withArgument("password", "Password", false) - .withArgument("verifyPassword", "Verify password", false) + .withArgument("verifyPassword", "Verify password", true) .permissions(ALLOWED, PlayerPermission.REGISTER) .executableCommand(new RegisterCommand()) .build(); From 57a22c101bda7d58c8b1d6a4f28f5b4d3e3f8883 Mon Sep 17 00:00:00 2001 From: Xephi Date: Wed, 23 Dec 2015 12:48:00 +0100 Subject: [PATCH 05/10] Add changepassword to Bungee Hook --- .../xephi/authme/hooks/BungeeCordMessage.java | 10 ++++++++- .../xephi/authme/task/ChangePasswordTask.java | 22 ++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/main/java/fr/xephi/authme/hooks/BungeeCordMessage.java b/src/main/java/fr/xephi/authme/hooks/BungeeCordMessage.java index 5b19348b..11240003 100644 --- a/src/main/java/fr/xephi/authme/hooks/BungeeCordMessage.java +++ b/src/main/java/fr/xephi/authme/hooks/BungeeCordMessage.java @@ -47,7 +47,7 @@ public class BungeeCordMessage implements PluginMessageListener { } if (subChannel.equalsIgnoreCase("AuthMe")) { String str = in.readUTF(); - String[] args = str.split(";"); + final String[] args = str.split(";"); final String act = args[0]; final String name = args[1]; plugin.getServer().getScheduler().runTaskAsynchronously(plugin, new Runnable() { @@ -71,6 +71,14 @@ public class BungeeCordMessage implements PluginMessageListener { ConsoleLogger.info("Player " + auth.getNickname() + " has registered out from one of your server!"); } + else if ("changepassword".equals(act)) { + final String password = args[2]; + auth.setHash(password); + if (args.length == 4) + auth.setSalt(args[3]); + PlayerCache.getInstance().updatePlayer(auth); + plugin.database.updatePassword(auth); + } } }); diff --git a/src/main/java/fr/xephi/authme/task/ChangePasswordTask.java b/src/main/java/fr/xephi/authme/task/ChangePasswordTask.java index 9b4dfac5..e5b54b8d 100644 --- a/src/main/java/fr/xephi/authme/task/ChangePasswordTask.java +++ b/src/main/java/fr/xephi/authme/task/ChangePasswordTask.java @@ -10,6 +10,9 @@ import fr.xephi.authme.output.Messages; import fr.xephi.authme.settings.Settings; import org.bukkit.entity.Player; +import com.google.common.io.ByteArrayDataOutput; +import com.google.common.io.ByteStreams; + import java.security.NoSuchAlgorithmException; /** @@ -40,7 +43,7 @@ public class ChangePasswordTask implements Runnable { public void run() { Messages m = plugin.getMessages(); try { - String name = player.getName().toLowerCase(); + final String name = player.getName().toLowerCase(); String hashNew = PasswordSecurity.getHash(Settings.getPasswordHash, newPassword, name); PlayerAuth auth = PlayerCache.getInstance().getAuth(name); if (PasswordSecurity.comparePasswordWithHash(oldPassword, auth.getHash(), player.getName())) { @@ -58,6 +61,23 @@ public class ChangePasswordTask implements Runnable { PlayerCache.getInstance().updatePlayer(auth); m.send(player, MessageKey.PASSWORD_CHANGED_SUCCESS); ConsoleLogger.info(player.getName() + " changed his password"); + if (Settings.bungee) + { + final String hash = auth.getHash(); + final String salt = auth.getSalt(); + plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable(){ + + @Override + public void run() { + ByteArrayDataOutput out = ByteStreams.newDataOutput(); + out.writeUTF("Forward"); + out.writeUTF("ALL"); + out.writeUTF("AuthMe"); + out.writeUTF("changepassword;" + name + ";" + hash + ";" + salt); + player.sendPluginMessage(plugin, "BungeeCord", out.toByteArray()); + } + }); + } } else { m.send(player, MessageKey.WRONG_PASSWORD); } From c231da784917810ab32a17f22708afec2e28b131 Mon Sep 17 00:00:00 2001 From: Gabriele C Date: Wed, 23 Dec 2015 13:30:30 +0100 Subject: [PATCH 06/10] new plugin file (TODO) --- newPlugin.yml | 201 ++++++++++++++++++++++ src/main/java/fr/xephi/authme/AuthMe.java | 6 +- 2 files changed, 203 insertions(+), 4 deletions(-) create mode 100644 newPlugin.yml diff --git a/newPlugin.yml b/newPlugin.yml new file mode 100644 index 00000000..78313cdf --- /dev/null +++ b/newPlugin.yml @@ -0,0 +1,201 @@ +name: ${pluginName} +authors: [${pluginAuthors}] +website: ${project.url} +description: ${project.description} +main: ${mainClass} +version: ${project.version}-b${buildNumber} +softdepend: + - Vault + - PermissionsBukkit + - PermissionsEX + - EssentialsGroupManager + - Multiverse-Core + - Essentials + - EssentialsSpawn + - ProtocolLib +commands: + authme: + description: AuthMe admin commands + usage: '/authme reload|register playername password|changepassword playername password|unregister playername|version|converter datatype' + permission: authme.admin + register: + description: Register an account + usage: /register password confirmpassword + aliases: [reg] + permission: authme.player.register + login: + description: Login into a account + usage: /login password + aliases: [l,log] + permission: authme.player.login + changepassword: + description: Change password of a account + usage: /changepassword oldPassword newPassword + permission: authme.player.changepassword + logout: + description: Logout from the server + usage: /logout + permission: authme.player.logout + unregister: + description: unregister your account + usage: /unregister password + permission: authme.player.unregister + email: + description: Add Email or recover password + usage: '/email add your@email.com your@email.com|change oldEmail newEmail|recovery your@email.com' + permission: authme.player.email + captcha: + description: Captcha command + usage: /captcha theCaptcha + permission: authme.player.captcha +permissions: + authme.player: + description: Gives access to all authme player commands + children: + authme.player.login: true + authme.player.logout: true + authme.player.register: true + authme.player.unregister: true + authme.player.changepassword: true + authme.player.captcha: true + authme.player.email: true + authme.player.email.add: true + authme.player.email.change: true + authme.player.email.recover: true + authme.player.canbeforced: true + authme.admin: + description: Gives access to all authme admin commands + children: + authme.player: true + authme.player.canbeforced: false + authme.admin.forcelogin: true + authme.admin.forcelogout: true + authme.admin.register: true + authme.admin.unregister: true + authme.admin.changemail: true + authme.admin.changepassword: true + authme.admin.lastlogin: true + authme.admin.accounts: true + authme.admin.getemail: true + authme.admin.getip: true + authme.admin.resetposition: true + authme.admin.setspawn: true + authme.admin.spawn: true + authme.admin.setfirstspawn: true + authme.admin.firstspawn: true + authme.admin.purge: true + authme.admin.purgebannedplayers: true + authme.admin.purgelastpos: true + authme.admin.converter: true + authme.admin.reload: true + authme.admin.switchantibot: true + authme.seeotheraccounts: true + authme.bypassantibot: true + authme.register: + description: Register an account + default: true + authme.unregister: + description: unregister your account + default: true + authme.login: + description: Login into a account + default: true + authme.logout: + description: Logout + default: true + authme.changepassword: + description: Change password of a account + default: true + authme.email: + description: Email base command + default: true + authme.player.email.add: + description: Email add command + default: true + authme.player.email.change: + description: Email change command + default: true + authme.player.email.recover: + description: Recovery command + default: true + authme.player.captcha: + description: Captcha command + default: true + authme.player.canbeforced: + description: Allow the user to be forced-logged via API + default: true + authme.admin.reload: + description: AuthMe reload commands + default: op + authme.admin.register: + description: AuthMe register command + default: op + authme.admin.changepassword: + description: AuthMe changepassword command + default: op + authme.admin.unregister: + description: AuthMe unregister command + default: op + authme.admin.purge: + description: AuthMe unregister command + default: op + authme.admin.lastlogin: + description: Get last login date about a player + default: op + authme.admin.getemail: + description: Get last email about a player + default: op + authme.admin.changeemail: + description: Change a player email + default: op + authme.admin.accounts: + description: Display Players Accounts + default: op + authme.admin.setspawn: + description: Set the AuthMe spawn point + default: op + authme.admin.spawn: + description: Teleport to AuthMe spawn point + default: op + authme.admin.purgebannedplayers: + description: Purge banned players + default: op + authme.admin.purgelastpos: + description: Purge last pos of players + default: op + authme.admin.switchantibot: + description: Switch AntiBot mode on/off + default: op + authme.admin.setfirstspawn: + description: Set the AuthMe First Spawn Point + default: op + authme.admin.firstspawn: + description: Teleport to AuthMe First Spawn Point + default: op + authme.admin.getip: + description: Get IP from a player ( fake and real ) + default: op + authme.admin.converter: + description: Allow /converter command + default: op + authme.admin.resetposition: + description: Reset last position for a player + default: op + authme.admin.forcelogin: + description: Force login for that player + default: op + authme.vip: + description: Allow vip slot when the server is full + default: op + authme.bypassantibot: + description: Bypass the AntiBot check + default: op + authme.seeotheraccounts: + description: display other accounts about a player when he logs in + default: op + authme.allowmoreaccounts: + description: allow more accounts for same ip + default: false + authme.bypassforcesurvival: + description: Bypass all ForceSurvival features + default: false diff --git a/src/main/java/fr/xephi/authme/AuthMe.java b/src/main/java/fr/xephi/authme/AuthMe.java index cd4e1e47..3ac4f9ce 100644 --- a/src/main/java/fr/xephi/authme/AuthMe.java +++ b/src/main/java/fr/xephi/authme/AuthMe.java @@ -83,10 +83,7 @@ public class AuthMe extends JavaPlugin { private static String pluginVersion = "N/D"; private static String pluginBuildNumber = "Unknown"; - /* - * Private Instances - * TODO: should we set every instance to null as initial status? - */ + // Private Instances private static AuthMe plugin; private static Server server; private static Wrapper wrapper = Wrapper.getInstance(); @@ -194,6 +191,7 @@ public class AuthMe extends JavaPlugin { // Set various instances server = getServer(); plugin = this; + setPluginInfos(); // Set up the permissions manager and command handler From f3999bd779ddd55603e7f134a39ce84b7a559bf5 Mon Sep 17 00:00:00 2001 From: Gabriele C Date: Wed, 23 Dec 2015 14:02:44 +0100 Subject: [PATCH 07/10] Enhance newPlugin --- newPlugin.yml | 204 +++++++++++++++++++++++++------------------------- 1 file changed, 103 insertions(+), 101 deletions(-) diff --git a/newPlugin.yml b/newPlugin.yml index 78313cdf..a00a77f6 100644 --- a/newPlugin.yml +++ b/newPlugin.yml @@ -49,8 +49,12 @@ commands: usage: /captcha theCaptcha permission: authme.player.captcha permissions: + authme.canbeforced: + description: Allow the user to be forced-logged via API + default: true authme.player: description: Gives access to all authme player commands + default: true children: authme.player.login: true authme.player.logout: true @@ -59,15 +63,44 @@ permissions: authme.player.changepassword: true authme.player.captcha: true authme.player.email: true + authme.player.register: + description: Register your account + default: false + authme.player.unregister: + description: Unregister your account + default: false + authme.player.login: + description: Login into your account + default: false + authme.player.logout: + description: Logout from your account + default: false + authme.player.changepassword: + description: Change password of your account + default: false + authme.player.email: + description: Gives access to player's email commands + default: false + children: authme.player.email.add: true authme.player.email.change: true authme.player.email.recover: true - authme.player.canbeforced: true + authme.player.email.add: + description: Add an email to your account + default: false + authme.player.email.change: + description: Change email of your account + default: false + authme.player.email.recover: + description: Recover your account + default: false + authme.player.captcha: + description: Captcha command + default: false authme.admin: description: Gives access to all authme admin commands + default: op children: - authme.player: true - authme.player.canbeforced: false authme.admin.forcelogin: true authme.admin.forcelogout: true authme.admin.register: true @@ -89,112 +122,81 @@ permissions: authme.admin.converter: true authme.admin.reload: true authme.admin.switchantibot: true - authme.seeotheraccounts: true - authme.bypassantibot: true - authme.register: - description: Register an account - default: true - authme.unregister: - description: unregister your account - default: true - authme.login: - description: Login into a account - default: true - authme.logout: - description: Logout - default: true - authme.changepassword: - description: Change password of a account - default: true - authme.email: - description: Email base command - default: true - authme.player.email.add: - description: Email add command - default: true - authme.player.email.change: - description: Email change command - default: true - authme.player.email.recover: - description: Recovery command - default: true - authme.player.captcha: - description: Captcha command - default: true - authme.player.canbeforced: - description: Allow the user to be forced-logged via API - default: true - authme.admin.reload: - description: AuthMe reload commands - default: op + authme.admin.seeotheraccounts: true authme.admin.register: - description: AuthMe register command - default: op - authme.admin.changepassword: - description: AuthMe changepassword command - default: op + description: Register an account + default: false authme.admin.unregister: - description: AuthMe unregister command - default: op - authme.admin.purge: - description: AuthMe unregister command - default: op - authme.admin.lastlogin: - description: Get last login date about a player - default: op - authme.admin.getemail: - description: Get last email about a player - default: op - authme.admin.changeemail: - description: Change a player email - default: op - authme.admin.accounts: - description: Display Players Accounts - default: op - authme.admin.setspawn: - description: Set the AuthMe spawn point - default: op - authme.admin.spawn: - description: Teleport to AuthMe spawn point - default: op - authme.admin.purgebannedplayers: - description: Purge banned players - default: op - authme.admin.purgelastpos: - description: Purge last pos of players - default: op - authme.admin.switchantibot: - description: Switch AntiBot mode on/off - default: op - authme.admin.setfirstspawn: - description: Set the AuthMe First Spawn Point - default: op - authme.admin.firstspawn: - description: Teleport to AuthMe First Spawn Point - default: op - authme.admin.getip: - description: Get IP from a player ( fake and real ) - default: op - authme.admin.converter: - description: Allow /converter command - default: op - authme.admin.resetposition: - description: Reset last position for a player - default: op + description: Unregister an account + default: false authme.admin.forcelogin: description: Force login for that player - default: op + default: false + authme.admin.forcelogout: + description: Force logout for that player + default: false + authme.admin.changepassword: + description: Change the password of an account + default: false + authme.admin.getemail: + description: Get last email about a player + default: false + authme.admin.changeemail: + description: Change a player email + default: false + authme.admin.accounts: + description: Display Players Accounts + default: false + authme.admin.seeotheraccounts: + description: Display other accounts about a player when he logs in + default: false + authme.admin.lastlogin: + description: Get last login date about a player + default: false + authme.admin.getip: + description: Get IP from a player (fake and real) + default: false + authme.admin.resetposition: + description: Reset last position for a player + default: false + authme.admin.setspawn: + description: Set the AuthMe spawn point + default: false + authme.admin.spawn: + description: Teleport to AuthMe spawn point + default: false + authme.admin.setfirstspawn: + description: Set the AuthMe First Spawn Point + default: false + authme.admin.firstspawn: + description: Teleport to AuthMe First Spawn Point + default: false + authme.admin.switchantibot: + description: Switch AntiBot mode on/off + default: false + authme.admin.purge: + description: Database purge command + default: false + authme.admin.purgebannedplayers: + description: Purge banned players + default: false + authme.admin.purgelastpos: + description: Purge last pos of players + default: false + authme.admin.converter: + description: Allow the /authme converter command + default: false + authme.admin.reload: + description: Reload the plugin + default: false authme.vip: description: Allow vip slot when the server is full - default: op + default: false authme.bypassantibot: description: Bypass the AntiBot check - default: op - authme.seeotheraccounts: - description: display other accounts about a player when he logs in - default: op - authme.allowmoreaccounts: - description: allow more accounts for same ip + default: false + authme.allowmultipleaccounts: + description: Allow more accounts for same ip default: false authme.bypassforcesurvival: description: Bypass all ForceSurvival features From 8c1eef3f59155611b19ea02ccf077bee7f667d3f Mon Sep 17 00:00:00 2001 From: games647 Date: Tue, 22 Dec 2015 11:05:35 +0100 Subject: [PATCH 08/10] Remove gamemode and flying switching Fixes Xephi/AuthMeReloaded#355 Fixes Xephi/AuthMeReloaded#320 Fixes Xephi/AuthMeReloaded#258 Fixes Xephi/AuthMeReloaded#246 --- .../authme/cache/backup/DataFileCache.java | 14 +------- .../xephi/authme/cache/backup/JsonCache.java | 7 +--- .../xephi/authme/cache/limbo/LimboCache.java | 25 ++----------- .../xephi/authme/cache/limbo/LimboPlayer.java | 29 ++------------- .../authme/listener/AuthMePlayerListener.java | 22 ------------ .../authme/process/join/AsynchronousJoin.java | 35 +------------------ .../process/login/AsynchronousLogin.java | 4 --- .../login/ProcessSyncronousPlayerLogin.java | 17 --------- .../logout/ProcessSyncronousPlayerLogout.java | 4 --- .../authme/process/quit/AsynchronousQuit.java | 6 +--- .../quit/ProcessSyncronousPlayerQuit.java | 13 +------ .../register/ProcessSyncPasswordRegister.java | 6 ---- .../fr/xephi/authme/settings/Settings.java | 9 ++--- src/main/java/fr/xephi/authme/util/Utils.java | 14 +------- src/main/resources/config.yml | 8 ----- .../java/fr/xephi/authme/util/UtilsTest.java | 32 +---------------- 16 files changed, 14 insertions(+), 231 deletions(-) diff --git a/src/main/java/fr/xephi/authme/cache/backup/DataFileCache.java b/src/main/java/fr/xephi/authme/cache/backup/DataFileCache.java index e567229d..bf5e7389 100644 --- a/src/main/java/fr/xephi/authme/cache/backup/DataFileCache.java +++ b/src/main/java/fr/xephi/authme/cache/backup/DataFileCache.java @@ -6,19 +6,16 @@ public class DataFileCache { private final String group; private final boolean operator; - private final boolean flying; /** * Constructor for DataFileCache. * * @param group String * @param operator boolean - * @param flying boolean */ - public DataFileCache(String group, boolean operator, boolean flying) { + public DataFileCache(String group, boolean operator) { this.group = group; this.operator = operator; - this.flying = flying; } /** @@ -38,13 +35,4 @@ public class DataFileCache { public boolean getOperator() { return operator; } - - /** - * Method isFlying. - * - * @return boolean - */ - public boolean isFlying() { - return flying; - } } diff --git a/src/main/java/fr/xephi/authme/cache/backup/JsonCache.java b/src/main/java/fr/xephi/authme/cache/backup/JsonCache.java index 38784b16..8e43241f 100644 --- a/src/main/java/fr/xephi/authme/cache/backup/JsonCache.java +++ b/src/main/java/fr/xephi/authme/cache/backup/JsonCache.java @@ -154,7 +154,6 @@ public class JsonCache { JsonElement e; String group = null; boolean operator = false; - boolean flying = false; if ((e = jsonObject.get("group")) != null) { group = e.getAsString(); @@ -162,11 +161,8 @@ public class JsonCache { if ((e = jsonObject.get("operator")) != null) { operator = e.getAsBoolean(); } - if ((e = jsonObject.get("flying")) != null) { - flying = e.getAsBoolean(); - } - return new DataFileCache(group, operator, flying); + return new DataFileCache(group, operator); } } @@ -187,7 +183,6 @@ public class JsonCache { JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("group", dataFileCache.getGroup()); jsonObject.addProperty("operator", dataFileCache.getOperator()); - jsonObject.addProperty("flying", dataFileCache.isFlying()); return jsonObject; } diff --git a/src/main/java/fr/xephi/authme/cache/limbo/LimboCache.java b/src/main/java/fr/xephi/authme/cache/limbo/LimboCache.java index b1f957de..083c962d 100644 --- a/src/main/java/fr/xephi/authme/cache/limbo/LimboCache.java +++ b/src/main/java/fr/xephi/authme/cache/limbo/LimboCache.java @@ -4,11 +4,7 @@ import fr.xephi.authme.AuthMe; import fr.xephi.authme.ConsoleLogger; import fr.xephi.authme.cache.backup.DataFileCache; import fr.xephi.authme.cache.backup.JsonCache; -import fr.xephi.authme.events.ResetInventoryEvent; import fr.xephi.authme.permission.PermissionsManager; -import fr.xephi.authme.settings.Settings; -import org.bukkit.Bukkit; -import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.entity.Player; @@ -56,10 +52,8 @@ public class LimboCache { public void addLimboPlayer(Player player) { String name = player.getName().toLowerCase(); Location loc = player.getLocation(); - GameMode gameMode = player.getGameMode(); boolean operator = false; String playerGroup = ""; - boolean flying = false; // Get the permissions manager, and make sure it's valid PermissionsManager permsMan = this.plugin.getPermissionsManager(); @@ -72,35 +66,20 @@ public class LimboCache { if (cache != null) { playerGroup = cache.getGroup(); operator = cache.getOperator(); - flying = cache.isFlying(); } } else { operator = player.isOp(); - flying = player.isFlying(); // Check whether groups are supported if (permsMan.hasGroupSupport()) playerGroup = permsMan.getPrimaryGroup(player); } - if (Settings.isForceSurvivalModeEnabled) { - if (Settings.isResetInventoryIfCreative && gameMode == GameMode.CREATIVE) { - ResetInventoryEvent event = new ResetInventoryEvent(player); - Bukkit.getServer().getPluginManager().callEvent(event); - if (!event.isCancelled()) { - player.getInventory().clear(); - player.sendMessage("Your inventory has been cleaned!"); - } - } - if (gameMode == GameMode.CREATIVE) { - flying = false; - } - gameMode = GameMode.SURVIVAL; - } if (player.isDead()) { loc = plugin.getSpawnLocation(player); } - cache.put(name, new LimboPlayer(name, loc, gameMode, operator, playerGroup, flying)); + + cache.put(name, new LimboPlayer(name, loc, operator, playerGroup)); } /** diff --git a/src/main/java/fr/xephi/authme/cache/limbo/LimboPlayer.java b/src/main/java/fr/xephi/authme/cache/limbo/LimboPlayer.java index 76ed21e8..f61c6246 100644 --- a/src/main/java/fr/xephi/authme/cache/limbo/LimboPlayer.java +++ b/src/main/java/fr/xephi/authme/cache/limbo/LimboPlayer.java @@ -1,6 +1,5 @@ package fr.xephi.authme.cache.limbo; -import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.scheduler.BukkitTask; @@ -12,29 +11,23 @@ public class LimboPlayer { private Location loc = null; private BukkitTask timeoutTaskId = null; private BukkitTask messageTaskId = null; - private GameMode gameMode = GameMode.SURVIVAL; private boolean operator = false; private String group = ""; - private boolean flying = false; /** * Constructor for LimboPlayer. * * @param name String * @param loc Location - * @param gameMode GameMode * @param operator boolean * @param group String - * @param flying boolean */ - public LimboPlayer(String name, Location loc, GameMode gameMode, - boolean operator, String group, boolean flying) { + public LimboPlayer(String name, Location loc, + boolean operator, String group) { this.name = name; this.loc = loc; - this.gameMode = gameMode; this.operator = operator; this.group = group; - this.flying = flying; } /** @@ -66,15 +59,6 @@ public class LimboPlayer { return loc; } - /** - * Method getGameMode. - * - * @return GameMode - */ - public GameMode getGameMode() { - return gameMode; - } - /** * Method getOperator. * @@ -149,13 +133,4 @@ public class LimboPlayer { } timeoutTaskId = null; } - - /** - * Method isFlying. - * - * @return boolean - */ - public boolean isFlying() { - return flying; - } } diff --git a/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java b/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java index 3899fb54..e994a7c2 100644 --- a/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java +++ b/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java @@ -18,7 +18,6 @@ import fr.xephi.authme.util.GeoLiteAPI; import fr.xephi.authme.util.Utils; import org.bukkit.Bukkit; import org.bukkit.ChatColor; -import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; @@ -35,7 +34,6 @@ import org.bukkit.event.player.PlayerBedEnterEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerFishEvent; -import org.bukkit.event.player.PlayerGameModeChangeEvent; import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerItemConsumeEvent; @@ -57,7 +55,6 @@ import static fr.xephi.authme.listener.ListenerService.shouldCancelEvent; */ public class AuthMePlayerListener implements Listener { - public static final ConcurrentHashMap gameMode = new ConcurrentHashMap<>(); public static final ConcurrentHashMap joinMessage = new ConcurrentHashMap<>(); public static final ConcurrentHashMap causeByAuthMe = new ConcurrentHashMap<>(); public final AuthMe plugin; @@ -493,25 +490,6 @@ public class AuthMePlayerListener implements Listener { } } - @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) - public void onPlayerGameModeChange(PlayerGameModeChangeEvent event) { - if (!shouldCancelEvent(event)) { - return; - } - - Player player = event.getPlayer(); - if (plugin.getPermissionsManager().hasPermission(player, PlayerPermission.BYPASS_FORCE_SURVIVAL)) { - return; - } - - String name = player.getName().toLowerCase(); - if (causeByAuthMe.containsKey(name)) { - causeByAuthMe.remove(name); - return; - } - event.setCancelled(true); - } - @EventHandler(ignoreCancelled = true, priority = EventPriority.NORMAL) public void onPlayerShear(PlayerShearEntityEvent event) { if (shouldCancelEvent(event)) { diff --git a/src/main/java/fr/xephi/authme/process/join/AsynchronousJoin.java b/src/main/java/fr/xephi/authme/process/join/AsynchronousJoin.java index 8da0fb84..406f6333 100644 --- a/src/main/java/fr/xephi/authme/process/join/AsynchronousJoin.java +++ b/src/main/java/fr/xephi/authme/process/join/AsynchronousJoin.java @@ -20,7 +20,6 @@ import fr.xephi.authme.task.TimeoutTask; import fr.xephi.authme.util.Utils; import fr.xephi.authme.util.Utils.GroupType; import org.bukkit.Bukkit; -import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -54,26 +53,21 @@ public class AsynchronousJoin { return; } - AuthMePlayerListener.gameMode.put(name, player.getGameMode()); - if (plugin.ess != null && Settings.disableSocialSpy) { plugin.ess.getUser(player).setSocialSpyEnabled(false); } final String ip = plugin.getIP(player); if (Settings.isAllowRestrictedIp && !Settings.getRestrictedIp(name, ip)) { - final GameMode gM = AuthMePlayerListener.gameMode.get(name); sched.scheduleSyncDelayedTask(plugin, new Runnable() { @Override public void run() { AuthMePlayerListener.causeByAuthMe.putIfAbsent(name, true); - player.setGameMode(gM); player.kickPlayer("You are not the Owner of this account, please try another name!"); if (Settings.banUnsafeIp) plugin.getServer().banIP(ip); } - }); return; } @@ -96,18 +90,6 @@ public class AsynchronousJoin { final Location spawnLoc = plugin.getSpawnLocation(player); final boolean isAuthAvailable = database.isAuthAvailable(name); if (isAuthAvailable) { - if (Settings.isForceSurvivalModeEnabled && !Settings.forceOnlyAfterLogin) { - sched.scheduleSyncDelayedTask(plugin, new Runnable() { - - @Override - public void run() { - AuthMePlayerListener.causeByAuthMe.putIfAbsent(name, true); - Utils.forceGM(player); - } - - }); - } - if (!Settings.noTeleport) { if (Settings.isTeleportToSpawnEnabled || (Settings.isForceSpawnLocOnJoinEnabled && Settings.getForcedWorlds.contains(player.getWorld().getName()))) { sched.scheduleSyncDelayedTask(plugin, new Runnable() { @@ -145,17 +127,6 @@ public class AsynchronousJoin { } } else { - if (Settings.isForceSurvivalModeEnabled && !Settings.forceOnlyAfterLogin) { - sched.scheduleSyncDelayedTask(plugin, new Runnable() { - - @Override - public void run() { - AuthMePlayerListener.causeByAuthMe.putIfAbsent(name, true); - Utils.forceGM(player); - } - - }); - } if (!Settings.unRegisteredGroup.isEmpty()) { Utils.setGroup(player, Utils.GroupType.UNREGISTERED); } @@ -197,10 +168,6 @@ public class AsynchronousJoin { @Override public void run() { player.setOp(false); - if (!Settings.isMovementAllowed) { - player.setAllowFlight(true); - player.setFlying(true); - } if (Settings.isRemoveSpeedEnabled) { player.setFlySpeed(0.0f); player.setWalkSpeed(0.0f); @@ -222,7 +189,7 @@ public class AsynchronousJoin { } }); - + int msgInterval = Settings.getWarnMessageInterval; if (timeOut > 0) { BukkitTask id = sched.runTaskLaterAsynchronously(plugin, new TimeoutTask(plugin, name, player), timeOut); diff --git a/src/main/java/fr/xephi/authme/process/login/AsynchronousLogin.java b/src/main/java/fr/xephi/authme/process/login/AsynchronousLogin.java index b588361c..fe47be51 100644 --- a/src/main/java/fr/xephi/authme/process/login/AsynchronousLogin.java +++ b/src/main/java/fr/xephi/authme/process/login/AsynchronousLogin.java @@ -7,7 +7,6 @@ import fr.xephi.authme.cache.auth.PlayerCache; import fr.xephi.authme.cache.limbo.LimboCache; import fr.xephi.authme.datasource.DataSource; import fr.xephi.authme.events.AuthMeAsyncPreLoginEvent; -import fr.xephi.authme.listener.AuthMePlayerListener; import fr.xephi.authme.permission.PlayerPermission; import fr.xephi.authme.security.PasswordSecurity; import fr.xephi.authme.security.RandomString; @@ -204,9 +203,6 @@ public class AsynchronousLogin { @Override public void run() { - if (AuthMePlayerListener.gameMode != null && AuthMePlayerListener.gameMode.containsKey(name)) { - player.setGameMode(AuthMePlayerListener.gameMode.get(name)); - } player.kickPlayer(m.retrieveSingle(MessageKey.WRONG_PASSWORD)); } }); diff --git a/src/main/java/fr/xephi/authme/process/login/ProcessSyncronousPlayerLogin.java b/src/main/java/fr/xephi/authme/process/login/ProcessSyncronousPlayerLogin.java index 73f53fb6..48831fb7 100644 --- a/src/main/java/fr/xephi/authme/process/login/ProcessSyncronousPlayerLogin.java +++ b/src/main/java/fr/xephi/authme/process/login/ProcessSyncronousPlayerLogin.java @@ -67,16 +67,6 @@ public class ProcessSyncronousPlayerLogin implements Runnable { player.setOp(limbo.getOperator()); } - protected void restoreFlyghtState() { - if (Settings.isForceSurvivalModeEnabled) { - player.setAllowFlight(false); - player.setFlying(false); - return; - } - player.setAllowFlight(limbo.isFlying()); - player.setFlying(limbo.isFlying()); - } - protected void packQuitLocation() { Utils.packCoords(auth.getQuitLocX(), auth.getQuitLocY(), auth.getQuitLocZ(), auth.getWorld(), player); } @@ -160,13 +150,6 @@ public class ProcessSyncronousPlayerLogin implements Runnable { } } - if (Settings.isForceSurvivalModeEnabled && Settings.forceOnlyAfterLogin) { - Utils.forceGM(player); - } else { - player.setGameMode(limbo.getGameMode()); - } - - restoreFlyghtState(); if (Settings.protectInventoryBeforeLogInEnabled) { restoreInventory(); } diff --git a/src/main/java/fr/xephi/authme/process/logout/ProcessSyncronousPlayerLogout.java b/src/main/java/fr/xephi/authme/process/logout/ProcessSyncronousPlayerLogout.java index 4fd6a9ca..236c8cd4 100644 --- a/src/main/java/fr/xephi/authme/process/logout/ProcessSyncronousPlayerLogout.java +++ b/src/main/java/fr/xephi/authme/process/logout/ProcessSyncronousPlayerLogout.java @@ -77,10 +77,6 @@ public class ProcessSyncronousPlayerLogout implements Runnable { if (Settings.applyBlindEffect) player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, Settings.getRegistrationTimeout * 20, 2)); player.setOp(false); - if (!Settings.isMovementAllowed) { - player.setAllowFlight(true); - player.setFlying(true); - } // Player is now logout... Time to fire event ! Bukkit.getServer().getPluginManager().callEvent(new LogoutEvent(player)); if (Settings.bungee) diff --git a/src/main/java/fr/xephi/authme/process/quit/AsynchronousQuit.java b/src/main/java/fr/xephi/authme/process/quit/AsynchronousQuit.java index 0cd0397b..42c633af 100644 --- a/src/main/java/fr/xephi/authme/process/quit/AsynchronousQuit.java +++ b/src/main/java/fr/xephi/authme/process/quit/AsynchronousQuit.java @@ -6,7 +6,6 @@ import fr.xephi.authme.cache.auth.PlayerCache; import fr.xephi.authme.cache.limbo.LimboCache; import fr.xephi.authme.cache.limbo.LimboPlayer; import fr.xephi.authme.datasource.DataSource; -import fr.xephi.authme.listener.AuthMePlayerListener; import fr.xephi.authme.settings.Settings; import fr.xephi.authme.util.Utils; import org.bukkit.Bukkit; @@ -23,7 +22,6 @@ public class AsynchronousQuit { protected final Player player; private final String name; private boolean isOp = false; - private boolean isFlying = false; private boolean needToChange = false; private boolean isKick = false; @@ -69,7 +67,6 @@ public class AsynchronousQuit { Utils.addNormal(player, limbo.getGroup()); needToChange = true; isOp = limbo.getOperator(); - isFlying = limbo.isFlying(); if (limbo.getTimeoutTaskId() != null) limbo.getTimeoutTaskId().cancel(); if (limbo.getMessageTaskId() != null) @@ -96,7 +93,6 @@ public class AsynchronousQuit { database.setUnlogged(name); } - AuthMePlayerListener.gameMode.remove(name); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new ProcessSyncronousPlayerQuit(plugin, player, isOp, isFlying, needToChange)); + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new ProcessSyncronousPlayerQuit(plugin, player, isOp, needToChange)); } } diff --git a/src/main/java/fr/xephi/authme/process/quit/ProcessSyncronousPlayerQuit.java b/src/main/java/fr/xephi/authme/process/quit/ProcessSyncronousPlayerQuit.java index 5b31b2ff..3193ac49 100644 --- a/src/main/java/fr/xephi/authme/process/quit/ProcessSyncronousPlayerQuit.java +++ b/src/main/java/fr/xephi/authme/process/quit/ProcessSyncronousPlayerQuit.java @@ -1,8 +1,6 @@ package fr.xephi.authme.process.quit; import fr.xephi.authme.AuthMe; -import fr.xephi.authme.settings.Settings; -import org.bukkit.GameMode; import org.bukkit.entity.Player; /** @@ -12,7 +10,6 @@ public class ProcessSyncronousPlayerQuit implements Runnable { protected final AuthMe plugin; protected final Player player; protected final boolean isOp; - protected final boolean isFlying; protected final boolean needToChange; /** @@ -21,16 +18,13 @@ public class ProcessSyncronousPlayerQuit implements Runnable { * @param plugin AuthMe * @param player Player * @param isOp boolean - * @param isFlying boolean * @param needToChange boolean */ public ProcessSyncronousPlayerQuit(AuthMe plugin, Player player - , boolean isOp, boolean isFlying - , boolean needToChange) { + , boolean isOp, boolean needToChange) { this.plugin = plugin; this.player = player; this.isOp = isOp; - this.isFlying = isFlying; this.needToChange = needToChange; } @@ -41,13 +35,8 @@ public class ProcessSyncronousPlayerQuit implements Runnable { */ @Override public void run() { - if (needToChange) { player.setOp(isOp); - if (player.getGameMode() != GameMode.CREATIVE && !Settings.isMovementAllowed) { - player.setAllowFlight(isFlying); - player.setFlying(isFlying); - } } try { player.getVehicle().eject(); diff --git a/src/main/java/fr/xephi/authme/process/register/ProcessSyncPasswordRegister.java b/src/main/java/fr/xephi/authme/process/register/ProcessSyncPasswordRegister.java index 708bd1ee..2793047f 100644 --- a/src/main/java/fr/xephi/authme/process/register/ProcessSyncPasswordRegister.java +++ b/src/main/java/fr/xephi/authme/process/register/ProcessSyncPasswordRegister.java @@ -15,7 +15,6 @@ import fr.xephi.authme.task.MessageTask; import fr.xephi.authme.task.TimeoutTask; import fr.xephi.authme.util.Utils; import org.bukkit.Bukkit; -import org.bukkit.GameMode; import org.bukkit.entity.Player; import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitScheduler; @@ -96,7 +95,6 @@ public class ProcessSyncPasswordRegister implements Runnable { public void run() { LimboPlayer limbo = LimboCache.getInstance().getLimboPlayer(name); if (limbo != null) { - player.setGameMode(limbo.getGameMode()); Utils.teleportToSpawn(player); if (Settings.protectInventoryBeforeLogInEnabled && plugin.inventoryProtector != null) { @@ -119,10 +117,6 @@ public class ProcessSyncPasswordRegister implements Runnable { if (!Settings.getmailAccount.isEmpty()) { m.send(player, MessageKey.ADD_EMAIL_MESSAGE); } - if (player.getGameMode() != GameMode.CREATIVE && !Settings.isMovementAllowed) { - player.setAllowFlight(false); - player.setFlying(false); - } if (Settings.applyBlindEffect) { player.removePotionEffect(PotionEffectType.BLINDNESS); diff --git a/src/main/java/fr/xephi/authme/settings/Settings.java b/src/main/java/fr/xephi/authme/settings/Settings.java index 98d5b38c..e7f450c0 100644 --- a/src/main/java/fr/xephi/authme/settings/Settings.java +++ b/src/main/java/fr/xephi/authme/settings/Settings.java @@ -65,15 +65,15 @@ public final class Settings { isSessionsEnabled, isAllowRestrictedIp, isMovementAllowed, isKickNonRegisteredEnabled, isForceSingleSessionEnabled, isForceSpawnLocOnJoinEnabled, - isSaveQuitLocationEnabled, isForceSurvivalModeEnabled, - isResetInventoryIfCreative, isCachingEnabled, + isSaveQuitLocationEnabled, + isCachingEnabled, isKickOnWrongPasswordEnabled, enablePasswordConfirmation, protectInventoryBeforeLogInEnabled, isBackupActivated, isBackupOnStart, isBackupOnStop, isStopEnabled, reloadSupport, rakamakUseIp, noConsoleSpam, removePassword, displayOtherAccounts, useCaptcha, emailRegistration, multiverse, bungee, banUnsafeIp, doubleEmailCheck, sessionExpireOnIpChange, - disableSocialSpy, forceOnlyAfterLogin, useEssentialsMotd, usePurge, + disableSocialSpy, useEssentialsMotd, usePurge, purgePlayerDat, purgeEssentialsFile, supportOldPassword, purgeLimitedCreative, purgeAntiXray, purgePermissions, enableProtection, enableAntiBot, recallEmail, useWelcomeMessage, @@ -168,8 +168,6 @@ public final class Settings { isForceSingleSessionEnabled = configFile.getBoolean("settings.restrictions.ForceSingleSession", true); isForceSpawnLocOnJoinEnabled = configFile.getBoolean("settings.restrictions.ForceSpawnLocOnJoinEnabled", false); isSaveQuitLocationEnabled = configFile.getBoolean("settings.restrictions.SaveQuitLocation", false); - isForceSurvivalModeEnabled = configFile.getBoolean("settings.GameMode.ForceSurvivalMode", false); - isResetInventoryIfCreative = configFile.getBoolean("settings.GameMode.ResetInventoryIfCreative", false); getmaxRegPerIp = configFile.getInt("settings.restrictions.maxRegPerIp", 1); getPasswordHash = getPasswordHash(); getUnloggedinGroup = configFile.getString("settings.security.unLoggedinGroup", "unLoggedInGroup"); @@ -255,7 +253,6 @@ public final class Settings { useLogging = configFile.getBoolean("Security.console.logConsole", false); disableSocialSpy = configFile.getBoolean("Hooks.disableSocialSpy", true); bCryptLog2Rounds = configFile.getInt("ExternalBoardOptions.bCryptLog2Round", 10); - forceOnlyAfterLogin = configFile.getBoolean("settings.GameMode.ForceOnlyAfterLogin", false); useEssentialsMotd = configFile.getBoolean("Hooks.useEssentialsMotd", false); usePurge = configFile.getBoolean("Purge.useAutoPurge", false); purgeDelay = configFile.getInt("Purge.daysBeforeRemovePlayer", 60); diff --git a/src/main/java/fr/xephi/authme/util/Utils.java b/src/main/java/fr/xephi/authme/util/Utils.java index c96f47c6..66e41fa7 100644 --- a/src/main/java/fr/xephi/authme/util/Utils.java +++ b/src/main/java/fr/xephi/authme/util/Utils.java @@ -7,10 +7,9 @@ import fr.xephi.authme.cache.limbo.LimboCache; import fr.xephi.authme.cache.limbo.LimboPlayer; import fr.xephi.authme.events.AuthMeTeleportEvent; import fr.xephi.authme.permission.PermissionsManager; -import fr.xephi.authme.permission.PlayerPermission; import fr.xephi.authme.settings.Settings; + import org.bukkit.Bukkit; -import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.entity.Player; @@ -195,17 +194,6 @@ public final class Utils { }); } - /** - * Force the game mode of a player. - * - * @param player the player to modify. - */ - public static void forceGM(Player player) { - if (!plugin.getPermissionsManager().hasPermission(player, PlayerPermission.BYPASS_FORCE_SURVIVAL)) { - player.setGameMode(GameMode.SURVIVAL); - } - } - /** * Safe way to retrieve the list of online players from the server. Depending on the * implementation of the server, either an array of {@link Player} instances is being returned, diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 966039ff..d00e4b51 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -152,14 +152,6 @@ settings: noTeleport: false # Regex syntax for allowed Chars in passwords. allowedPasswordCharacters: '[\x21-\x7E]*' - GameMode: - # ForceSurvivalMode to player when join ? - ForceSurvivalMode: false - # if player join with CreativeMode and ForceSurvivalMode: true - # inventory will be wipped - ResetInventoryIfCreative: false - # Do we need to force the survival mode ONLY after /login process? - ForceOnlyAfterLogin: false security: # minimum Length of password minPasswordLength: 5 diff --git a/src/test/java/fr/xephi/authme/util/UtilsTest.java b/src/test/java/fr/xephi/authme/util/UtilsTest.java index 2b9df6ad..40769ae5 100644 --- a/src/test/java/fr/xephi/authme/util/UtilsTest.java +++ b/src/test/java/fr/xephi/authme/util/UtilsTest.java @@ -3,9 +3,8 @@ package fr.xephi.authme.util; import fr.xephi.authme.AuthMe; import fr.xephi.authme.ReflectionTestUtils; import fr.xephi.authme.permission.PermissionsManager; -import fr.xephi.authme.permission.PlayerPermission; import fr.xephi.authme.settings.Settings; -import org.bukkit.GameMode; + import org.bukkit.entity.Player; import org.junit.Before; import org.junit.BeforeClass; @@ -50,35 +49,6 @@ public class UtilsTest { when(authMeMock.getPermissionsManager()).thenReturn(permissionsManagerMock); } - @Test - public void shouldForceSurvivalGameMode() { - // given - Player player = mock(Player.class); - given(permissionsManagerMock.hasPermission(player, PlayerPermission.BYPASS_FORCE_SURVIVAL)).willReturn(false); - - // when - Utils.forceGM(player); - - // then - verify(authMeMock).getPermissionsManager(); - verify(player).setGameMode(GameMode.SURVIVAL); - } - - @Test - public void shouldNotForceGameModeForUserWithBypassPermission() { - // given - Player player = mock(Player.class); - given(permissionsManagerMock.hasPermission(player, PlayerPermission.BYPASS_FORCE_SURVIVAL)).willReturn(true); - - // when - Utils.forceGM(player); - - // then - verify(authMeMock).getPermissionsManager(); - verify(permissionsManagerMock).hasPermission(player, PlayerPermission.BYPASS_FORCE_SURVIVAL); - verify(player, never()).setGameMode(any(GameMode.class)); - } - @Test public void shouldNotAddToNormalGroupIfPermissionsAreDisabled() { // given From c50741e1ca06ce29a6a618823d76660e92438f5d Mon Sep 17 00:00:00 2001 From: ljacqu Date: Wed, 23 Dec 2015 15:28:35 +0100 Subject: [PATCH 09/10] #375 Remove Ignore annotation on password hash check test --- .../authme/security/crypts/AbstractEncryptionMethodTest.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/test/java/fr/xephi/authme/security/crypts/AbstractEncryptionMethodTest.java b/src/test/java/fr/xephi/authme/security/crypts/AbstractEncryptionMethodTest.java index 0934c749..8365f01b 100644 --- a/src/test/java/fr/xephi/authme/security/crypts/AbstractEncryptionMethodTest.java +++ b/src/test/java/fr/xephi/authme/security/crypts/AbstractEncryptionMethodTest.java @@ -35,8 +35,6 @@ public abstract class AbstractEncryptionMethodTest { } @Test - @Ignore - // TODO #375 Fix and unignore tests public void testGivenPasswords() { for (String password : GIVEN_PASSWORDS) { try { From 0beb937b8fcfef8e1e1b06f42ea65088e403ee5b Mon Sep 17 00:00:00 2001 From: games647 Date: Wed, 23 Dec 2015 16:03:37 +0100 Subject: [PATCH 10/10] Re add force survival gamemode option on join --- .../java/fr/xephi/authme/listener/AuthMePlayerListener.java | 6 ++++++ src/main/java/fr/xephi/authme/settings/Settings.java | 2 +- src/main/resources/config.yml | 3 +++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java b/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java index e994a7c2..3414022a 100644 --- a/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java +++ b/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java @@ -49,6 +49,7 @@ import org.bukkit.event.player.PlayerShearEntityEvent; import java.util.concurrent.ConcurrentHashMap; import static fr.xephi.authme.listener.ListenerService.shouldCancelEvent; +import org.bukkit.GameMode; /** * Listener class for player's events @@ -192,6 +193,11 @@ public class AuthMePlayerListener implements Listener { return; } + if (Settings.isForceSurvivalModeEnabled + && !player.hasPermission(PlayerPermission.BYPASS_FORCE_SURVIVAL.getNode())) { + player.setGameMode(GameMode.SURVIVAL); + } + String name = player.getName().toLowerCase(); String joinMsg = event.getJoinMessage(); diff --git a/src/main/java/fr/xephi/authme/settings/Settings.java b/src/main/java/fr/xephi/authme/settings/Settings.java index e7f450c0..dfebd88f 100644 --- a/src/main/java/fr/xephi/authme/settings/Settings.java +++ b/src/main/java/fr/xephi/authme/settings/Settings.java @@ -65,7 +65,7 @@ public final class Settings { isSessionsEnabled, isAllowRestrictedIp, isMovementAllowed, isKickNonRegisteredEnabled, isForceSingleSessionEnabled, isForceSpawnLocOnJoinEnabled, - isSaveQuitLocationEnabled, + isSaveQuitLocationEnabled, isForceSurvivalModeEnabled, isCachingEnabled, isKickOnWrongPasswordEnabled, enablePasswordConfirmation, protectInventoryBeforeLogInEnabled, isBackupActivated, diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index d00e4b51..8959f33b 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -152,6 +152,9 @@ settings: noTeleport: false # Regex syntax for allowed Chars in passwords. allowedPasswordCharacters: '[\x21-\x7E]*' + GameMode: + # ForceSurvivalMode to player when join ? + ForceSurvivalMode: false security: # minimum Length of password minPasswordLength: 5