From 483c9219a074c02831a586c726a234dc96a37605 Mon Sep 17 00:00:00 2001 From: Xephi59 Date: Wed, 10 Jun 2015 23:28:17 +0200 Subject: [PATCH 1/8] Fix https://github.com/Xephi/AuthMeReloaded/issues/53 --- .../authme/listener/AuthMePlayerListener.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java b/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java index 73115a9d8..dea0d4c46 100644 --- a/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java +++ b/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java @@ -29,6 +29,7 @@ import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerKickEvent; +import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerPickupItemEvent; import org.bukkit.event.player.PlayerQuitEvent; @@ -565,6 +566,43 @@ public class AuthMePlayerListener implements Listener { } }, 300); } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onPlayerLogin(PlayerLoginEvent event) + { + if (event.getPlayer() == null) + return; + + Player player = event.getPlayer(); + String name = player.getName(); + String regex = Settings.getNickRegex; + try { + if (!player.getName().matches(regex) || name.equals("Player")) { + try { + event.setKickMessage(m.send("regex")[0].replace("REG_EX", regex)); + event.setResult(PlayerLoginEvent.Result.KICK_OTHER); + } catch (Exception exc) { + event.setKickMessage("allowed char : " + regex); + event.setResult(PlayerLoginEvent.Result.KICK_OTHER); + } + return; + } + } catch (PatternSyntaxException pse) { + if (regex == null || regex.isEmpty()) { + event.setKickMessage("Your nickname do not match"); + event.setResult(PlayerLoginEvent.Result.KICK_OTHER); + return; + } + try { + event.setKickMessage(m.send("regex")[0].replace("REG_EX", regex)); + event.setResult(PlayerLoginEvent.Result.KICK_OTHER); + } catch (Exception exc) { + event.setKickMessage("allowed char : " + regex); + event.setResult(PlayerLoginEvent.Result.KICK_OTHER); + } + return; + } + } @EventHandler(priority = EventPriority.HIGHEST) public void onPlayerJoin(PlayerJoinEvent event) { From 5168a5d9e9b3392f1589c0acfa20ab2cad5b2c3e Mon Sep 17 00:00:00 2001 From: Xephi59 Date: Wed, 10 Jun 2015 23:59:09 +0200 Subject: [PATCH 2/8] Fix some problem with countries lists --- .../authme/listener/AuthMePlayerListener.java | 18 +++++++++++++++++- 1 file changed, 17 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 dea0d4c46..b79a03292 100644 --- a/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java +++ b/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java @@ -401,7 +401,7 @@ public class AuthMePlayerListener implements Listener { return; } - if (!Settings.countriesBlacklist.isEmpty()) { + if (Settings.enablePasspartu && !Settings.countriesBlacklist.isEmpty()) { String code = plugin.getCountryCode(event.getAddress().getHostAddress()); if (((code == null) || (Settings.countriesBlacklist.contains(code) && !API.isRegistered(name))) && !plugin.authmePermissible(player, "authme.bypassantibot")) { event.setKickMessage(m.send("country_banned")[0]); @@ -576,6 +576,22 @@ public class AuthMePlayerListener implements Listener { Player player = event.getPlayer(); String name = player.getName(); String regex = Settings.getNickRegex; + if (Settings.enableProtection && !Settings.countriesBlacklist.isEmpty()) { + String code = plugin.getCountryCode(event.getAddress().getHostAddress()); + if (((code == null) || (Settings.countriesBlacklist.contains(code) && !API.isRegistered(name))) && !plugin.authmePermissible(player, "authme.bypassantibot")) { + event.setKickMessage(m.send("country_banned")[0]); + event.setResult(PlayerLoginEvent.Result.KICK_OTHER); + return; + } + } + if (Settings.enableProtection && !Settings.countries.isEmpty()) { + String code = plugin.getCountryCode(event.getAddress().getHostAddress()); + if (((code == null) || (!Settings.countries.contains(code) && !API.isRegistered(name))) && !plugin.authmePermissible(player, "authme.bypassantibot")) { + event.setKickMessage(m.send("country_banned")[0]); + event.setResult(PlayerLoginEvent.Result.KICK_OTHER); + return; + } + } try { if (!player.getName().matches(regex) || name.equals("Player")) { try { From 4bb9dc53f1aa59a03851bcb58b23e654261de0b5 Mon Sep 17 00:00:00 2001 From: Xephi59 Date: Thu, 11 Jun 2015 00:22:59 +0200 Subject: [PATCH 3/8] Fix inventory growth --- .../xephi/authme/cache/backup/FileCache.java | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/main/java/fr/xephi/authme/cache/backup/FileCache.java b/src/main/java/fr/xephi/authme/cache/backup/FileCache.java index 429b9fcf3..be8eef292 100644 --- a/src/main/java/fr/xephi/authme/cache/backup/FileCache.java +++ b/src/main/java/fr/xephi/authme/cache/backup/FileCache.java @@ -3,6 +3,7 @@ package fr.xephi.authme.cache.backup; import java.io.File; import java.io.FileWriter; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; import java.util.Scanner; import java.util.UUID; @@ -51,7 +52,7 @@ public class FileCache { File file = new File(plugin.getDataFolder() + File.separator + "cache" + File.separator + path + File.separator + "playerdatas.cache"); if (!file.getParentFile().exists()) - file.getParentFile().mkdir(); + file.getParentFile().mkdirs(); if (file.exists()) { return; } @@ -68,7 +69,7 @@ public class FileCache { file = new File(plugin.getDataFolder() + File.separator + "cache" + File.separator + path + File.separator + "inventory"); - file.mkdir(); + file.mkdirs(); ItemStack[] inv = playerData.getInventory(); for (int i = 0; i < inv.length; i++) { ItemStack item = inv[i]; @@ -108,14 +109,20 @@ public class FileCache { if (Settings.customAttributes) { try { Attributes attributes = new Attributes(item); - if (attributes != null) - while (attributes.values().iterator().hasNext()) { - Attribute a = attributes.values().iterator().next(); + if (attributes != null) { + Iterator iter = attributes.values().iterator(); + Attribute a = null; + while (iter.hasNext()) { + Attribute b = iter.next(); + if (a != null && a == b) + break; + a = b; if (a != null) { if (a.getName() != null && a.getAttributeType() != null && a.getOperation() != null && a.getUUID() != null) writer.write("attribute=" + a.getName() + ";" + a.getAttributeType().getMinecraftId() + ";" + a.getAmount() + ";" + a.getOperation().getId() + ";" + a.getUUID().toString()); } } + } } catch (Exception e) { } catch (Error e) { } @@ -128,8 +135,8 @@ public class FileCache { file = new File(plugin.getDataFolder() + File.separator + "cache" + File.separator + path + File.separator + "armours"); if (!file.getParentFile().exists()) - file.getParentFile().mkdir(); - file.mkdir(); + file.getParentFile().mkdirs(); + file.mkdirs(); ItemStack[] armors = playerData.getArmour(); for (int i = 0; i < armors.length; i++) { @@ -393,8 +400,7 @@ public class FileCache { line = line.substring(8); item.addEnchantment(Enchantment.getByName(line.split(":")[0]), Integer.parseInt(line.split(":")[1])); } - if (Settings.customAttributes) - { + if (Settings.customAttributes) { if (line.startsWith("attribute=")) { if (attributes == null) attributes = new Attributes(item); @@ -468,8 +474,7 @@ public class FileCache { line = line.substring(8); item.addEnchantment(Enchantment.getByName(line.split(":")[0]), Integer.parseInt(line.split(":")[1])); } - if (Settings.customAttributes) - { + if (Settings.customAttributes) { if (line.startsWith("attribute=")) { if (attributes == null) attributes = new Attributes(item); From a1c09aecfcb384387010812c0a6848f1739fe3d9 Mon Sep 17 00:00:00 2001 From: Xephi59 Date: Thu, 11 Jun 2015 00:55:46 +0200 Subject: [PATCH 4/8] Add a better check to cancel a non existing task... #AutoInHacks T.T --- .../fr/xephi/authme/process/login/AsyncronousLogin.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/fr/xephi/authme/process/login/AsyncronousLogin.java b/src/main/java/fr/xephi/authme/process/login/AsyncronousLogin.java index 4842dd057..a4a91e96c 100644 --- a/src/main/java/fr/xephi/authme/process/login/AsyncronousLogin.java +++ b/src/main/java/fr/xephi/authme/process/login/AsyncronousLogin.java @@ -169,8 +169,10 @@ public class AsyncronousLogin { // processed in other order. ProcessSyncronousPlayerLogin syncronousPlayerLogin = new ProcessSyncronousPlayerLogin(player, plugin, database); if (syncronousPlayerLogin.getLimbo() != null) { - syncronousPlayerLogin.getLimbo().getTimeoutTaskId().cancel(); - syncronousPlayerLogin.getLimbo().getMessageTaskId().cancel(); + if (syncronousPlayerLogin.getLimbo().getTimeoutTaskId() != null) + syncronousPlayerLogin.getLimbo().getTimeoutTaskId().cancel(); + if (syncronousPlayerLogin.getLimbo().getMessageTaskId() != null) + syncronousPlayerLogin.getLimbo().getMessageTaskId().cancel(); } Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, syncronousPlayerLogin); } else if (player.isOnline()) { From aa957cc7c983a4b48cc4dbb07b9971a53dace27b Mon Sep 17 00:00:00 2001 From: Xephi59 Date: Thu, 11 Jun 2015 01:05:44 +0200 Subject: [PATCH 5/8] Fix Movement problem --- .../xephi/authme/listener/AuthMePlayerListener.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java b/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java index b79a03292..e43ea469e 100644 --- a/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java +++ b/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java @@ -354,6 +354,12 @@ public class AuthMePlayerListener implements Listener { return; } + if (!data.isAuthAvailable(name)) { + if (!Settings.isForcedRegistrationEnabled) { + return; + } + } + if (!Settings.isForcedRegistrationEnabled) { return; } @@ -566,13 +572,12 @@ public class AuthMePlayerListener implements Listener { } }, 300); } - + @EventHandler(priority = EventPriority.HIGHEST) - public void onPlayerLogin(PlayerLoginEvent event) - { + public void onPlayerLogin(PlayerLoginEvent event) { if (event.getPlayer() == null) return; - + Player player = event.getPlayer(); String name = player.getName(); String regex = Settings.getNickRegex; From de2961b75418634c08ccb9f8749e4f31498a8c2c Mon Sep 17 00:00:00 2001 From: Xephi59 Date: Thu, 11 Jun 2015 01:13:53 +0200 Subject: [PATCH 6/8] Check password strengh in ChangePasswordCommand too --- .../java/fr/xephi/authme/commands/ChangePasswordCommand.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/fr/xephi/authme/commands/ChangePasswordCommand.java b/src/main/java/fr/xephi/authme/commands/ChangePasswordCommand.java index 24fc46f81..7ca904d15 100644 --- a/src/main/java/fr/xephi/authme/commands/ChangePasswordCommand.java +++ b/src/main/java/fr/xephi/authme/commands/ChangePasswordCommand.java @@ -53,6 +53,11 @@ public class ChangePasswordCommand implements CommandExecutor { return true; } + String lowpass = args[1].toLowerCase(); + if ((lowpass.contains("delete") || lowpass.contains("where") || lowpass.contains("insert") || lowpass.contains("modify") || lowpass.contains("from") || lowpass.contains("select") || lowpass.contains(";") || lowpass.contains("null")) || !lowpass.matches(Settings.getPassRegex)) { + m.send(player, "password_error"); + return true; + } try { String hashnew = PasswordSecurity.getHash(Settings.getPasswordHash, args[1], name); From bfc2fbd5462717620c0db426bcbe3e717df9262c Mon Sep 17 00:00:00 2001 From: Xephi59 Date: Thu, 11 Jun 2015 01:16:58 +0200 Subject: [PATCH 7/8] Next for https://github.com/Xephi/AuthMeReloaded/issues/54 --- .../xephi/authme/listener/AuthMePlayerListener.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java b/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java index e43ea469e..1d2776f5b 100644 --- a/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java +++ b/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java @@ -888,8 +888,10 @@ public class AuthMePlayerListener implements Listener { player.setAllowFlight(limbo.isFlying()); player.setFlying(limbo.isFlying()); } - limbo.getTimeoutTaskId().cancel(); - limbo.getMessageTaskId().cancel(); + if (limbo.getTimeoutTaskId() != null) + limbo.getTimeoutTaskId().cancel(); + if (limbo.getMessageTaskId() != null) + limbo.getMessageTaskId().cancel(); LimboCache.getInstance().deleteLimboPlayer(name); if (playerBackup.doesCacheExist(player)) { playerBackup.removeCache(player); @@ -975,8 +977,10 @@ public class AuthMePlayerListener implements Listener { player.setAllowFlight(limbo.isFlying()); player.setFlying(limbo.isFlying()); } - limbo.getTimeoutTaskId().cancel(); - limbo.getMessageTaskId().cancel(); + if (limbo.getTimeoutTaskId() != null) + limbo.getTimeoutTaskId().cancel(); + if (limbo.getMessageTaskId() != null) + limbo.getMessageTaskId().cancel(); LimboCache.getInstance().deleteLimboPlayer(name); if (this.playerBackup.doesCacheExist(player)) { this.playerBackup.removeCache(player); From 0691236826144b0043ab6d424b79bed2bba7ce5f Mon Sep 17 00:00:00 2001 From: Xephi59 Date: Thu, 11 Jun 2015 01:41:22 +0200 Subject: [PATCH 8/8] Correctly call these methods Async ! --- .../java/fr/xephi/authme/process/Management.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/main/java/fr/xephi/authme/process/Management.java b/src/main/java/fr/xephi/authme/process/Management.java index bdcd1de5a..4207b5655 100644 --- a/src/main/java/fr/xephi/authme/process/Management.java +++ b/src/main/java/fr/xephi/authme/process/Management.java @@ -1,5 +1,6 @@ package fr.xephi.authme.process; +import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.plugin.PluginManager; @@ -34,11 +35,21 @@ public class Management extends Thread { public void performLogin(final Player player, final String password, final boolean forceLogin) { - new AsyncronousLogin(player, password, forceLogin, plugin, database).process(); + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable(){ + @Override + public void run() { + new AsyncronousLogin(player, password, forceLogin, plugin, database).process(); + } + }); } public void performRegister(final Player player, final String password, final String email) { - new AsyncronousRegister(player, password, email, plugin, database).process(); + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable(){ + @Override + public void run() { + new AsyncronousRegister(player, password, email, plugin, database).process(); + } + }); } }