From 73c97a39e63d5599855901c6d33bee5f0f40bb27 Mon Sep 17 00:00:00 2001 From: Xephi Date: Sat, 13 Apr 2013 01:27:23 +0200 Subject: [PATCH] Update 2.7.14 * Add Slot Reservation system ( permission : authme.vip ) * Add ConsoleLogging in authme.log file ( disabled by default, check config ) * Save the main thread by different database access and saves * Perform login more quickly * CleanUp the code entirely * BungeeCord should be fixed :'( * Fix the Flat To MySQL converter * Teleport players correctly --- lib/BungeeCord.jar | Bin 8755457 -> 8755653 bytes pom.xml | 2 +- .../java/uk/org/whoami/authme/AuthMe.java | 83 +- .../uk/org/whoami/authme/ConsoleLogger.java | 52 +- .../java/uk/org/whoami/authme/Management.java | 741 ++++++++++-------- .../uk/org/whoami/authme/PerformBackup.java | 40 +- .../uk/org/whoami/authme/SendMailSSL.java | 29 +- src/main/java/uk/org/whoami/authme/Utils.java | 116 +-- .../java/uk/org/whoami/authme/api/API.java | 59 +- .../whoami/authme/cache/auth/PlayerAuth.java | 41 +- .../whoami/authme/cache/auth/PlayerCache.java | 1 + .../authme/cache/backup/DataFileCache.java | 20 +- .../whoami/authme/cache/backup/FileCache.java | 102 +-- .../whoami/authme/cache/limbo/LimboCache.java | 18 +- .../authme/cache/limbo/LimboPlayer.java | 11 +- .../whoami/authme/commands/AdminCommand.java | 61 +- .../authme/commands/CaptchaCommand.java | 23 +- .../commands/ChangePasswordCommand.java | 3 +- .../whoami/authme/commands/EmailCommand.java | 31 +- .../whoami/authme/commands/LoginCommand.java | 16 +- .../whoami/authme/commands/LogoutCommand.java | 11 +- .../authme/commands/PasspartuCommand.java | 10 +- .../authme/commands/RecoveryCommand.java | 24 - .../authme/commands/RegisterCommand.java | 55 +- .../authme/commands/UnregisterCommand.java | 8 +- .../whoami/authme/converter/FlatToSql.java | 21 +- .../authme/converter/RakamakConverter.java | 27 +- .../whoami/authme/converter/xAuthToFlat.java | 15 +- .../authme/datasource/CacheDataSource.java | 26 +- .../whoami/authme/datasource/DataSource.java | 20 +- .../authme/datasource/FileDataSource.java | 73 +- .../authme/datasource/MySQLDataSource.java | 39 +- .../authme/datasource/SqliteDataSource.java | 74 +- .../org/whoami/authme/debug/CardboardBox.java | 2 - .../authme/debug/CardboardEnchantment.java | 3 +- .../authme/events/AuthMeTeleportEvent.java | 8 +- .../org/whoami/authme/events/CustomEvent.java | 15 +- .../org/whoami/authme/events/LoginEvent.java | 12 +- .../authme/events/ProtectInventoryEvent.java | 15 +- .../authme/events/RegisterTeleportEvent.java | 7 +- .../authme/events/ResetInventoryEvent.java | 13 +- .../authme/events/RestoreInventoryEvent.java | 19 +- .../whoami/authme/events/SessionEvent.java | 12 +- .../authme/events/SpawnTeleportEvent.java | 8 +- .../authme/events/StoreInventoryEvent.java | 20 +- .../authme/events/UncancellableEvent.java | 12 +- .../whoami/authme/filter/ConsoleFilter.java | 10 +- .../org/whoami/authme/gui/CustomButton.java | 5 +- .../authme/gui/screens/LoginScreen.java | 32 +- .../authme/gui/screens/RegisterScreen.java | 48 -- .../authme/listener/AuthMeBlockListener.java | 11 +- .../listener/AuthMeChestShopListener.java | 15 +- .../authme/listener/AuthMeEntityListener.java | 26 +- .../authme/listener/AuthMePlayerListener.java | 238 +++--- .../authme/listener/AuthMeSpoutListener.java | 19 +- .../plugin/manager/CitizensCommunicator.java | 4 +- .../plugin/manager/CombatTagComunicator.java | 48 +- .../authme/security/PasswordSecurity.java | 53 +- .../uk/org/whoami/authme/security/PhpBB.java | 39 +- .../whoami/authme/security/RandomString.java | 12 +- .../org/whoami/authme/security/Whirlpool.java | 42 +- .../authme/settings/CustomConfiguration.java | 11 +- .../org/whoami/authme/settings/Messages.java | 11 +- .../whoami/authme/settings/PlayersLogs.java | 11 +- .../org/whoami/authme/settings/Settings.java | 139 +--- .../uk/org/whoami/authme/settings/Spawn.java | 14 +- .../org/whoami/authme/settings/SpoutCfg.java | 12 +- .../org/whoami/authme/task/MessageTask.java | 3 - .../org/whoami/authme/task/TimeoutTask.java | 2 - src/main/resources/config.yml | 1 + src/main/resources/plugin.yml | 5 +- 71 files changed, 1225 insertions(+), 1584 deletions(-) delete mode 100644 src/main/java/uk/org/whoami/authme/commands/RecoveryCommand.java delete mode 100644 src/main/java/uk/org/whoami/authme/gui/screens/RegisterScreen.java diff --git a/lib/BungeeCord.jar b/lib/BungeeCord.jar index 6e131460d7e8c21f13e4217d0e6174cdb333d72d..6a71d747c004d77c1275a8061bfbffdee40a03ff 100644 GIT binary patch delta 356824 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≈!6eVDYEvhs7vSSSGcfusa|^EV*qTip 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

oD?BCk7u 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�sL__mc$dA;mSrm^=QE(4( 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 qPMAE+GcvOBA*xJ$T*IADYvsWt)cpUQ)mZxg delta 354726 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ɯwV>;CxL;OPkx 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

x>@N-q&c=Xj|+^@owpUdS2F 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%0AZ%k20yRL282r?NUQ?^7hg9bRSq`I;|1 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 diff --git a/pom.xml b/pom.xml index 018ea2e87..d4ab57d49 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,7 @@ - 2.7.13b2 + 2.7.14 org.bukkit diff --git a/src/main/java/uk/org/whoami/authme/AuthMe.java b/src/main/java/uk/org/whoami/authme/AuthMe.java index 7cd12665f..824d9661a 100644 --- a/src/main/java/uk/org/whoami/authme/AuthMe.java +++ b/src/main/java/uk/org/whoami/authme/AuthMe.java @@ -97,28 +97,26 @@ public class AuthMe extends JavaPlugin { public HashMap captcha = new HashMap(); public HashMap cap = new HashMap(); public MultiverseCore mv = null; - + @Override public void onEnable() { instance = this; authme = instance; - + citizens = new CitizensCommunicator(this); settings = new Settings(this); settings.loadConfigOptions(); - + setMessages(Messages.getInstance()); pllog = PlayersLogs.getInstance(); - + server = getServer(); - - + //Set Console Filter if (Settings.removePassword) Bukkit.getLogger().setFilter(new ConsoleFilter()); - - + //Load MailApi File mailFile = new File("lib", "mail.jar"); if (mailFile.exists()) { @@ -127,22 +125,22 @@ public class AuthMe extends JavaPlugin { } else { mail = null; } - + //Check Citizens Version citizensVersion(); - + //Check Combat Tag Version combatTag(); - + //Check Notifications checkNotifications(); - + //Check Multiverse checkMultiverse(); - + //Check ChestShop checkChestShop(); - + /* * Back style on start if avaible */ @@ -151,7 +149,7 @@ public class AuthMe extends JavaPlugin { if(Backup) ConsoleLogger.info("Backup Complete"); else ConsoleLogger.showError("Error while making Backup"); } - + /* * Backend MYSQL - FILE - SQLITE */ @@ -230,11 +228,11 @@ public class AuthMe extends JavaPlugin { if (Settings.isCachingEnabled) { database = new CacheDataSource(this, database); } - + api = new API(this, database); - + management = new Management(database, this); - + PluginManager pm = getServer().getPluginManager(); if (pm.isPluginEnabled("Spout")) { pm.registerEvents(new AuthMeSpoutListener(database), this); @@ -247,8 +245,7 @@ public class AuthMe extends JavaPlugin { pm.registerEvents(new AuthMeChestShopListener(database, this), this); ConsoleLogger.info("Successfully hook with ChestShop!"); } - - + //Find Permissions if(Settings.isPermissionCheckEnabled) { RegisteredServiceProvider permissionProvider = @@ -257,10 +254,11 @@ public class AuthMe extends JavaPlugin { permission = permissionProvider.getProvider(); else { ConsoleLogger.showError("Vault and Permissions plugins is needed for enable AuthMe Reloaded!"); - this.getServer().getPluginManager().disablePlugin(this); + ConsoleLogger.showError("Server Shutdown for Security"); + this.getServer().shutdown(); } } - + this.getCommand("authme").setExecutor(new AdminCommand(this, database)); this.getCommand("register").setExecutor(new RegisterCommand(database, this)); this.getCommand("login").setExecutor(new LoginCommand(this)); @@ -270,11 +268,11 @@ public class AuthMe extends JavaPlugin { this.getCommand("passpartu").setExecutor(new PasspartuCommand(database, this)); this.getCommand("email").setExecutor(new EmailCommand(this, database)); this.getCommand("captcha").setExecutor(new CaptchaCommand(this)); - + if(!Settings.isForceSingleSessionEnabled) { ConsoleLogger.showError("ATTENTION by disabling ForceSingleSession, your server protection is set to low"); } - + if (Settings.reloadSupport) try { if (!new File(getDataFolder() + File.separator + "players.yml").exists()) { @@ -289,13 +287,10 @@ public class AuthMe extends JavaPlugin { } } } catch (NullPointerException ex) { - } - ConsoleLogger.info("Authme " + this.getDescription().getVersion() + " enabled"); } - private void checkChestShop() { if (!Settings.chestshop) { this.ChestShop = 0; @@ -320,16 +315,12 @@ public class AuthMe extends JavaPlugin { ConsoleLogger.showError("Please Update your ChestShop version!"); } } catch (NumberFormatException nfee) { - } - } - } catch (NullPointerException npe) {} catch (NoClassDefFoundError ncdfe) {} catch (ClassCastException cce) {} } - } private void checkMultiverse() { @@ -362,7 +353,6 @@ public class AuthMe extends JavaPlugin { } else { this.notifications = null; } - } private void combatTag() { @@ -395,23 +385,17 @@ public class AuthMe extends JavaPlugin { this.savePlayer(player); } pllog.save(); - + if (database != null) { database.close(); } - //utils = Utils.getInstance(); - - /* - * Back style on start if avaible - */ + if(Settings.isBackupActivated && Settings.isBackupOnStop) { Boolean Backup = new PerformBackup(this).DoBackup(); if(Backup) ConsoleLogger.info("Backup Complete"); else ConsoleLogger.showError("Error while making Backup"); } ConsoleLogger.info("Authme " + this.getDescription().getVersion() + " disabled"); - - } private void onReload() { @@ -421,7 +405,6 @@ public class AuthMe extends JavaPlugin { if (PlayersLogs.players.contains(player.getName())) { String name = player.getName().toLowerCase(); PlayerAuth pAuth = database.getAuth(name); - // if Mysql is unavaible if(pAuth == null) break; PlayerAuth auth = new PlayerAuth(name, pAuth.getHash(), pAuth.getIp(), new Date().getTime()); @@ -435,18 +418,17 @@ public class AuthMe extends JavaPlugin { return; } } - + public static AuthMe getInstance() { return instance; } - + public void savePlayer(Player player) throws IllegalStateException, NullPointerException { try { if ((citizens.isNPC(player, this)) || (Utils.getInstance().isUnrestricted(player)) || (CombatTagComunicator.isNPC(player))) { return; } } catch (Exception e) { } - try { String name = player.getName().toLowerCase(); if ((PlayerCache.getInstance().isAuthenticated(name)) && (!player.isDead()) && @@ -454,7 +436,6 @@ public class AuthMe extends JavaPlugin { PlayerAuth auth = new PlayerAuth(player.getName().toLowerCase(), (int)player.getLocation().getX(), (int)player.getLocation().getY(), (int)player.getLocation().getZ()); this.database.updateQuitLoc(auth); } - if (LimboCache.getInstance().hasLimboPlayer(name)) { LimboPlayer limbo = LimboCache.getInstance().getLimboPlayer(name); @@ -468,14 +449,12 @@ public class AuthMe extends JavaPlugin { player.teleport(limbo.getLoc()); this.utils.addNormal(player, limbo.getGroup()); player.setOp(limbo.getOperator()); - this.plugin.getServer().getScheduler().cancelTask(limbo.getTimeoutTaskId()); LimboCache.getInstance().deleteLimboPlayer(name); if (this.playerBackup.doesCacheExist(name)) { this.playerBackup.removeCache(name); } } - PlayerCache.getInstance().removePlayer(name); player.saveData(); } catch (Exception ex) { @@ -497,7 +476,7 @@ public class AuthMe extends JavaPlugin { public Messages getMessages() { return m; } - + public Player generateKickPlayer(Player[] players) { Player player = null; int i; @@ -509,7 +488,13 @@ public class AuthMe extends JavaPlugin { break; } } + if (player == null) { + for (Player p : this.getServer().getOnlinePlayers()) { + if (p.hasPermission("authme.vip")) + player = p; + } + } return player; } - + } diff --git a/src/main/java/uk/org/whoami/authme/ConsoleLogger.java b/src/main/java/uk/org/whoami/authme/ConsoleLogger.java index 99bfb763f..937998981 100644 --- a/src/main/java/uk/org/whoami/authme/ConsoleLogger.java +++ b/src/main/java/uk/org/whoami/authme/ConsoleLogger.java @@ -16,17 +16,65 @@ package uk.org.whoami.authme; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.text.DateFormat; +import java.util.Calendar; import java.util.logging.Logger; +import org.bukkit.Bukkit; + +import uk.org.whoami.authme.settings.Settings; + public class ConsoleLogger { private static final Logger log = Logger.getLogger("Minecraft"); public static void info(String message) { - log.info("[AuthMe] " + message); + if (AuthMe.getInstance().isEnabled()) { + log.info("[AuthMe] " + message); + if (Settings.useLogging) { + Calendar date = Calendar.getInstance(); + final String actually = "[" + DateFormat.getDateInstance().format(date.getTime()) + ", " + date.get(Calendar.HOUR_OF_DAY) + ":" + date.get(Calendar.MINUTE) + ":" + date.get(Calendar.SECOND) + "] " + message; + Bukkit.getScheduler().runTaskAsynchronously(AuthMe.getInstance(), new Runnable() { + @Override + public void run() { + writeLog(actually); + } + }); + } + } } public static void showError(String message) { - log.severe("[AuthMe] ERROR: " + message); + if (AuthMe.getInstance().isEnabled()) { + log.severe("[AuthMe] ERROR: " + message); + if (Settings.useLogging) { + Calendar date = Calendar.getInstance(); + final String actually = "[" + DateFormat.getDateInstance().format(date.getTime()) + ", " + date.get(Calendar.HOUR_OF_DAY) + ":" + date.get(Calendar.MINUTE) + ":" + date.get(Calendar.SECOND) + "] ERROR : " + message; + Bukkit.getScheduler().runTaskAsynchronously(AuthMe.getInstance(), new Runnable() { + @Override + public void run() { + writeLog(actually); + } + }); + } + } } + + public static void writeLog(String string) { + try { + FileWriter fw = new FileWriter(AuthMe.getInstance().getDataFolder() + File.separator + "authme.log", true); + BufferedWriter w = null; + w = new BufferedWriter(fw); + w.write(string); + w.newLine(); + w.close(); + } catch (IOException e) { + ConsoleLogger.showError(e.getMessage()); + } + } + } diff --git a/src/main/java/uk/org/whoami/authme/Management.java b/src/main/java/uk/org/whoami/authme/Management.java index e4a0f3e58..73543d00c 100644 --- a/src/main/java/uk/org/whoami/authme/Management.java +++ b/src/main/java/uk/org/whoami/authme/Management.java @@ -6,6 +6,7 @@ import java.util.List; import me.muizers.Notifications.Notification; import net.md_5.bungee.BungeeCord; +import net.md_5.bungee.api.connection.ProxiedPlayer; import org.bukkit.Bukkit; import org.bukkit.GameMode; @@ -44,7 +45,7 @@ public class Management { private boolean passpartu = false; public static RandomString rdm = new RandomString(Settings.captchaLength); public PluginManager pm; - + public Management(DataSource database, AuthMe plugin) { this.database = database; this.plugin = plugin; @@ -57,342 +58,423 @@ public class Management { this.plugin = plugin; this.pm = plugin.getServer().getPluginManager(); } - - public String performLogin(Player player, String password) { - - String name = player.getName().toLowerCase(); - String ip = player.getAddress().getAddress().getHostAddress(); - if (Settings.bungee) { - try { - ip = BungeeCord.getInstance().getPlayer(player.getName()).getAddress().getAddress().getHostAddress(); - } catch (NoClassDefFoundError ncdfe) { - ConsoleLogger.showError("Your BungeeCord version is outdated, you need a version with the latest API"); - } - } - World world = player.getWorld(); - Location spawnLoc = world.getSpawnLocation(); - if (plugin.mv != null) { - try { - spawnLoc = plugin.mv.getMVWorldManager().getMVWorld(world).getSpawnLocation(); - } catch (NullPointerException npe) { - } catch (ClassCastException cce) { - } catch (NoClassDefFoundError ncdfe) { - } - } - if (Spawn.getInstance().getLocation() != null) - spawnLoc = Spawn.getInstance().getLocation(); - - if (PlayerCache.getInstance().isAuthenticated(name)) { - return m._("logged_in"); - - } - if (!database.isAuthAvailable(player.getName().toLowerCase())) { - return m._("user_unknown"); - } - - PlayerAuth pAuth = database.getAuth(name); - // if Mysql is unavaible - if(pAuth == null) - return m._("user_unknown"); - - //if columnGroup is set - if(!Settings.getMySQLColumnGroup.isEmpty() && pAuth.getGroupId() == Settings.getNonActivatedGroup) { - return m._("vb_nonActiv"); - } - - String hash = pAuth.getHash(); - String email = pAuth.getEmail(); - + public void performLogin(final Player player, final String password) { + final String name = player.getName().toLowerCase(); - try { - if(!passpartu) { - if (Settings.useCaptcha) { - if(!plugin.captcha.containsKey(name)) { - plugin.captcha.put(name, 1); - } else { - int i = plugin.captcha.get(name) + 1; - plugin.captcha.remove(name); - plugin.captcha.put(name, i); - } - - if(plugin.captcha.containsKey(name) && plugin.captcha.get(name) > Settings.maxLoginTry) { - player.sendMessage(m._("need_captcha")); - plugin.cap.put(name, rdm.nextString()); - return "Type : /captcha " + plugin.cap.get(name); - } else if (plugin.captcha.containsKey(name) && plugin.captcha.get(name) > Settings.maxLoginTry) { - try { - plugin.captcha.remove(name); - plugin.cap.remove(name); - } catch (NullPointerException npe) { - } + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { - } - } - if (PasswordSecurity.comparePasswordWithHash(password, hash, name)) { - PlayerAuth auth = new PlayerAuth(name, hash, ip, new Date().getTime(), email); - - database.updateSession(auth); - PlayerCache.getInstance().addPlayer(auth); - LimboPlayer limbo = LimboCache.getInstance().getLimboPlayer(name); - if (limbo != null) { + @Override + public void run() { + String ip = player.getAddress().getAddress().getHostAddress(); + if (Settings.bungee) { + try { + for (ProxiedPlayer pp : BungeeCord.getInstance().getPlayers()) { + if (pp.getName().toLowerCase() == name) { + ip = pp.getAddress().getAddress().getHostAddress(); + break; + } + } + } catch (NoClassDefFoundError ncdfe) { + } + } + World world = player.getWorld(); + Location spawnLoc = world.getSpawnLocation(); + if (plugin.mv != null) { + try { + spawnLoc = plugin.mv.getMVWorldManager().getMVWorld(world).getSpawnLocation(); + } catch (NullPointerException npe) { + } catch (ClassCastException cce) { + } catch (NoClassDefFoundError ncdfe) { + } + } + if (Spawn.getInstance().getLocation() != null) + spawnLoc = Spawn.getInstance().getLocation(); + if (PlayerCache.getInstance().isAuthenticated(name)) { + player.sendMessage(m._("logged_in")); + return; + } + if (!database.isAuthAvailable(player.getName().toLowerCase())) { + player.sendMessage(m._("user_unknown")); + return; + } + PlayerAuth pAuth = database.getAuth(name); + if(pAuth == null) { + player.sendMessage(m._("user_unknown")); + return; + } + if(!Settings.getMySQLColumnGroup.isEmpty() && pAuth.getGroupId() == Settings.getNonActivatedGroup) { + player.sendMessage(m._("vb_nonActiv")); + return; + } + String hash = pAuth.getHash(); + String email = pAuth.getEmail(); + try { + if(!passpartu) { + if (Settings.useCaptcha) { + if(!plugin.captcha.containsKey(name)) { + plugin.captcha.put(name, 1); + } else { + int i = plugin.captcha.get(name) + 1; + plugin.captcha.remove(name); + plugin.captcha.put(name, i); + } + if(plugin.captcha.containsKey(name) && plugin.captcha.get(name) > Settings.maxLoginTry) { + player.sendMessage(m._("need_captcha")); + plugin.cap.put(name, rdm.nextString()); + player.sendMessage("Type : /captcha " + plugin.cap.get(name)); + return; + } else if (plugin.captcha.containsKey(name) && plugin.captcha.get(name) > Settings.maxLoginTry) { + try { + plugin.captcha.remove(name); + plugin.cap.remove(name); + } catch (NullPointerException npe) { + } + } + } + if (PasswordSecurity.comparePasswordWithHash(password, hash, name)) { + PlayerAuth auth = new PlayerAuth(name, hash, ip, new Date().getTime(), email); + database.updateSession(auth); + PlayerCache.getInstance().addPlayer(auth); + final LimboPlayer limbo = LimboCache.getInstance().getLimboPlayer(name); + PlayerAuth getAuth = database.getAuth(name); + if (limbo != null) { + Bukkit.getScheduler().runTask(plugin, new Runnable() { + @Override + public void run() { + player.setOp(limbo.getOperator()); + } + }); - - player.setOp(limbo.getOperator()); - - this.utils.addNormal(player, limbo.getGroup()); - - - if ((Settings.isTeleportToSpawnEnabled) && (!Settings.isForceSpawnLocOnJoinEnabled && Settings.getForcedWorlds.contains(player.getWorld().getName()))) - { - if ((Settings.isSaveQuitLocationEnabled) && (this.database.getAuth(name).getQuitLocY() != 0)) - { - this.utils.packCoords(this.database.getAuth(name).getQuitLocX(), this.database.getAuth(name).getQuitLocY(), this.database.getAuth(name).getQuitLocZ(), player); - } - else { + utils.addNormal(player, limbo.getGroup()); - AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(player, limbo.getLoc()); - pm.callEvent(tpEvent); - if(!tpEvent.isCancelled()) { - if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).isLoaded()) { - tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load(); - } - player.teleport(tpEvent.getTo()); - } - - } - - } - else if (Settings.isForceSpawnLocOnJoinEnabled && Settings.getForcedWorlds.contains(player.getWorld().getName())) { - SpawnTeleportEvent tpEvent = new SpawnTeleportEvent(player, player.getLocation(), spawnLoc, true); - pm.callEvent(tpEvent); - if(!tpEvent.isCancelled()) { - if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).isLoaded()) { - tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load(); - } - player.teleport(tpEvent.getTo()); - } - } - else if ((Settings.isSaveQuitLocationEnabled) && (this.database.getAuth(name).getQuitLocY() != 0)) - { - this.utils.packCoords(this.database.getAuth(name).getQuitLocX(), this.database.getAuth(name).getQuitLocY(), this.database.getAuth(name).getQuitLocZ(), player); - } - else { - AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(player, limbo.getLoc()); - pm.callEvent(tpEvent); - if(!tpEvent.isCancelled()) { - if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).isLoaded()) { - tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load(); - } - player.teleport(tpEvent.getTo()); - } - } - - - player.setGameMode(GameMode.getByValue(limbo.getGameMode())); - - if (Settings.protectInventoryBeforeLogInEnabled && player.hasPlayedBefore()) { - RestoreInventoryEvent event = new RestoreInventoryEvent(player, limbo.getInventory(), limbo.getArmour()); - Bukkit.getServer().getPluginManager().callEvent(event); - if (!event.isCancelled()) { - API.setPlayerInventory(player, limbo.getInventory(), limbo.getArmour()); - } - } + if ((Settings.isTeleportToSpawnEnabled) && (!Settings.isForceSpawnLocOnJoinEnabled && Settings.getForcedWorlds.contains(player.getWorld().getName()))) + { + if ((Settings.isSaveQuitLocationEnabled) && (getAuth.getQuitLocY() != 0)) + { + utils.packCoords(getAuth.getQuitLocX(), getAuth.getQuitLocY(), getAuth.getQuitLocZ(), player); + } + else { - - player.getServer().getScheduler().cancelTask(limbo.getTimeoutTaskId()); - player.getServer().getScheduler().cancelTask(limbo.getMessageTaskId()); - LimboCache.getInstance().deleteLimboPlayer(name); - if (this.playerCache.doesCacheExist(name)) { - this.playerCache.removeCache(name); - } - - } - - /* - * Little Work Around under Registration Group Switching for admins that - * add Registration thru a web Scripts. - */ - if ( Settings.isPermissionCheckEnabled && AuthMe.permission.playerInGroup(player, Settings.unRegisteredGroup) && !Settings.unRegisteredGroup.isEmpty() ) { - AuthMe.permission.playerRemoveGroup(player.getWorld(), player.getName(), Settings.unRegisteredGroup); - AuthMe.permission.playerAddGroup(player.getWorld(), player.getName(), Settings.getRegisteredGroup); - } - - try { - if (!PlayersLogs.players.contains(player.getName())) - PlayersLogs.players.add(player.getName()); - pllog.save(); - } catch (NullPointerException ex) { - - } - - Bukkit.getServer().getPluginManager().callEvent(new LoginEvent(player, true)); - if (Settings.useCaptcha) { - if(plugin.captcha.containsKey(name)) { - plugin.captcha.remove(name); - } - if(plugin.cap.containsKey(name)) { - plugin.cap.containsKey(name); - } - } - player.sendMessage(m._("login")); - displayOtherAccounts(auth); - if(!Settings.noConsoleSpam) - ConsoleLogger.info(player.getName() + " logged in!"); - if(plugin.notifications != null) { - plugin.notifications.showNotification(new Notification("[AuthMe] " + player.getName() + " logged in!")); - } - player.saveData(); - - } else { - if (!Settings.noConsoleSpam) - ConsoleLogger.info(player.getName() + " used the wrong password"); - if (Settings.isKickOnWrongPasswordEnabled) { - try { - int gm = AuthMePlayerListener.gameMode.get(name); - player.setGameMode(GameMode.getByValue(gm)); - } catch (NullPointerException npe) {} - player.kickPlayer(m._("wrong_pwd")); - } else { - return (m._("wrong_pwd")); - } - } - } else { - // need for bypass password check if passpartu command is enabled - PlayerAuth auth = new PlayerAuth(name, hash, ip, new Date().getTime(), email); - database.updateSession(auth); - PlayerCache.getInstance().addPlayer(auth); - LimboPlayer limbo = LimboCache.getInstance().getLimboPlayer(name); - if (limbo != null) { + AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(player, limbo.getLoc()); + pm.callEvent(tpEvent); + if(!tpEvent.isCancelled()) { + if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).isLoaded()) { + tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load(); + } + final Location fLoc = tpEvent.getTo(); + Bukkit.getScheduler().runTask(plugin, new Runnable() { + @Override + public void run() { + player.teleport(fLoc); + } + }); + } + } + } + else if (Settings.isForceSpawnLocOnJoinEnabled && Settings.getForcedWorlds.contains(player.getWorld().getName())) { + SpawnTeleportEvent tpEvent = new SpawnTeleportEvent(player, player.getLocation(), spawnLoc, true); + pm.callEvent(tpEvent); + if(!tpEvent.isCancelled()) { + if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).isLoaded()) { + tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load(); + } + final Location fLoc = tpEvent.getTo(); + Bukkit.getScheduler().runTask(plugin, new Runnable() { + @Override + public void run() { + player.teleport(fLoc); + } + }); + } + } + else if ((Settings.isSaveQuitLocationEnabled) && (getAuth.getQuitLocY() != 0)) + { + utils.packCoords(getAuth.getQuitLocX(), getAuth.getQuitLocY(), getAuth.getQuitLocZ(), player); + } + else { + AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(player, limbo.getLoc()); + pm.callEvent(tpEvent); + if(!tpEvent.isCancelled()) { + if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).isLoaded()) { + tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load(); + } + final Location fLoc = tpEvent.getTo(); + Bukkit.getScheduler().runTask(plugin, new Runnable() { + @Override + public void run() { + player.teleport(fLoc); + } + }); + } + } - - player.setOp(limbo.getOperator()); - - this.utils.addNormal(player, limbo.getGroup()); - + Bukkit.getScheduler().runTask(plugin, new Runnable() { + @Override + public void run() { + player.setGameMode(GameMode.getByValue(limbo.getGameMode())); + } + }); - if ((Settings.isTeleportToSpawnEnabled) && (!Settings.isForceSpawnLocOnJoinEnabled && Settings.getForcedWorlds.contains(player.getWorld().getName()))) - { - if ((Settings.isSaveQuitLocationEnabled) && (this.database.getAuth(name).getQuitLocY() != 0)) { - Location quitLoc = new Location(player.getWorld(), this.database.getAuth(name).getQuitLocX() + 0.5D, this.database.getAuth(name).getQuitLocY() + 0.5D, this.database.getAuth(name).getQuitLocZ() + 0.5D); - AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(player, quitLoc); - pm.callEvent(tpEvent); - if(!tpEvent.isCancelled()) { - if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).isLoaded()) { - tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load(); - } - player.teleport(tpEvent.getTo()); - } - } - else - { - AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(player, limbo.getLoc()); - pm.callEvent(tpEvent); - if(!tpEvent.isCancelled()) { - if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).isLoaded()) { - tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load(); - } - player.teleport(tpEvent.getTo()); - } - } - - } - else if (Settings.isForceSpawnLocOnJoinEnabled && Settings.getForcedWorlds.contains(player.getWorld().getName())) { + if (Settings.protectInventoryBeforeLogInEnabled && player.hasPlayedBefore()) { + RestoreInventoryEvent event = new RestoreInventoryEvent(player, limbo.getInventory(), limbo.getArmour()); + Bukkit.getServer().getPluginManager().callEvent(event); + if (!event.isCancelled()) { + API.setPlayerInventory(player, limbo.getInventory(), limbo.getArmour()); + } + } + + player.getServer().getScheduler().cancelTask(limbo.getTimeoutTaskId()); + player.getServer().getScheduler().cancelTask(limbo.getMessageTaskId()); + LimboCache.getInstance().deleteLimboPlayer(name); + if (playerCache.doesCacheExist(name)) { + playerCache.removeCache(name); + } + } + + /* + * Little Work Around under Registration Group Switching for admins that + * add Registration thru a web Scripts. + */ + if ( Settings.isPermissionCheckEnabled && AuthMe.permission.playerInGroup(player, Settings.unRegisteredGroup) && !Settings.unRegisteredGroup.isEmpty() ) { + AuthMe.permission.playerRemoveGroup(player.getWorld(), player.getName(), Settings.unRegisteredGroup); + AuthMe.permission.playerAddGroup(player.getWorld(), player.getName(), Settings.getRegisteredGroup); + } + + try { + if (!PlayersLogs.players.contains(player.getName())) + PlayersLogs.players.add(player.getName()); + pllog.save(); + } catch (NullPointerException ex) { + } + + Bukkit.getServer().getPluginManager().callEvent(new LoginEvent(player, true)); + if (Settings.useCaptcha) { + if(plugin.captcha.containsKey(name)) { + plugin.captcha.remove(name); + } + if(plugin.cap.containsKey(name)) { + plugin.cap.containsKey(name); + } + } + player.sendMessage(m._("login")); + displayOtherAccounts(auth); + if(!Settings.noConsoleSpam) + ConsoleLogger.info(player.getName() + " logged in!"); + if(plugin.notifications != null) { + plugin.notifications.showNotification(new Notification("[AuthMe] " + player.getName() + " logged in!")); + } + Bukkit.getScheduler().runTask(plugin, new Runnable() { + @Override + public void run() { + player.saveData(); + } + }); + + } else { + if (!Settings.noConsoleSpam) + ConsoleLogger.info(player.getName() + " used the wrong password"); + if (Settings.isKickOnWrongPasswordEnabled) { + try { + final int gm = AuthMePlayerListener.gameMode.get(name); + Bukkit.getScheduler().runTask(plugin, new Runnable() { + @Override + public void run() { + player.setGameMode(GameMode.getByValue(gm)); + } + }); + } catch (NullPointerException npe) {} + Bukkit.getScheduler().runTask(plugin, new Runnable() { + @Override + public void run() { + player.kickPlayer(m._("wrong_pwd")); + } + }); + } else { + player.sendMessage(m._("wrong_pwd")); + return; + } + } + } else { + // need for bypass password check if passpartu command is enabled + PlayerAuth auth = new PlayerAuth(name, hash, ip, new Date().getTime(), email); + database.updateSession(auth); + PlayerCache.getInstance().addPlayer(auth); + final LimboPlayer limbo = LimboCache.getInstance().getLimboPlayer(name); + if (limbo != null) { + + Bukkit.getScheduler().runTask(plugin, new Runnable(){ + @Override + public void run() { + player.setOp(limbo.getOperator()); + } + }); + + utils.addNormal(player, limbo.getGroup()); + + if ((Settings.isTeleportToSpawnEnabled) && (!Settings.isForceSpawnLocOnJoinEnabled && Settings.getForcedWorlds.contains(player.getWorld().getName()))) + { + if ((Settings.isSaveQuitLocationEnabled) && (database.getAuth(name).getQuitLocY() != 0)) { + Location quitLoc = new Location(player.getWorld(), database.getAuth(name).getQuitLocX() + 0.5D, database.getAuth(name).getQuitLocY() + 0.5D, database.getAuth(name).getQuitLocZ() + 0.5D); + AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(player, quitLoc); + pm.callEvent(tpEvent); + if(!tpEvent.isCancelled()) { + if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).isLoaded()) { + tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load(); + } + final Location fLoc = tpEvent.getTo(); + Bukkit.getScheduler().runTask(plugin, new Runnable() { + @Override + public void run() { + player.teleport(fLoc); + } + }); + } + } + else + { + AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(player, limbo.getLoc()); + pm.callEvent(tpEvent); + if(!tpEvent.isCancelled()) { + if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).isLoaded()) { + tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load(); + } + final Location fLoc = tpEvent.getTo(); + Bukkit.getScheduler().runTask(plugin, new Runnable() { + @Override + public void run() { + player.teleport(fLoc); + } + }); + } + } + } + else if (Settings.isForceSpawnLocOnJoinEnabled && Settings.getForcedWorlds.contains(player.getWorld().getName())) { + + SpawnTeleportEvent tpEvent = new SpawnTeleportEvent(player, player.getLocation(), spawnLoc, true); + pm.callEvent(tpEvent); + if(!tpEvent.isCancelled()) { + if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).isLoaded()) { + tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load(); + } + final Location fLoc = tpEvent.getTo(); + Bukkit.getScheduler().runTask(plugin, new Runnable() { + @Override + public void run() { + player.teleport(fLoc); + } + }); + } + } + else if ((Settings.isSaveQuitLocationEnabled) && (database.getAuth(name).getQuitLocY() != 0)) { + Location quitLoc = new Location(player.getWorld(), database.getAuth(name).getQuitLocX() + 0.5D, database.getAuth(name).getQuitLocY() + 0.5D, database.getAuth(name).getQuitLocZ() + 0.5D); + AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(player, quitLoc); + pm.callEvent(tpEvent); + if(!tpEvent.isCancelled()) { + if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).isLoaded()) { + tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load(); + } + final Location fLoc = tpEvent.getTo(); + Bukkit.getScheduler().runTask(plugin, new Runnable() { + @Override + public void run() { + player.teleport(fLoc); + } + }); + } + } + else + { + AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(player, limbo.getLoc()); + pm.callEvent(tpEvent); + if(!tpEvent.isCancelled()) { + if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).isLoaded()) { + tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load(); + } + final Location fLoc = tpEvent.getTo(); + Bukkit.getScheduler().runTask(plugin, new Runnable() { + @Override + public void run() { + player.teleport(fLoc); + } + }); + } + } + + Bukkit.getScheduler().runTask(plugin, new Runnable() { + @Override + public void run() { + player.setGameMode(GameMode.getByValue(limbo.getGameMode())); + } + }); + + if (Settings.protectInventoryBeforeLogInEnabled && player.hasPlayedBefore()) { + RestoreInventoryEvent event = new RestoreInventoryEvent(player, limbo.getInventory(), limbo.getArmour()); + Bukkit.getServer().getPluginManager().callEvent(event); + if (!event.isCancelled()) { + API.setPlayerInventory(player, limbo.getInventory(), limbo.getArmour()); + } + } + + player.getServer().getScheduler().cancelTask(limbo.getTimeoutTaskId()); + player.getServer().getScheduler().cancelTask(limbo.getMessageTaskId()); + LimboCache.getInstance().deleteLimboPlayer(name); + if (playerCache.doesCacheExist(name)) { + playerCache.removeCache(name); + } + } + + /* + * Little Work Around under Registration Group Switching for admins that + * add Registration thru a web Scripts. + */ + if ( Settings.isPermissionCheckEnabled && AuthMe.permission.playerInGroup(player, Settings.unRegisteredGroup) && !Settings.unRegisteredGroup.isEmpty() ) { + AuthMe.permission.playerRemoveGroup(player.getWorld(), player.getName(), Settings.unRegisteredGroup); + AuthMe.permission.playerAddGroup(player.getWorld(), player.getName(), Settings.getRegisteredGroup); + } + + try { + if (!PlayersLogs.players.contains(player.getName())) + PlayersLogs.players.add(player.getName()); + pllog.save(); + } catch (NullPointerException ex) { } + + Bukkit.getServer().getPluginManager().callEvent(new LoginEvent(player, true)); + if (Settings.useCaptcha) { + if(plugin.captcha.containsKey(name)) { + plugin.captcha.remove(name); + } + if(plugin.cap.containsKey(name)) { + plugin.cap.containsKey(name); + } + } + player.sendMessage(m._("login")); + displayOtherAccounts(auth); + if(!Settings.noConsoleSpam) + ConsoleLogger.info(player.getName() + " logged in!"); + if(plugin.notifications != null) { + plugin.notifications.showNotification(new Notification("[AuthMe] " + player.getName() + " logged in!")); + } + Bukkit.getScheduler().runTask(plugin, new Runnable() { + @Override + public void run() { + player.saveData(); + } + }); + passpartu = false; + } + } catch (NoSuchAlgorithmException ex) { + ConsoleLogger.showError(ex.getMessage()); + player.sendMessage(m._("error")); + return; + } + return; + } + + }); - SpawnTeleportEvent tpEvent = new SpawnTeleportEvent(player, player.getLocation(), spawnLoc, true); - pm.callEvent(tpEvent); - if(!tpEvent.isCancelled()) { - if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).isLoaded()) { - tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load(); - } - player.teleport(tpEvent.getTo()); - } - } - else if ((Settings.isSaveQuitLocationEnabled) && (this.database.getAuth(name).getQuitLocY() != 0)) { - Location quitLoc = new Location(player.getWorld(), this.database.getAuth(name).getQuitLocX() + 0.5D, this.database.getAuth(name).getQuitLocY() + 0.5D, this.database.getAuth(name).getQuitLocZ() + 0.5D); - AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(player, quitLoc); - pm.callEvent(tpEvent); - if(!tpEvent.isCancelled()) { - if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).isLoaded()) { - tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load(); - } - player.teleport(tpEvent.getTo()); - } - } - else - { - AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(player, limbo.getLoc()); - pm.callEvent(tpEvent); - if(!tpEvent.isCancelled()) { - if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).isLoaded()) { - tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load(); - } - player.teleport(tpEvent.getTo()); - } - } - - - player.setGameMode(GameMode.getByValue(limbo.getGameMode())); - - if (Settings.protectInventoryBeforeLogInEnabled && player.hasPlayedBefore()) { - RestoreInventoryEvent event = new RestoreInventoryEvent(player, limbo.getInventory(), limbo.getArmour()); - Bukkit.getServer().getPluginManager().callEvent(event); - if (!event.isCancelled()) { - API.setPlayerInventory(player, limbo.getInventory(), limbo.getArmour()); - } - } - - - player.getServer().getScheduler().cancelTask(limbo.getTimeoutTaskId()); - player.getServer().getScheduler().cancelTask(limbo.getMessageTaskId()); - LimboCache.getInstance().deleteLimboPlayer(name); - if (this.playerCache.doesCacheExist(name)) { - this.playerCache.removeCache(name); - } - } - - /* - * Little Work Around under Registration Group Switching for admins that - * add Registration thru a web Scripts. - */ - if ( Settings.isPermissionCheckEnabled && AuthMe.permission.playerInGroup(player, Settings.unRegisteredGroup) && !Settings.unRegisteredGroup.isEmpty() ) { - AuthMe.permission.playerRemoveGroup(player.getWorld(), player.getName(), Settings.unRegisteredGroup); - AuthMe.permission.playerAddGroup(player.getWorld(), player.getName(), Settings.getRegisteredGroup); - } - - try { - if (!PlayersLogs.players.contains(player.getName())) - PlayersLogs.players.add(player.getName()); - pllog.save(); - } catch (NullPointerException ex) { } - - Bukkit.getServer().getPluginManager().callEvent(new LoginEvent(player, true)); - if (Settings.useCaptcha) { - if(plugin.captcha.containsKey(name)) { - plugin.captcha.remove(name); - } - if(plugin.cap.containsKey(name)) { - plugin.cap.containsKey(name); - } - } - player.sendMessage(m._("login")); - displayOtherAccounts(auth); - if(!Settings.noConsoleSpam) - ConsoleLogger.info(player.getName() + " logged in!"); - if(plugin.notifications != null) { - plugin.notifications.showNotification(new Notification("[AuthMe] " + player.getName() + " logged in!")); - } - player.saveData(); - this.passpartu = false; - } - - } catch (NoSuchAlgorithmException ex) { - ConsoleLogger.showError(ex.getMessage()); - return (m._("error")); - } - return ""; } - + private void displayOtherAccounts(PlayerAuth auth) { if (!Settings.displayOtherAccounts) { return; @@ -417,7 +499,7 @@ public class Management { } else { message = message + "."; } - + } for (Player player : AuthMe.getInstance().getServer().getOnlinePlayers()) { if (player.hasPermission("authme.seeOtherAccounts")) { @@ -426,6 +508,5 @@ public class Management { } } } - - + } diff --git a/src/main/java/uk/org/whoami/authme/PerformBackup.java b/src/main/java/uk/org/whoami/authme/PerformBackup.java index 5d995f1e4..dd69ceb29 100644 --- a/src/main/java/uk/org/whoami/authme/PerformBackup.java +++ b/src/main/java/uk/org/whoami/authme/PerformBackup.java @@ -4,7 +4,6 @@ */ package uk.org.whoami.authme; - import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -20,7 +19,7 @@ import uk.org.whoami.authme.settings.Settings; * @author stefano */ public class PerformBackup { - + private String dbName = Settings.getMySQLDatabase; private String dbUserName = Settings.getMySQLUsername; private String dbPassword = Settings.getMySQLPassword; @@ -29,14 +28,13 @@ public class PerformBackup { String dateString = format.format( new Date() ); private String path = AuthMe.getInstance().getDataFolder()+"/backups/backup"+dateString; private AuthMe instance; - + public PerformBackup(AuthMe instance) { this.setInstance(instance); - } - + public boolean DoBackup() { - + switch(Settings.getDataSource) { case FILE: return FileBackup("auths.db"); @@ -45,24 +43,21 @@ public class PerformBackup { case SQLITE: return FileBackup(Settings.getMySQLDatabase+".db"); } - + return false; } - + private boolean MySqlBackup() { File dirBackup = new File(AuthMe.getInstance().getDataFolder()+"/backups"); - + if(!dirBackup.exists()) dirBackup.mkdir(); if(checkWindows(Settings.backupWindowsPath)) { String executeCmd = Settings.backupWindowsPath+"\\bin\\mysqldump.exe -u " + dbUserName + " -p" + dbPassword + " " + dbName + " --tables " + tblname + " -r " + path+".sql"; - //ConsoleLogger.info(executeCmd); Process runtimeProcess; try { - //System.out.println("path "+path+" cmd "+executeCmd); runtimeProcess = Runtime.getRuntime().exec(executeCmd); int processComplete = runtimeProcess.waitFor(); - if (processComplete == 0) { ConsoleLogger.info("Backup created successfully"); return true; @@ -76,10 +71,8 @@ public class PerformBackup { String executeCmd = "mysqldump -u " + dbUserName + " -p" + dbPassword + " " + dbName + " --tables " + tblname + " -r " + path+".sql"; Process runtimeProcess; try { - //System.out.println("path "+path+" cmd "+executeCmd); runtimeProcess = Runtime.getRuntime().exec(executeCmd); int processComplete = runtimeProcess.waitFor(); - if (processComplete == 0) { ConsoleLogger.info("Backup created successfully"); return true; @@ -92,35 +85,30 @@ public class PerformBackup { } return false; } - + private boolean FileBackup(String backend) { File dirBackup = new File(AuthMe.getInstance().getDataFolder()+"/backups"); - + if(!dirBackup.exists()) dirBackup.mkdir(); - + try { - copy(new File("plugins/AuthMe/"+backend),new File(path+".db")); return true; - + } catch (Exception ex) { ex.printStackTrace(); } - - return false; } - + /* * Check if we are under Windows and correct location * of mysqldump.exe otherwise return error. */ private boolean checkWindows(String windowsPath) { String isWin = System.getProperty("os.name").toLowerCase(); - if(isWin.indexOf("win") >= 0) { - //ConsoleLogger.info(windowsPath+"\\bin\\mysqldump.exe"); if(new File(windowsPath+"\\bin\\mysqldump.exe").exists()) { return true; } else { @@ -128,8 +116,6 @@ public class PerformBackup { return true; } } else return false; - - } /* @@ -156,5 +142,5 @@ public void setInstance(AuthMe instance) { public AuthMe getInstance() { return instance; } - + } diff --git a/src/main/java/uk/org/whoami/authme/SendMailSSL.java b/src/main/java/uk/org/whoami/authme/SendMailSSL.java index f15a906f4..1f8bc4377 100644 --- a/src/main/java/uk/org/whoami/authme/SendMailSSL.java +++ b/src/main/java/uk/org/whoami/authme/SendMailSSL.java @@ -14,24 +14,28 @@ import org.bukkit.Bukkit; import uk.org.whoami.authme.cache.auth.PlayerAuth; import uk.org.whoami.authme.settings.Settings; - + +/** +* +* @author Xephi59 +*/ public class SendMailSSL { - + public AuthMe instance; - + public SendMailSSL(AuthMe instance) { this.instance = instance; } public void main(final PlayerAuth auth, final String newPass) { - + String sendername; - + if (Settings.getmailSenderName.isEmpty() || Settings.getmailSenderName == null) { sendername = Settings.getmailAccount; } else { sendername = Settings.getmailSenderName; } - + Properties props = new Properties(); props.put("mail.smtp.host", Settings.getmailSMTP); props.put("mail.smtp.socketFactory.port", String.valueOf(Settings.getMailPort)); @@ -39,7 +43,7 @@ public class SendMailSSL { "javax.net.ssl.SSLSocketFactory"); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.port", String.valueOf(Settings.getMailPort)); - + Session session = Session.getInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { @@ -48,7 +52,7 @@ public class SendMailSSL { }); try { - + final Message message = new MimeMessage(session); try { message.setFrom(new InternetAddress(Settings.getmailAccount, sendername)); @@ -63,9 +67,7 @@ public class SendMailSSL { text = text.replaceAll("", instance.getServer().getServerName()); text = text.replaceAll("", newPass); message.setText(text); - Bukkit.getScheduler().runTaskAsynchronously(instance, new Runnable() { - @Override public void run() { try { @@ -73,16 +75,13 @@ public class SendMailSSL { } catch (MessagingException e) { e.printStackTrace(); } - } - }); - if(!Settings.noConsoleSpam) ConsoleLogger.info("Email sent to : " + auth.getNickname()); - } catch (MessagingException e) { throw new RuntimeException(e); } } -} \ No newline at end of file + +} diff --git a/src/main/java/uk/org/whoami/authme/Utils.java b/src/main/java/uk/org/whoami/authme/Utils.java index 9e28d0e8d..f313422e7 100644 --- a/src/main/java/uk/org/whoami/authme/Utils.java +++ b/src/main/java/uk/org/whoami/authme/Utils.java @@ -24,23 +24,17 @@ import uk.org.whoami.authme.settings.Settings; * @author stefano */ public class Utils { - //private Settings settings = Settings.getInstance(); private String currentGroup; private static Utils singleton; private String unLoggedGroup = Settings.getUnloggedinGroup; BukkitTask id; - /* - public Utils(Player player) { - this.player = player; - - } - */ + public void setGroup(Player player, groupType group) { if (!player.isOnline()) return; if(!Settings.isPermissionCheckEnabled) return; - + switch(group) { case UNREGISTERED: { currentGroup = AuthMe.permission.getPrimaryGroup(player); @@ -57,95 +51,74 @@ public class Utils { } return; } - + public String removeAll(Player player) { + if(!Utils.getInstance().useGroupSystem()){ return null; } - if( !Settings.getJoinPermissions.isEmpty() ) { hasPermOnJoin(player); } - this.currentGroup = AuthMe.permission.getPrimaryGroup(player.getWorld(),player.getName().toString()); - //System.out.println("current grop" + currentGroup); if(AuthMe.permission.playerRemoveGroup(player.getWorld(),player.getName().toString(), currentGroup) && AuthMe.permission.playerAddGroup(player.getWorld(),player.getName().toString(),this.unLoggedGroup)) { - return currentGroup; } - return null; - } - + public boolean addNormal(Player player, String group) { if(!Utils.getInstance().useGroupSystem()){ return false; - } - // System.out.println("in add normal"); - /* if (AuthMe.permission.playerRemove(this.player, "-*")) - return true; - */ + } if(AuthMe.permission.playerRemoveGroup(player.getWorld(),player.getName().toString(),this.unLoggedGroup) && AuthMe.permission.playerAddGroup(player.getWorld(),player.getName().toString(),group)) { - //System.out.println("vecchio "+this.unLoggedGroup+ "nuovo" + group); return true; - } return false; - } + } private String hasPermOnJoin(Player player) { - /* if(Settings.getJoinPermissions.isEmpty()) - return null; */ - Iterator iter = Settings.getJoinPermissions.iterator(); - while (iter.hasNext()) { - String permission = iter.next(); - // System.out.println("permissions? "+ permission); - - if(AuthMe.permission.playerHas(player, permission)){ - // System.out.println("player has permissions " +permission); - AuthMe.permission.playerAddTransient(player, permission); - } - } - return null; + + Iterator iter = Settings.getJoinPermissions.iterator(); + while (iter.hasNext()) { + String permission = iter.next(); + if(AuthMe.permission.playerHas(player, permission)){ + AuthMe.permission.playerAddTransient(player, permission); + } + } + return null; } - + public boolean isUnrestricted(Player player) { - - + if(Settings.getUnrestrictedName.isEmpty() || Settings.getUnrestrictedName == null) return false; - - // System.out.println("name to escape "+player.getName()); - if(Settings.getUnrestrictedName.contains(player.getName())) { - // System.out.println("name to escape correctly"+player.getName()); + + if(Settings.getUnrestrictedName.contains(player.getName())) return true; - } - + return false; - - + } public static Utils getInstance() { - - singleton = new Utils(); - - return singleton; + + singleton = new Utils(); + + return singleton; } - + private boolean useGroupSystem() { - + if(Settings.isPermissionCheckEnabled && !Settings.getUnloggedinGroup.isEmpty()) { return true; } return false; - } - + public void packCoords(int x, int y, int z, final Player pl) { final World world = pl.getWorld(); final int fY = y; - final Location loc = new Location(world, x + 0.5D, y + 0.6D, z + 0.5D); + final Location loc = new Location(world, x, y + 0.6D, z); AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(pl, loc); AuthMe.getInstance().getServer().getPluginManager().callEvent(tpEvent); @@ -154,31 +127,25 @@ public class Utils { tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load(); pl.teleport(tpEvent.getTo()); } - + id = Bukkit.getScheduler().runTaskTimer(AuthMe.authme, new Runnable() { @Override public void run() { int current = (int)pl.getLocation().getY(); World currentWorld = pl.getWorld(); - if (current != fY && world.getName() == currentWorld.getName()) { pl.teleport(loc); } } - }, 1L, 20L); - - Bukkit.getScheduler().runTaskLaterAsynchronously(AuthMe.authme, new Runnable() { - @Override public void run() { id.cancel(); } - }, 60L); } @@ -205,34 +172,27 @@ public class Utils { } catch(Exception e) { e.printStackTrace(); } - - return false; } - + /* * Read Toekn */ public boolean readToken(String inputToken) { File file = new File("plugins/AuthMe/passpartu.token"); - + if (!file.exists()) return false; - + if (inputToken.isEmpty() ) return false; - Scanner reader = null; try { reader = new Scanner(file); - while (reader.hasNextLine()) { final String line = reader.nextLine(); - if (line.contains(":")) { String[] tokenInfo = line.split(":"); - //System.err.println("Authme input token "+inputToken+" saved token "+tokenInfo[0]); - //System.err.println("Authme time "+System.currentTimeMillis()/1000+"saved time "+Integer.parseInt(tokenInfo[1])); if(tokenInfo[0].equals(inputToken) && System.currentTimeMillis()/1000-30 <= Integer.parseInt(tokenInfo[1]) ) { file.delete(); reader.close(); @@ -243,7 +203,6 @@ public class Utils { } catch(Exception e) { e.printStackTrace(); } - reader.close(); return false; } @@ -251,19 +210,18 @@ public class Utils { * Generate Random Token */ private String generateToken() { - // obtain new random token + // obtain new random token Random rnd = new Random (); char[] arr = new char[5]; - for (int i=0; i<5; i++) { int n = rnd.nextInt (36); arr[i] = (char) (n < 10 ? '0'+n : 'a'+n-10); } - return new String(arr); } + public enum groupType { UNREGISTERED, REGISTERED, NOTLOGGEDIN, LOGGEDIN } - + } diff --git a/src/main/java/uk/org/whoami/authme/api/API.java b/src/main/java/uk/org/whoami/authme/api/API.java index eb0a8e318..6cec7d55e 100644 --- a/src/main/java/uk/org/whoami/authme/api/API.java +++ b/src/main/java/uk/org/whoami/authme/api/API.java @@ -19,10 +19,10 @@ import uk.org.whoami.authme.security.PasswordSecurity.HashAlgorithm; import uk.org.whoami.authme.settings.Settings; public class API { - + public AuthMe instance; public DataSource database; - + public API(AuthMe instance, DataSource database) { this.instance = instance; this.database = database; @@ -42,7 +42,7 @@ public class API { public AuthMe getPlugin() { return instance; } - + /** * * @param player @@ -51,7 +51,7 @@ public class API { public static boolean isAuthenticated(Player player) { return PlayerCache.getInstance().isAuthenticated(player.getName()); } - + /** * * @param player @@ -60,7 +60,7 @@ public class API { public boolean isaNPC(Player player) { return instance.getCitizensCommunicator().isNPC(player, instance); } - + /** * * @param player @@ -69,43 +69,43 @@ public class API { public static boolean isUnrestricted(Player player) { return Utils.getInstance().isUnrestricted(player); } - + public static boolean isChatAllowed() { return Settings.isChatAllowed; } - + public static boolean isAllowRestrictedIp() { return Settings.isAllowRestrictedIp; } - + public static boolean isBackupActivated() { return Settings.isBackupActivated; } - + public static boolean isForceSpawnLocOnJoinEnabled() { return Settings.isForceSpawnLocOnJoinEnabled; } - + public static DataSourceType getDataSource() { return Settings.getDataSource; } - + public static int getMovementRadius() { return Settings.getMovementRadius; } - + public static List getJoinPermissions() { return Settings.getJoinPermissions; } - + public static Boolean isPasspartuEnable() { return Settings.enablePasspartu; } - + public static String getcUnrestrictedName() { return Settings.getcUnrestrictedName; } - + public static Boolean getEnablePasswordVerifier() { return Settings.getEnablePasswordVerifier; } @@ -113,11 +113,11 @@ public class API { public static int getMaxNickLength() { return Settings.getMaxNickLength; } - + public static int getMinNickLength() { return Settings.getMinNickLength; } - + public static Array getLastLocationColumns() { Array columns = null; Array.set(columns, 0, Settings.getMySQLlastlocX); @@ -125,7 +125,7 @@ public class API { Array.set(columns, 2, Settings.getMySQLlastlocZ); return columns; } - + public static Location getLastLocation(Player player) { try { PlayerAuth auth = PlayerCache.getInstance().getAuth(player.getName()); @@ -140,52 +140,47 @@ public class API { } catch (NullPointerException ex) { return null; } - } - + public static String getNickRegex() { return Settings.getNickRegex; } - + public static int getPasswordMinLen() { return Settings.getPasswordMinLen; } - + public static HashAlgorithm getPasswordHash() { return Settings.getPasswordHash; } - + public static int getRegistrationTimeout() { return Settings.getRegistrationTimeout; } - + public static int getSessionTimeout() { return Settings.getSessionTimeout; } - + public static String getUnloggedinGroup() { return Settings.getUnloggedinGroup; } - + public static void setPlayerInventory(Player player, ItemStack[] content, ItemStack[] armor) { try { player.getInventory().setContents(content); player.getInventory().setArmorContents(armor); } catch (NullPointerException npe) { } - - } - + public void saveAuth(final PlayerAuth auth) { instance.getServer().getScheduler().runTask(instance, new Runnable() { - @Override public void run() { database.saveAuth(auth); } - }); } - + } diff --git a/src/main/java/uk/org/whoami/authme/cache/auth/PlayerAuth.java b/src/main/java/uk/org/whoami/authme/cache/auth/PlayerAuth.java index 37cff4f95..eab1ccaf6 100644 --- a/src/main/java/uk/org/whoami/authme/cache/auth/PlayerAuth.java +++ b/src/main/java/uk/org/whoami/authme/cache/auth/PlayerAuth.java @@ -19,7 +19,6 @@ package uk.org.whoami.authme.cache.auth; import uk.org.whoami.authme.security.PasswordSecurity; import uk.org.whoami.authme.settings.Settings; - public class PlayerAuth { private String nickname; @@ -33,14 +32,14 @@ public class PlayerAuth { private String vBhash = null; private int groupId; private String email = "your@email.com"; - + public PlayerAuth(String nickname, String hash, String ip, long lastLogin) { this.nickname = nickname; this.hash = hash; this.ip = ip; this.lastLogin = lastLogin; } - + public PlayerAuth(String nickname, String hash, String ip, long lastLogin, String email) { this.nickname = nickname; this.hash = hash; @@ -48,14 +47,14 @@ public class PlayerAuth { this.lastLogin = lastLogin; this.email = email; } - + public PlayerAuth(String nickname, int x, int y, int z) { this.nickname = nickname; this.x = x; this.y = y; this.z = z; } - + public PlayerAuth(String nickname, String hash, String ip, long lastLogin, int x, int y, int z, String email) { this.nickname = nickname; this.hash = hash; @@ -66,10 +65,7 @@ public class PlayerAuth { this.z = z; this.email = email; } - - // - // This constructor is needed for Vbulletin board Auth! - // + public PlayerAuth(String nickname, String hash, String salt, int groupId, String ip, long lastLogin, int x, int y, int z, String email) { this.nickname = nickname; this.hash = hash; @@ -82,8 +78,7 @@ public class PlayerAuth { this.groupId = groupId; this.email = email; } - - // IPB Constructor with groups + public PlayerAuth(String nickname, String hash, String salt, int groupId , String ip, long lastLogin) { this.nickname = nickname; this.hash = hash; @@ -92,8 +87,7 @@ public class PlayerAuth { this.salt = salt; this.groupId = groupId; } - - // IPB Constructor without groups + public PlayerAuth(String nickname, String hash, String salt, String ip, long lastLogin) { this.nickname = nickname; this.hash = hash; @@ -101,7 +95,7 @@ public class PlayerAuth { this.lastLogin = lastLogin; this.salt = salt; } - + public PlayerAuth(String nickname, String hash, String salt, String ip, long lastLogin, int x, int y, int z, String email) { this.nickname = nickname; this.hash = hash; @@ -114,7 +108,6 @@ public class PlayerAuth { this.email = email; } - public PlayerAuth(String nickname, String hash, String ip, long lastLogin, int x, int y, int z) { this.nickname = nickname; this.hash = hash; @@ -126,7 +119,6 @@ public class PlayerAuth { this.email = "your@email.com"; } - public String getIp() { return ip; } @@ -138,26 +130,21 @@ public class PlayerAuth { public String getHash() { if(!salt.isEmpty() && Settings.getPasswordHash == PasswordSecurity.HashAlgorithm.MD5VB) { vBhash = "$MD5vb$"+salt+"$"+hash; - // Compose Vbullettin Hash System! return vBhash; } else { return hash; } } - - //Get Salt + public String getSalt() { return this.salt; } - - // - // GroupId for unactivated User on Vbullettin Board - // + public int getGroupId() { return groupId; } - + public int getQuitLocX() { return x; } @@ -194,11 +181,11 @@ public class PlayerAuth { public void setLastLogin(long lastLogin) { this.lastLogin = lastLogin; } - + public void setEmail(String email) { this.email = email; } - + public void setSalt(String salt) { this.salt = salt; } @@ -209,7 +196,6 @@ public class PlayerAuth { return false; } PlayerAuth other = (PlayerAuth) obj; - return other.getIp().equals(this.ip) && other.getNickname().equals(this.nickname); } @@ -220,4 +206,5 @@ public class PlayerAuth { hashCode = 71 * hashCode + (this.ip != null ? this.ip.hashCode() : 0); return hashCode; } + } diff --git a/src/main/java/uk/org/whoami/authme/cache/auth/PlayerCache.java b/src/main/java/uk/org/whoami/authme/cache/auth/PlayerCache.java index 505fdad42..ccba6ef29 100644 --- a/src/main/java/uk/org/whoami/authme/cache/auth/PlayerCache.java +++ b/src/main/java/uk/org/whoami/authme/cache/auth/PlayerCache.java @@ -54,4 +54,5 @@ public class PlayerCache { } return singleton; } + } diff --git a/src/main/java/uk/org/whoami/authme/cache/backup/DataFileCache.java b/src/main/java/uk/org/whoami/authme/cache/backup/DataFileCache.java index 908163a22..eaf7b6565 100644 --- a/src/main/java/uk/org/whoami/authme/cache/backup/DataFileCache.java +++ b/src/main/java/uk/org/whoami/authme/cache/backup/DataFileCache.java @@ -12,24 +12,22 @@ import org.bukkit.inventory.ItemStack; public class DataFileCache { - private ItemStack[] inventory; private ItemStack[] armor; - private String group; - private boolean operator; + private String group; + private boolean operator; public DataFileCache(ItemStack[] inventory, ItemStack[] armor){ this.inventory = inventory; this.armor = armor; - } public DataFileCache(ItemStack[] inventory, ItemStack[] armor, String group, boolean operator){ this.inventory = inventory; this.armor = armor; - this.group = group; - this.operator = operator; - } + this.group = group; + this.operator = operator; + } public ItemStack[] getInventory(){ return inventory; } @@ -37,13 +35,13 @@ public class DataFileCache { public ItemStack[] getArmour(){ return armor; } - + public String getGroup(){ return group; } - + public Boolean getOperator(){ return operator; - } -} + } +} diff --git a/src/main/java/uk/org/whoami/authme/cache/backup/FileCache.java b/src/main/java/uk/org/whoami/authme/cache/backup/FileCache.java index 240d35b2e..a5841af8d 100644 --- a/src/main/java/uk/org/whoami/authme/cache/backup/FileCache.java +++ b/src/main/java/uk/org/whoami/authme/cache/backup/FileCache.java @@ -15,11 +15,8 @@ import java.util.Scanner; import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.ItemStack; - public class FileCache { - //private HashMap ench; - - + public FileCache() { final File folder = new File("cache"); if (!folder.exists()) { @@ -40,17 +37,13 @@ public class FileCache { file.createNewFile(); writer = new FileWriter(file); - - // put player group in cache - // put if player is an op or not 1: is op 0: isnet op! - // line format Group|OperatorStatus - - if(operator) - writer.write(group+";1\r\n"); - else writer.write(group+";0\r\n"); - - writer.flush(); - + + // line format Group|OperatorStatus + if(operator) + writer.write(group+";1\r\n"); + else writer.write(group+";0\r\n"); + writer.flush(); + ItemStack[] invstack = playerData.getInventory(); for (int i = 0; i < invstack.length; i++) { @@ -58,24 +51,15 @@ public class FileCache { int itemid = 0; int amount = 0; int durability = 0; - String enchList = ""; - //ench = new HashMap(); - + String enchList = ""; if (invstack[i] != null) { itemid = invstack[i].getTypeId(); amount = invstack[i].getAmount(); durability = invstack[i].getDurability(); - - - for(Enchantment e : invstack[i].getEnchantments().keySet()) - { - //System.out.println("enchant "+e.getName()+" bog "+invstack[i].getEnchantmentLevel(e)); - enchList = enchList.concat(e.getName()+":"+invstack[i].getEnchantmentLevel(e)+":"); - //System.out.println(enchList); - - } - } - + for(Enchantment e : invstack[i].getEnchantments().keySet()) { + enchList = enchList.concat(e.getName()+":"+invstack[i].getEnchantmentLevel(e)+":"); + } + } writer.write("i" + ":" + itemid + ":" + amount + ":" + durability + ":"+ enchList + "\r\n"); writer.flush(); @@ -87,27 +71,19 @@ public class FileCache { int itemid = 0; int amount = 0; int durability = 0; - String enchList = ""; - + String enchList = ""; if (armorstack[i] != null) { itemid = armorstack[i].getTypeId(); amount = armorstack[i].getAmount(); durability = armorstack[i].getDurability(); - - for(Enchantment e : armorstack[i].getEnchantments().keySet()) - { - //System.out.println("enchant "+e.getName()+" bog "+armorstack[i].getEnchantmentLevel(e)); - enchList = enchList.concat(e.getName()+":"+armorstack[i].getEnchantmentLevel(e)+":"); - //System.out.println(enchList); - - } + for(Enchantment e : armorstack[i].getEnchantments().keySet()) { + enchList = enchList.concat(e.getName()+":"+armorstack[i].getEnchantmentLevel(e)+":"); + } } - writer.write("w" + ":" + itemid + ":" + amount + ":" + durability + ":"+ enchList + "\r\n"); writer.flush(); } - writer.close(); } catch (final Exception e) { e.printStackTrace(); @@ -120,9 +96,8 @@ public class FileCache { ItemStack[] stacki = new ItemStack[36]; ItemStack[] stacka = new ItemStack[4]; - String group = null; - boolean op = false; - + String group = null; + boolean op = false; if (!file.exists()) { return new DataFileCache(stacki, stacka); } @@ -149,41 +124,31 @@ public class FileCache { } final String[] in = line.split(":"); - - /*if (in.length != 4) { - continue; - } */ - if (!in[0].equals("i") && !in[0].equals("w")) { continue; } // can enchant item? size ofstring in file - 4 all / 2 = number of enchant if (in[0].equals("i")) { - stacki[i] = new ItemStack(Integer.parseInt(in[1]), - Integer.parseInt(in[2]), Short.parseShort((in[3]))); - // qui c'e' un problema serio! - if(in.length > 4 && !in[4].isEmpty()) { - for(int k=4;k 4 && !in[4].isEmpty()) { + for(int k=4;k 4 && !in[4].isEmpty()) { - for(int k=4;k 4 && !in[4].isEmpty()) { + for(int k=4;k cache; private FileCache playerData = new FileCache(); public AuthMe plugin; - + private LimboCache(AuthMe plugin) { this.plugin = plugin; this.cache = new HashMap(); @@ -49,7 +49,7 @@ public class LimboCache { ItemStack[] inv; boolean operator; String playerGroup = ""; - + if (playerData.doesCacheExist(name)) { StoreInventoryEvent event = new StoreInventoryEvent(player, playerData); Bukkit.getServer().getPluginManager().callEvent(event); @@ -72,7 +72,6 @@ public class LimboCache { inv = null; arm = null; } - if(player.isOp() ) { operator = true; } else { @@ -80,8 +79,6 @@ public class LimboCache { } } - - if(Settings.isForceSurvivalModeEnabled) { if(Settings.isResetInventoryIfCreative && gameMode != 0 ) { ResetInventoryEvent event = new ResetInventoryEvent(player); @@ -100,7 +97,6 @@ public class LimboCache { loc = plugin.mv.getMVWorldManager().getMVWorld(player.getWorld().getName()).getSpawnLocation(); } catch (NullPointerException npe) {} } - } try { if(cache.containsKey(name) && playerGroup.isEmpty()) { @@ -109,15 +105,13 @@ public class LimboCache { } } catch (NullPointerException ex) { } - cache.put(player.getName().toLowerCase(), new LimboPlayer(name, loc, inv, arm, gameMode, operator, playerGroup)); } - + public void addLimboPlayer(Player player, String group) { - cache.put(player.getName().toLowerCase(), new LimboPlayer(player.getName().toLowerCase(), group)); } - + public void deleteLimboPlayer(String name) { cache.remove(name); } @@ -129,8 +123,7 @@ public class LimboCache { public boolean hasLimboPlayer(String name) { return cache.containsKey(name); } - - + public static LimboCache getInstance() { if (singleton == null) { singleton = new LimboCache(AuthMe.getInstance()); @@ -144,4 +137,5 @@ public class LimboCache { } this.addLimboPlayer(player); } + } diff --git a/src/main/java/uk/org/whoami/authme/cache/limbo/LimboPlayer.java b/src/main/java/uk/org/whoami/authme/cache/limbo/LimboPlayer.java index a688f3707..d4291b233 100644 --- a/src/main/java/uk/org/whoami/authme/cache/limbo/LimboPlayer.java +++ b/src/main/java/uk/org/whoami/authme/cache/limbo/LimboPlayer.java @@ -40,7 +40,7 @@ public class LimboPlayer { this.operator = operator; this.group = group; } - + public LimboPlayer(String name, Location loc, int gameMode, boolean operator, String group) { this.name = name; this.loc = loc; @@ -48,13 +48,12 @@ public class LimboPlayer { this.operator = operator; this.group = group; } - + public LimboPlayer(String name, String group) { this.name = name; this.group = group; } - - + public String getName() { return name; } @@ -74,11 +73,11 @@ public class LimboPlayer { public int getGameMode() { return gameMode; } - + public boolean getOperator() { return operator; } - + public String getGroup() { return group; } diff --git a/src/main/java/uk/org/whoami/authme/commands/AdminCommand.java b/src/main/java/uk/org/whoami/authme/commands/AdminCommand.java index e47552835..ed9f89b06 100644 --- a/src/main/java/uk/org/whoami/authme/commands/AdminCommand.java +++ b/src/main/java/uk/org/whoami/authme/commands/AdminCommand.java @@ -21,12 +21,14 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; @@ -52,14 +54,12 @@ import uk.org.whoami.authme.settings.Spawn; import uk.org.whoami.authme.settings.SpoutCfg; public class AdminCommand implements CommandExecutor { - - public AuthMe plugin; + public AuthMe plugin; private Messages m = Messages.getInstance(); private SpoutCfg s = SpoutCfg.getInstance(); - //private Settings settings = Settings.getInstance(); public DataSource database; - + public AdminCommand(AuthMe plugin, DataSource database) { this.database = database; this.plugin = plugin; @@ -77,13 +77,12 @@ public class AdminCommand implements CommandExecutor { sender.sendMessage("/authme lastlogin - Display Date about the Player's LastLogin"); return true; } - + if((sender instanceof ConsoleCommandSender) && args[0].equalsIgnoreCase("passpartuToken")) { if(args.length > 1) { System.out.println("[AuthMe] command usage: authme passpartuToken"); return true; } - if(Utils.getInstance().obtainToken()) { System.out.println("[AuthMe] You have 30s for insert this token ingame with /passpartu [token]"); } else { @@ -91,40 +90,32 @@ public class AdminCommand implements CommandExecutor { } return true; } - - + if (!sender.hasPermission("authme.admin." + args[0].toLowerCase())) { sender.sendMessage(m._("no_perm")); return true; } - - + if (args[0].equalsIgnoreCase("version")) { sender.sendMessage("AuthMe Version: "+AuthMe.getInstance().getDescription().getVersion()); return true; } - - + if (args[0].equalsIgnoreCase("purge")) { if (args.length != 2) { sender.sendMessage("Usage: /authme purge "); return true; } - try { long days = Long.parseLong(args[1]) * 86400000; long until = new Date().getTime() - days; - sender.sendMessage("Deleted " + database.purgeDatabase(until) + " user accounts"); - } catch (NumberFormatException e) { sender.sendMessage("Usage: /authme purge "); return true; } } else if (args[0].equalsIgnoreCase("reload")) { database.reload(); - - //Trying to load config from JAR-Ressources, if config.yml doesn't exist... File newConfigFile = new File("plugins/AuthMe","config.yml"); if (!newConfigFile.exists()) { InputStream fis = getClass().getResourceAsStream("/config.yml"); @@ -186,7 +177,6 @@ public class AdminCommand implements CommandExecutor { final CommandSender fSender = sender; final String[] arguments = args; Bukkit.getScheduler().runTask(plugin, new Runnable() { - @Override public void run() { PlayerAuth pAuth = null; @@ -223,16 +213,13 @@ public class AdminCommand implements CommandExecutor { fSender.sendMessage("[AuthMe] This player is unknown"); return; } - } - }); return true; } else { final CommandSender fSender = sender; final String[] arguments = args; Bukkit.getScheduler().runTask(plugin, new Runnable() { - @Override public void run() { String message = "[AuthMe] "; @@ -262,9 +249,7 @@ public class AdminCommand implements CommandExecutor { fSender.sendMessage("[AuthMe] Please put a valid IP"); return; } - } - }); return true; } @@ -273,16 +258,13 @@ public class AdminCommand implements CommandExecutor { sender.sendMessage("Usage: /authme register playername password"); return true; } - try { String name = args[1].toLowerCase(); String hash = PasswordSecurity.getHash(Settings.getPasswordHash, args[2], name); - if (database.isAuthAvailable(name)) { sender.sendMessage(m._("user_regged")); return true; } - PlayerAuth auth = new PlayerAuth(name, hash, "198.18.0.1", 0); if (!database.saveAuth(auth)) { sender.sendMessage(m._("error")); @@ -304,7 +286,6 @@ public class AdminCommand implements CommandExecutor { } catch (NullPointerException ex) { System.out.println(ex.getMessage()); } - } else if (args[0].equalsIgnoreCase("xauthimport")) { xAuthToFlat converter = new xAuthToFlat(plugin, database); if (converter.convert(sender)) { @@ -312,7 +293,6 @@ public class AdminCommand implements CommandExecutor { } else { sender.sendMessage("[AuthMe] Error while trying to convert from xAuth database"); } - } else if (args[0].equalsIgnoreCase("getemail")) { if (args.length != 2) { sender.sendMessage("Usage: /authme getemail playername"); @@ -322,7 +302,6 @@ public class AdminCommand implements CommandExecutor { PlayerAuth getAuth = PlayerCache.getInstance().getAuth(playername); sender.sendMessage("[AuthMe] " + args[1] + " email : " + getAuth.getEmail()); return true; - } else if (args[0].equalsIgnoreCase("chgemail")) { if (args.length != 3) { sender.sendMessage("Usage: /authme chgemail playername email"); @@ -337,7 +316,6 @@ public class AdminCommand implements CommandExecutor { } PlayerCache.getInstance().updatePlayer(getAuth); return true; - } else if (args[0].equalsIgnoreCase("convertfromrakamak")) { try { RakamakConverter.RakamakConvert(); @@ -348,7 +326,6 @@ public class AdminCommand implements CommandExecutor { } catch (NullPointerException ex) { ConsoleLogger.showError(ex.getMessage()); } - } else if (args[0].equalsIgnoreCase("setspawn")) { try { if (sender instanceof Player) { @@ -361,7 +338,18 @@ public class AdminCommand implements CommandExecutor { } catch (NullPointerException ex) { ConsoleLogger.showError(ex.getMessage()); } - + } else if (args[0].equalsIgnoreCase("purgebannedplayers")) { + List bannedPlayers = new ArrayList(); + for (OfflinePlayer off : plugin.getServer().getBannedPlayers()) { + bannedPlayers.add(off.getName().toLowerCase()); + } + final List bP = bannedPlayers; + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { + @Override + public void run() { + database.purgeBanned(bP); + } + }); } else if (args[0].equalsIgnoreCase("spawn")) { try { if (sender instanceof Player) { @@ -374,17 +362,14 @@ public class AdminCommand implements CommandExecutor { } catch (NullPointerException ex) { ConsoleLogger.showError(ex.getMessage()); } - } else if (args[0].equalsIgnoreCase("changepassword") || args[0].equalsIgnoreCase("cp")) { if (args.length != 3) { sender.sendMessage("Usage: /authme changepassword playername newpassword"); return true; } - try { String name = args[1].toLowerCase(); String hash = PasswordSecurity.getHash(Settings.getPasswordHash, args[2], name); - PlayerAuth auth = null; if (PlayerCache.getInstance().isAuthenticated(name)) { auth = PlayerCache.getInstance().getAuth(name); @@ -395,12 +380,10 @@ public class AdminCommand implements CommandExecutor { return true; } auth.setHash(hash); - if (!database.updatePassword(auth)) { sender.sendMessage(m._("error")); return true; } - sender.sendMessage("pwd_changed"); ConsoleLogger.info(args[1] + "'s password changed"); } catch (NoSuchAlgorithmException ex) { @@ -412,17 +395,13 @@ public class AdminCommand implements CommandExecutor { sender.sendMessage("Usage: /authme unregister playername"); return true; } - String name = args[1].toLowerCase(); - if (!database.removeAuth(name)) { sender.sendMessage(m._("error")); return true; } - PlayerCache.getInstance().removePlayer(name); sender.sendMessage("unregistered"); - ConsoleLogger.info(args[1] + " unregistered"); } else { sender.sendMessage("Usage: /authme reload|register playername password|changepassword playername password|unregister playername"); diff --git a/src/main/java/uk/org/whoami/authme/commands/CaptchaCommand.java b/src/main/java/uk/org/whoami/authme/commands/CaptchaCommand.java index fbb854410..406c4efea 100644 --- a/src/main/java/uk/org/whoami/authme/commands/CaptchaCommand.java +++ b/src/main/java/uk/org/whoami/authme/commands/CaptchaCommand.java @@ -12,33 +12,31 @@ import uk.org.whoami.authme.settings.Messages; import uk.org.whoami.authme.settings.Settings; public class CaptchaCommand implements CommandExecutor { - + public AuthMe plugin; private Messages m = Messages.getInstance(); public static RandomString rdm = new RandomString(Settings.captchaLength); - + public CaptchaCommand(AuthMe plugin) { this.plugin = plugin; } - - + @Override public boolean onCommand(CommandSender sender, Command cmnd, String label, String[] args) { - + if (!(sender instanceof Player)) { return true; } - + Player player = (Player) sender; String name = player.getName().toLowerCase(); - - + if (args.length == 0) { player.sendMessage(m._("usage_captcha")); return true; } - + if (PlayerCache.getInstance().isAuthenticated(name)) { player.sendMessage(m._("logged_in")); return true; @@ -48,12 +46,12 @@ public class CaptchaCommand implements CommandExecutor { player.sendMessage(m._("no_perm")); return true; } - + if (!Settings.useCaptcha) { player.sendMessage(m._("usage_log")); return true; } - + if(!plugin.cap.containsKey(name)) { player.sendMessage(m._("usage_log")); return true; @@ -70,12 +68,9 @@ public class CaptchaCommand implements CommandExecutor { plugin.cap.remove(name); } catch (NullPointerException npe) { } - player.sendMessage("Your captcha is correct"); player.sendMessage(m._("login_msg")); return true; - - } } diff --git a/src/main/java/uk/org/whoami/authme/commands/ChangePasswordCommand.java b/src/main/java/uk/org/whoami/authme/commands/ChangePasswordCommand.java index 32e0c5f4b..2c0d71e52 100644 --- a/src/main/java/uk/org/whoami/authme/commands/ChangePasswordCommand.java +++ b/src/main/java/uk/org/whoami/authme/commands/ChangePasswordCommand.java @@ -37,7 +37,6 @@ import uk.org.whoami.authme.settings.Settings; public class ChangePasswordCommand implements CommandExecutor { private Messages m = Messages.getInstance(); - //private Settings settings = Settings.getInstance(); private DataSource database; public AuthMe plugin; @@ -63,7 +62,7 @@ public class ChangePasswordCommand implements CommandExecutor { player.sendMessage(m._("not_logged_in")); return true; } - + if (args.length != 2) { player.sendMessage(m._("usage_changepassword")); return true; diff --git a/src/main/java/uk/org/whoami/authme/commands/EmailCommand.java b/src/main/java/uk/org/whoami/authme/commands/EmailCommand.java index f686f1189..54830dd18 100644 --- a/src/main/java/uk/org/whoami/authme/commands/EmailCommand.java +++ b/src/main/java/uk/org/whoami/authme/commands/EmailCommand.java @@ -34,25 +34,25 @@ import uk.org.whoami.authme.settings.Settings; /** * - * @author darkwarriors + * @author Xephi59 */ public class EmailCommand implements CommandExecutor { public AuthMe plugin; private DataSource data; private Messages m = Messages.getInstance(); - + public EmailCommand(AuthMe plugin, DataSource data) { this.plugin = plugin; this.data = data; } - + @Override public boolean onCommand(CommandSender sender, Command cmnd, String label, String[] args) { if (!(sender instanceof Player)) { return true; } - + if (!sender.hasPermission("authme." + label.toLowerCase())) { sender.sendMessage(m._("no_perm")); return true; @@ -61,13 +61,13 @@ public class EmailCommand implements CommandExecutor { Player player = (Player) sender; String name = player.getName().toLowerCase(); - if (args.length == 0) { - player.sendMessage("usage: /email add "); - player.sendMessage("usage: /email change "); - player.sendMessage("usage: /email recovery "); - return true; - } - + if (args.length == 0) { + player.sendMessage("usage: /email add "); + player.sendMessage("usage: /email change "); + player.sendMessage("usage: /email recovery "); + return true; + } + if(args[0].equalsIgnoreCase("add")) { if (args.length != 3) { player.sendMessage("[AuthMe] /email add "); @@ -148,7 +148,6 @@ public class EmailCommand implements CommandExecutor { player.sendMessage(m._("logged_in")); return true; } - try { RandomString rand = new RandomString(Settings.getRecoveryPassLength); String thePass = rand.nextString(); @@ -171,19 +170,14 @@ public class EmailCommand implements CommandExecutor { player.sendMessage("[AuthMe] Invalid Email"); return true; } - final String finalhashnew = hashnew; final PlayerAuth finalauth = auth; - - Bukkit.getScheduler().runTask(plugin, new Runnable() { - + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { @Override public void run() { finalauth.setHash(finalhashnew); data.updatePassword(finalauth); - } - }); plugin.mail.main(auth, thePass); player.sendMessage("[AuthMe] Recovery Email Send !"); @@ -198,7 +192,6 @@ public class EmailCommand implements CommandExecutor { player.sendMessage(m._("reg_msg")); } } - return true; } } diff --git a/src/main/java/uk/org/whoami/authme/commands/LoginCommand.java b/src/main/java/uk/org/whoami/authme/commands/LoginCommand.java index 01018725f..e8c8f546b 100644 --- a/src/main/java/uk/org/whoami/authme/commands/LoginCommand.java +++ b/src/main/java/uk/org/whoami/authme/commands/LoginCommand.java @@ -23,13 +23,12 @@ import org.bukkit.entity.Player; import uk.org.whoami.authme.AuthMe; import uk.org.whoami.authme.settings.Messages; -import uk.org.whoami.authme.settings.Settings; public class LoginCommand implements CommandExecutor { private AuthMe plugin; private Messages m = Messages.getInstance(); - + public LoginCommand(AuthMe plugin) { this.plugin = plugin; } @@ -39,13 +38,9 @@ public class LoginCommand implements CommandExecutor { if (!(sender instanceof Player)) { return true; } - - if(!Settings.useCaptcha) { - - } - + final Player player = (Player) sender; - + if (args.length == 0) { player.sendMessage(m._("usage_log")); return true; @@ -56,10 +51,7 @@ public class LoginCommand implements CommandExecutor { return true; } - String result = plugin.management.performLogin(player, args[0]); - if (result != "") player.sendMessage(result); - + plugin.management.performLogin(player, args[0]); return true; } } - diff --git a/src/main/java/uk/org/whoami/authme/commands/LogoutCommand.java b/src/main/java/uk/org/whoami/authme/commands/LogoutCommand.java index 909f414d1..ce6c1d849 100644 --- a/src/main/java/uk/org/whoami/authme/commands/LogoutCommand.java +++ b/src/main/java/uk/org/whoami/authme/commands/LogoutCommand.java @@ -48,12 +48,11 @@ public class LogoutCommand implements CommandExecutor { private Messages m = Messages.getInstance(); private PlayersLogs pllog = PlayersLogs.getInstance(); - //private Settings settings = Settings.getInstance(); private AuthMe plugin; private DataSource database; private Utils utils = Utils.getInstance(); private FileCache playerBackup = new FileCache(); - + public LogoutCommand(AuthMe plugin, DataSource database) { this.plugin = plugin; this.database = database; @@ -78,13 +77,12 @@ public class LogoutCommand implements CommandExecutor { return true; } - //clear session PlayerAuth auth = PlayerCache.getInstance().getAuth(name); auth.setIp("198.18.0.1"); database.updateSession(auth); PlayerCache.getInstance().removePlayer(name); - + LimboCache.getInstance().addLimboPlayer(player , utils.removeAll(player)); LimboCache.getInstance().addLimboPlayer(player); if(Settings.protectInventoryBeforeLogInEnabled) { @@ -117,22 +115,19 @@ public class LogoutCommand implements CommandExecutor { } BukkitTask msgT = sched.runTask(plugin, new MessageTask(plugin, name, m._("login_msg"), interval)); LimboCache.getInstance().getLimboPlayer(name).setMessageTaskId(msgT.getTaskId()); - try { if (PlayersLogs.players.contains(player.getName())) { PlayersLogs.players.remove(player.getName()); pllog.save(); } } catch (NullPointerException npe) { - } - player.sendMessage(m._("logout")); ConsoleLogger.info(player.getDisplayName() + " logged out"); if(plugin.notifications != null) { plugin.notifications.showNotification(new Notification("[AuthMe] " + player.getName() + " logged out!")); } - return true; } + } diff --git a/src/main/java/uk/org/whoami/authme/commands/PasspartuCommand.java b/src/main/java/uk/org/whoami/authme/commands/PasspartuCommand.java index 537de5445..f044f5720 100644 --- a/src/main/java/uk/org/whoami/authme/commands/PasspartuCommand.java +++ b/src/main/java/uk/org/whoami/authme/commands/PasspartuCommand.java @@ -23,7 +23,7 @@ public class PasspartuCommand implements CommandExecutor { private Utils utils = new Utils(); private DataSource database; public AuthMe plugin; - + public PasspartuCommand(DataSource database, AuthMe plugin) { this.database = database; this.plugin = plugin; @@ -31,20 +31,18 @@ public class PasspartuCommand implements CommandExecutor { @Override public boolean onCommand(CommandSender sender, Command cmnd, String label, String[] args) { - + if (PlayerCache.getInstance().isAuthenticated(sender.getName().toLowerCase())) { return true; } - + if ((sender instanceof Player) && args.length == 1) { if(utils.readToken(args[0])) { //bypass login! Management bypass = new Management(database,true, plugin); - String result = bypass.performLogin((Player)sender, "dontneed"); - if (result != "") sender.sendMessage(result); + bypass.performLogin((Player)sender, "dontneed"); return true; } - sender.sendMessage("Time is expired or Token is Wrong!"); return true; } diff --git a/src/main/java/uk/org/whoami/authme/commands/RecoveryCommand.java b/src/main/java/uk/org/whoami/authme/commands/RecoveryCommand.java deleted file mode 100644 index 14bcbb08d..000000000 --- a/src/main/java/uk/org/whoami/authme/commands/RecoveryCommand.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2012 darkwarriors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package uk.org.whoami.authme.commands; - -/** - * - * @author darkwarriors - */ -public class RecoveryCommand { - -} diff --git a/src/main/java/uk/org/whoami/authme/commands/RegisterCommand.java b/src/main/java/uk/org/whoami/authme/commands/RegisterCommand.java index c0b923706..d858cc61b 100644 --- a/src/main/java/uk/org/whoami/authme/commands/RegisterCommand.java +++ b/src/main/java/uk/org/whoami/authme/commands/RegisterCommand.java @@ -21,6 +21,7 @@ import java.util.Date; import me.muizers.Notifications.Notification; import net.md_5.bungee.BungeeCord; +import net.md_5.bungee.api.connection.ProxiedPlayer; import org.bukkit.Bukkit; import org.bukkit.GameMode; @@ -75,21 +76,24 @@ public class RegisterCommand implements CommandExecutor { sender.sendMessage(m._("no_perm")); return true; } - + final Player player = (Player) sender; final String name = player.getName().toLowerCase(); String ipA = player.getAddress().getAddress().getHostAddress(); - + if (Settings.bungee) { try { - ipA = BungeeCord.getInstance().getPlayer(player.getName()).getAddress().getAddress().getHostAddress(); + for (ProxiedPlayer pp : BungeeCord.getInstance().getPlayers()) { + if (pp.getName().toLowerCase() == name) { + ipA = pp.getAddress().getAddress().getHostAddress(); + break; + } + } } catch (NoClassDefFoundError ncdfe) { - ConsoleLogger.showError("Your BungeeCord version is outdated, you need a version with the latest API"); } } - - final String ip = ipA; + final String ip = ipA; if (PlayerCache.getInstance().isAuthenticated(name)) { player.sendMessage(m._("logged_in")); return true; @@ -107,18 +111,14 @@ public class RegisterCommand implements CommandExecutor { } return true; } - // - // Check if player exeded the max number of registration - // - + if(Settings.getmaxRegPerIp > 0 ){ - - if(!sender.hasPermission("authme.allow2accounts") && database.getAllAuthsByIp(ipA).size() >= Settings.getmaxRegPerIp) { - player.sendMessage(m._("max_reg")); + if(!sender.hasPermission("authme.allow2accounts") && database.getAllAuthsByIp(ipA).size() >= Settings.getmaxRegPerIp) { + player.sendMessage(m._("max_reg")); return true; - } - } - + } + } + if(Settings.emailRegistration && !Settings.getmailAccount.isEmpty()) { if(!args[0].contains("@")) { player.sendMessage(m._("usage_reg")); @@ -143,10 +143,8 @@ public class RegisterCommand implements CommandExecutor { } RandomString rand = new RandomString(Settings.getRecoveryPassLength); final String thePass = rand.nextString(); - if (!thePass.isEmpty()) { Bukkit.getScheduler().runTask(plugin, new Runnable() { - @Override public void run() { if (PasswordSecurity.userSalt.containsKey(name)) { @@ -173,10 +171,8 @@ public class RegisterCommand implements CommandExecutor { } } } - }); - if(!Settings.getRegisteredGroup.isEmpty()){ Utils.getInstance().setGroup(player, Utils.groupType.REGISTERED); } @@ -202,16 +198,12 @@ public class RegisterCommand implements CommandExecutor { try { loca = plugin.mv.getMVWorldManager().getMVWorld(world).getSpawnLocation(); } catch (NullPointerException npe) { - } catch (ClassCastException cce) { - } catch (NoClassDefFoundError ncdfe) { - } } if (Spawn.getInstance().getLocation() != null) loca = Spawn.getInstance().getLocation(); - RegisterTeleportEvent tpEvent = new RegisterTeleportEvent(player, loca); plugin.getServer().getPluginManager().callEvent(tpEvent); if(!tpEvent.isCancelled()) { @@ -231,20 +223,16 @@ public class RegisterCommand implements CommandExecutor { return true; } } - + if (args.length == 0 || (Settings.getEnablePasswordVerifier && args.length < 2) ) { player.sendMessage(m._("usage_reg")); return true; } - //System.out.println("pass legth "+args[0].length()); - //System.out.println("pass length permit"+Settings.passwordMaxLength); + if(args[0].length() < Settings.getPasswordMinLen || args[0].length() > Settings.passwordMaxLength) { player.sendMessage(m._("pass_len")); return true; } - - - try { String hash; if(Settings.getEnablePasswordVerifier) { @@ -256,7 +244,6 @@ public class RegisterCommand implements CommandExecutor { } } else hash = PasswordSecurity.getHash(Settings.getPasswordHash, args[0], name); - if (Settings.getMySQLColumnSalt.isEmpty()) { auth = new PlayerAuth(name, hash, ip, new Date().getTime()); @@ -268,7 +255,6 @@ public class RegisterCommand implements CommandExecutor { return true; } PlayerCache.getInstance().addPlayer(auth); - LimboPlayer limbo = LimboCache.getInstance().getLimboPlayer(name); if (limbo != null) { player.setGameMode(GameMode.getByValue(limbo.getGameMode())); @@ -297,13 +283,11 @@ public class RegisterCommand implements CommandExecutor { player.teleport(tpEvent.getTo()); } } - sender.getServer().getScheduler().cancelTask(limbo.getTimeoutTaskId()); sender.getServer().getScheduler().cancelTask(limbo.getMessageTaskId()); LimboCache.getInstance().deleteLimboPlayer(name); } - - + if(!Settings.getRegisteredGroup.isEmpty()){ Utils.getInstance().setGroup(player, Utils.groupType.REGISTERED); } @@ -317,7 +301,6 @@ public class RegisterCommand implements CommandExecutor { if(plugin.notifications != null) { plugin.notifications.showNotification(new Notification("[AuthMe] " + player.getName() + " has registered!")); } - } catch (NoSuchAlgorithmException ex) { ConsoleLogger.showError(ex.getMessage()); sender.sendMessage(m._("error")); diff --git a/src/main/java/uk/org/whoami/authme/commands/UnregisterCommand.java b/src/main/java/uk/org/whoami/authme/commands/UnregisterCommand.java index 62e87c74a..252c1c973 100644 --- a/src/main/java/uk/org/whoami/authme/commands/UnregisterCommand.java +++ b/src/main/java/uk/org/whoami/authme/commands/UnregisterCommand.java @@ -49,11 +49,10 @@ public class UnregisterCommand implements CommandExecutor { private Messages m = Messages.getInstance(); private PlayersLogs pllog = PlayersLogs.getInstance(); - //private Settings settings = Settings.getInstance(); public AuthMe plugin; private DataSource database; private FileCache playerCache = new FileCache(); - + public UnregisterCommand(AuthMe plugin, DataSource database) { this.plugin = plugin; this.database = database; @@ -94,8 +93,6 @@ public class UnregisterCommand implements CommandExecutor { player.saveData(); PlayerCache.getInstance().removePlayer(player.getName().toLowerCase()); LimboCache.getInstance().addLimboPlayer(player); - - int delay = Settings.getRegistrationTimeout * 20; int interval = Settings.getWarnMessageInterval; BukkitScheduler sched = sender.getServer().getScheduler(); @@ -121,8 +118,7 @@ public class UnregisterCommand implements CommandExecutor { // check if Player cache File Exist and delete it, preventing duplication of items if(playerCache.doesCacheExist(name)) { playerCache.removeCache(name); - } - + } if (PlayersLogs.players.contains(player.getName())) { PlayersLogs.players.remove(player.getName()); pllog.save(); diff --git a/src/main/java/uk/org/whoami/authme/converter/FlatToSql.java b/src/main/java/uk/org/whoami/authme/converter/FlatToSql.java index eed144b7b..178554e3e 100644 --- a/src/main/java/uk/org/whoami/authme/converter/FlatToSql.java +++ b/src/main/java/uk/org/whoami/authme/converter/FlatToSql.java @@ -12,15 +12,18 @@ import uk.org.whoami.authme.AuthMe; import uk.org.whoami.authme.ConsoleLogger; import uk.org.whoami.authme.settings.Settings; - +/** +* +* @author Xephi59 +*/ public class FlatToSql { - + public AuthMe instance; - + public FlatToSql (AuthMe instance) { this.instance = instance; } - + public FlatToSql getInstance() { return this; } @@ -34,10 +37,9 @@ public class FlatToSql { private static String lastlocY; private static String lastlocZ; private static String columnEmail; - private static File source; private static File output; - + public static void FlatToSqlConverter() throws IOException { tableName = Settings.getMySQLTablename; columnName = Settings.getMySQLColumnName; @@ -76,9 +78,9 @@ public class FlatToSql { sql.newLine(); String[] args = line.split(":"); if (args.length == 4) - newline = "INSERT INTO " + tableName + " VALUES (" + i + ", '" + args[0] + "', '" + args[1] + "', '" + args[2] + "', " + args[3] + ", 0, 0, 0, " + "your@email.com" + ");"; + newline = "INSERT INTO " + tableName + " VALUES (" + i + ", '" + args[0] + "', '" + args[1] + "', '" + args[2] + "', " + args[3] + ", 0, 0, 0, " + "'your@email.com'" + ");"; else if (args.length == 7) - newline = "INSERT INTO " + tableName + " VALUES (" + i + ", '" + args[0] + "', '" + args[1] + "', '" + args[2] + "', " + args[3] + ", " + args[4] + ", " + args[5] + ", " + args[6] + ", " + "your@email.com" + ");"; + newline = "INSERT INTO " + tableName + " VALUES (" + i + ", '" + args[0] + "', '" + args[1] + "', '" + args[2] + "', " + args[3] + ", " + args[4] + ", " + args[5] + ", " + args[6] + ", " + "'your@email.com'" + ");"; else newline = ""; if (newline != "") @@ -87,8 +89,7 @@ public class FlatToSql { } sql.close(); br.close(); - System.out.println("[AuthMe] The FlatFile has been converted to authme.sql file"); - + ConsoleLogger.info("The FlatFile has been converted to authme.sql file"); } catch (FileNotFoundException ex) { ConsoleLogger.showError(ex.getMessage()); } catch (IOException ex) { diff --git a/src/main/java/uk/org/whoami/authme/converter/RakamakConverter.java b/src/main/java/uk/org/whoami/authme/converter/RakamakConverter.java index a1c21c1d7..546d4e974 100644 --- a/src/main/java/uk/org/whoami/authme/converter/RakamakConverter.java +++ b/src/main/java/uk/org/whoami/authme/converter/RakamakConverter.java @@ -17,15 +17,18 @@ import uk.org.whoami.authme.security.PasswordSecurity; import uk.org.whoami.authme.security.PasswordSecurity.HashAlgorithm; import uk.org.whoami.authme.settings.Settings; - +/** +* +* @author Xephi59 +*/ public class RakamakConverter { - + public AuthMe instance; - + public RakamakConverter (AuthMe instance) { this.instance = instance; } - + public RakamakConverter getInstance() { return this; } @@ -34,12 +37,11 @@ public class RakamakConverter { private static Boolean useIP; private static String fileName; private static String ipFileName; - private static File source; private static File output; private static File ipfiles; private static boolean alreadyExist = false; - + public static void RakamakConvert() throws IOException { hash = Settings.rakamakHash; useIP = Settings.rakamakUseIp; @@ -47,8 +49,6 @@ public class RakamakConverter { ipFileName = Settings.rakamakUsersIp; HashMap playerIP = new HashMap(); HashMap playerPSW = new HashMap(); - - try { source = new File(AuthMe.getInstance().getDataFolder() + File.separator + fileName); ipfiles = new File(AuthMe.getInstance().getDataFolder() + File.separator + ipFileName); @@ -86,8 +86,6 @@ public class RakamakConverter { } } } - - users.close(); outputDB = new BufferedWriter(new FileWriter(output)); for (Entry m : playerPSW.entrySet()) { @@ -96,7 +94,6 @@ public class RakamakConverter { String psw = playerPSW.get(player); String ip = playerIP.get(player); newLine = player + ":" + psw + ":" + ip + ":1325376060:0:0:0"; - } else { String player = m.getKey(); String psw = playerPSW.get(player); @@ -108,14 +105,8 @@ public class RakamakConverter { System.out.println("Write line"); outputDB.newLine(); } - - outputDB.close(); - - System.out.println("[AuthMe] Rakamak database has been converted to auths.db"); - - - + ConsoleLogger.info("Rakamak database has been converted to auths.db"); } catch (FileNotFoundException ex) { ConsoleLogger.showError(ex.getMessage()); } catch (IOException ex) { diff --git a/src/main/java/uk/org/whoami/authme/converter/xAuthToFlat.java b/src/main/java/uk/org/whoami/authme/converter/xAuthToFlat.java index 68746e4b9..255313434 100644 --- a/src/main/java/uk/org/whoami/authme/converter/xAuthToFlat.java +++ b/src/main/java/uk/org/whoami/authme/converter/xAuthToFlat.java @@ -18,16 +18,20 @@ import uk.org.whoami.authme.AuthMe; import uk.org.whoami.authme.cache.auth.PlayerAuth; import uk.org.whoami.authme.datasource.DataSource; +/** +* +* @author Xephi59 +*/ public class xAuthToFlat { public AuthMe instance; public DataSource database; - + public xAuthToFlat(AuthMe instance, DataSource database) { this.instance = instance; this.database = database; } - + public boolean convert(CommandSender sender) { if (instance.getServer().getPluginManager().getPlugin("xAuth") == null) { sender.sendMessage("[AuthMe] xAuth plugin not found"); @@ -41,7 +45,6 @@ public class xAuthToFlat { sender.sendMessage("[AuthMe] Error while import xAuthPlayers"); return false; } - sender.sendMessage("[AuthMe] Starting import..."); for (int id : players) { String pl = getIdPlayer(id); @@ -54,13 +57,12 @@ public class xAuthToFlat { sender.sendMessage("[AuthMe] Import done!"); return true; } - + public String getIdPlayer(int id) { String realPass = ""; Connection conn = xAuth.getPlugin().getDatabaseController().getConnection(); PreparedStatement ps = null; ResultSet rs = null; - try { String sql = String.format("SELECT `playername` FROM `%s` WHERE `id` = ?", xAuth.getPlugin().getDatabaseController().getTable(Table.ACCOUNT)); @@ -69,7 +71,6 @@ public class xAuthToFlat { rs = ps.executeQuery(); if (!rs.next()) return null; - realPass = rs.getString("playername").toLowerCase(); } catch (SQLException e) { xAuthLog.severe("Failed to retrieve name for account: " + id, e); @@ -107,7 +108,6 @@ public class xAuthToFlat { Connection conn = xAuth.getPlugin().getDatabaseController().getConnection(); PreparedStatement ps = null; ResultSet rs = null; - try { String sql = String.format("SELECT `password`, `pwtype` FROM `%s` WHERE `id` = ?", xAuth.getPlugin().getDatabaseController().getTable(Table.ACCOUNT)); @@ -116,7 +116,6 @@ public class xAuthToFlat { rs = ps.executeQuery(); if (!rs.next()) return null; - realPass = rs.getString("password"); } catch (SQLException e) { xAuthLog.severe("Failed to retrieve password hash for account: " + accountId, e); diff --git a/src/main/java/uk/org/whoami/authme/datasource/CacheDataSource.java b/src/main/java/uk/org/whoami/authme/datasource/CacheDataSource.java index 1ea0a4e91..4d443858b 100644 --- a/src/main/java/uk/org/whoami/authme/datasource/CacheDataSource.java +++ b/src/main/java/uk/org/whoami/authme/datasource/CacheDataSource.java @@ -35,7 +35,7 @@ public class CacheDataSource implements DataSource { this.plugin = plugin; this.source = source; } - + @Override public synchronized boolean isAuthAvailable(String user) { return cache.containsKey(user) ? true : source.isAuthAvailable(user); @@ -79,30 +79,26 @@ public class CacheDataSource implements DataSource { } return false; } - + @Override public boolean updateQuitLoc(PlayerAuth auth) { - //System.out.println("[debug name chace non work]"+auth.getNickname()+"[debug loc]"+auth.getQuitLocX()); if (source.updateQuitLoc(auth)) { - //System.out.println("[debug name chace]"+auth.getNickname()+"[debug loc]"+auth.getQuitLocX()); cache.get(auth.getNickname()).setQuitLocX(auth.getQuitLocX()); cache.get(auth.getNickname()).setQuitLocY(auth.getQuitLocY()); cache.get(auth.getNickname()).setQuitLocZ(auth.getQuitLocZ()); return true; - } return false; } - + @Override public int getIps(String ip) { return source.getIps(ip); } - + @Override public int purgeDatabase(long until) { int cleared = source.purgeDatabase(until); - if (cleared > 0) { for (PlayerAuth auth : cache.values()) { if(auth.getLastLogin() < until) { @@ -151,7 +147,7 @@ public class CacheDataSource implements DataSource { } return false; } - + @Override public boolean updateSalt(PlayerAuth auth) { if(source.updateSalt(auth)) { @@ -170,9 +166,19 @@ public class CacheDataSource implements DataSource { public List getAllAuthsByIp(String ip) { return source.getAllAuthsByIp(ip); } - + @Override public List getAllAuthsByEmail(String email) { return source.getAllAuthsByEmail(email); } + + @Override + public void purgeBanned(List banned) { + source.purgeBanned(banned); + for (PlayerAuth auth : cache.values()) { + if (banned.contains(auth.getNickname())) { + cache.remove(auth.getNickname()); + } + } + } } diff --git a/src/main/java/uk/org/whoami/authme/datasource/DataSource.java b/src/main/java/uk/org/whoami/authme/datasource/DataSource.java index 21fc0568b..b3b5a8306 100644 --- a/src/main/java/uk/org/whoami/authme/datasource/DataSource.java +++ b/src/main/java/uk/org/whoami/authme/datasource/DataSource.java @@ -40,23 +40,25 @@ public interface DataSource { int purgeDatabase(long until); boolean removeAuth(String user); - + boolean updateQuitLoc(PlayerAuth auth); - + int getIps(String ip); - + List getAllAuthsByName(PlayerAuth auth); - + List getAllAuthsByIp(String ip); - + List getAllAuthsByEmail(String email); - + boolean updateEmail(PlayerAuth auth); - + boolean updateSalt(PlayerAuth auth); - + void close(); void reload(); - + + void purgeBanned(List banned); + } diff --git a/src/main/java/uk/org/whoami/authme/datasource/FileDataSource.java b/src/main/java/uk/org/whoami/authme/datasource/FileDataSource.java index 436163f83..a169c248b 100644 --- a/src/main/java/uk/org/whoami/authme/datasource/FileDataSource.java +++ b/src/main/java/uk/org/whoami/authme/datasource/FileDataSource.java @@ -32,7 +32,6 @@ import uk.org.whoami.authme.settings.Settings; public class FileDataSource implements DataSource { - /* file layout: * * PLAYERNAME:HASHSUM:IP:LOGININMILLIESECONDS:COORDS @@ -48,7 +47,7 @@ public class FileDataSource implements DataSource { source = new File(Settings.AUTH_FILE); source.createNewFile(); } - + @Override public synchronized boolean isAuthAvailable(String user) { BufferedReader br = null; @@ -83,17 +82,14 @@ public class FileDataSource implements DataSource { if (isAuthAvailable(auth.getNickname())) { return false; } - BufferedWriter bw = null; try { if( auth.getQuitLocY() == 0 ) { bw = new BufferedWriter(new FileWriter(source, true)); bw.write(auth.getNickname() + ":" + auth.getHash() + ":" + auth.getIp() + ":" + auth.getLastLogin() + "\n"); - //System.out.println("[Debug save1] "+auth.getQuitLocY()); } else { bw = new BufferedWriter(new FileWriter(source, true)); - bw.write(auth.getNickname() + ":" + auth.getHash() + ":" + auth.getIp() + ":" + auth.getLastLogin() + ":" + auth.getQuitLocX() + ":" + auth.getQuitLocY() + ":" + auth.getQuitLocZ() + "\n"); - //System.out.println("[Debug save2] "+auth.getQuitLocY()); + bw.write(auth.getNickname() + ":" + auth.getHash() + ":" + auth.getIp() + ":" + auth.getLastLogin() + ":" + auth.getQuitLocX() + ":" + auth.getQuitLocY() + ":" + auth.getQuitLocZ() + "\n"); } } catch (IOException ex) { ConsoleLogger.showError(ex.getMessage()); @@ -114,9 +110,7 @@ public class FileDataSource implements DataSource { if (!isAuthAvailable(auth.getNickname())) { return false; } - PlayerAuth newAuth = null; - BufferedReader br = null; try { br = new BufferedReader(new FileReader(source)); @@ -152,9 +146,7 @@ public class FileDataSource implements DataSource { if (!isAuthAvailable(auth.getNickname())) { return false; } - PlayerAuth newAuth = null; - BufferedReader br = null; try { br = new BufferedReader(new FileReader(source)); @@ -187,13 +179,10 @@ public class FileDataSource implements DataSource { @Override public boolean updateQuitLoc(PlayerAuth auth) { - if (!isAuthAvailable(auth.getNickname())) { return false; } - PlayerAuth newAuth = null; - BufferedReader br = null; try { br = new BufferedReader(new FileReader(source)); @@ -201,7 +190,6 @@ public class FileDataSource implements DataSource { while ((line = br.readLine()) != null) { String[] args = line.split(":"); if (args[0].equals(auth.getNickname())) { - //System.out.println("[Debug update] "+auth.getQuitLocX()); newAuth = new PlayerAuth(args[0], args[1], args[2], Long.parseLong(args[3]), auth.getQuitLocX(), auth.getQuitLocY(), auth.getQuitLocZ()); break; } @@ -224,7 +212,7 @@ public class FileDataSource implements DataSource { saveAuth(newAuth); return true; } - + @Override public int getIps(String ip) { BufferedReader br = null; @@ -234,7 +222,6 @@ public class FileDataSource implements DataSource { String line; while ((line = br.readLine()) != null) { String[] args = line.split(":"); - //System.out.println(ip+" match? "+args[2]); if (args.length > 3 && args[2].equals(ip)) { countIp++; } @@ -255,14 +242,13 @@ public class FileDataSource implements DataSource { } } } - + @Override public int purgeDatabase(long until) { BufferedReader br = null; BufferedWriter bw = null; ArrayList lines = new ArrayList(); int cleared = 0; - try { br = new BufferedReader(new FileReader(source)); String line; @@ -276,7 +262,6 @@ public class FileDataSource implements DataSource { } cleared++; } - bw = new BufferedWriter(new FileWriter(source)); for (String l : lines) { bw.write(l + "\n"); @@ -309,7 +294,6 @@ public class FileDataSource implements DataSource { if (!isAuthAvailable(user)) { return false; } - BufferedReader br = null; BufferedWriter bw = null; ArrayList lines = new ArrayList(); @@ -322,7 +306,6 @@ public class FileDataSource implements DataSource { lines.add(line); } } - bw = new BufferedWriter(new FileWriter(source)); for (String l : lines) { bw.write(l + "\n"); @@ -400,7 +383,7 @@ public class FileDataSource implements DataSource { public boolean updateEmail(PlayerAuth auth) { return false; } - + @Override public boolean updateSalt(PlayerAuth auth) { return false; @@ -415,7 +398,6 @@ public class FileDataSource implements DataSource { String line; while ((line = br.readLine()) != null) { String[] args = line.split(":"); - //System.out.println(ip+" match? "+args[2]); if (args.length > 3 && args[2].equals(auth.getIp())) { countIp.add(args[0]); } @@ -471,4 +453,49 @@ public class FileDataSource implements DataSource { public List getAllAuthsByEmail(String email) { return new ArrayList(); } + + @Override + public void purgeBanned(List banned) { + BufferedReader br = null; + BufferedWriter bw = null; + ArrayList lines = new ArrayList(); + try { + br = new BufferedReader(new FileReader(source)); + String line; + while ((line = br.readLine()) != null) { + String[] args = line.split(":"); + try { + if (banned.contains(args[0])) { + lines.add(line); + } + } catch (NullPointerException npe) {} + catch (ArrayIndexOutOfBoundsException aioobe) {} + } + bw = new BufferedWriter(new FileWriter(source)); + for (String l : lines) { + bw.write(l + "\n"); + } + } catch (FileNotFoundException ex) { + ConsoleLogger.showError(ex.getMessage()); + return; + } catch (IOException ex) { + ConsoleLogger.showError(ex.getMessage()); + return; + } finally { + if (br != null) { + try { + br.close(); + } catch (IOException ex) { + } + } + if (bw != null) { + try { + bw.close(); + } catch (IOException ex) { + } + } + } + return; + } + } diff --git a/src/main/java/uk/org/whoami/authme/datasource/MySQLDataSource.java b/src/main/java/uk/org/whoami/authme/datasource/MySQLDataSource.java index 7999bc18b..08b963979 100644 --- a/src/main/java/uk/org/whoami/authme/datasource/MySQLDataSource.java +++ b/src/main/java/uk/org/whoami/authme/datasource/MySQLDataSource.java @@ -58,7 +58,6 @@ public class MySQLDataSource implements DataSource { this.port = Settings.getMySQLPort; this.username = Settings.getMySQLUsername; this.password = Settings.getMySQLPassword; - this.database = Settings.getMySQLDatabase; this.tableName = Settings.getMySQLTablename; this.columnName = Settings.getMySQLColumnName; @@ -73,7 +72,7 @@ public class MySQLDataSource implements DataSource { this.columnEmail = Settings.getMySQLColumnEmail; this.columnOthers = Settings.getMySQLOtherUsernameColumn; this.columnID = Settings.getMySQLColumnId; - + connect(); setup(); } @@ -87,7 +86,6 @@ public class MySQLDataSource implements DataSource { dataSource.setPort(Integer.parseInt(port)); dataSource.setUser(username); dataSource.setPassword(password); - conPool = new MiniConnectionPoolManager(dataSource, 10); ConsoleLogger.info("Connection pool ready"); } @@ -110,7 +108,6 @@ public class MySQLDataSource implements DataSource { + lastlocZ + " smallint(6) DEFAULT '0'," + columnEmail + " VARCHAR(255) DEFAULT 'your@email.com'," + "CONSTRAINT table_const_prim PRIMARY KEY (" + columnID + "));"); - rs = con.getMetaData().getColumns(null, null, tableName, columnPassword); if (!rs.next()) { st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " @@ -343,7 +340,7 @@ public class MySQLDataSource implements DataSource { } return true; } - + @Override public boolean updateQuitLoc(PlayerAuth auth) { Connection con = null; @@ -368,11 +365,7 @@ public class MySQLDataSource implements DataSource { } return true; } - - // - // Check how many registration by given ip has been done - // - + @Override public int getIps(String ip) { Connection con = null; @@ -401,7 +394,7 @@ public class MySQLDataSource implements DataSource { close(con); } } - + @Override public boolean updateEmail(PlayerAuth auth) { Connection con = null; @@ -424,7 +417,7 @@ public class MySQLDataSource implements DataSource { } return true; } - + @Override public boolean updateSalt(PlayerAuth auth) { if (columnSalt.isEmpty()) { @@ -450,7 +443,7 @@ public class MySQLDataSource implements DataSource { } return true; } - + @Override public synchronized void close() { try { @@ -551,7 +544,7 @@ public class MySQLDataSource implements DataSource { close(con); } } - + @Override public List getAllAuthsByEmail(String email) { Connection con = null; @@ -581,5 +574,23 @@ public class MySQLDataSource implements DataSource { } } + @Override + public void purgeBanned(List banned) { + Connection con = null; + PreparedStatement pst = null; + try { + for (String name : banned) { + con = conPool.getValidConnection(); + pst = con.prepareStatement("DELETE FROM " + tableName + " WHERE " + columnName + "=?;"); + pst.setString(1, name); + pst.executeUpdate(); + } + } catch (SQLException ex) { + ConsoleLogger.showError(ex.getMessage()); + } finally { + close(pst); + close(con); + } + } } diff --git a/src/main/java/uk/org/whoami/authme/datasource/SqliteDataSource.java b/src/main/java/uk/org/whoami/authme/datasource/SqliteDataSource.java index 2abef34fc..5438cbdf1 100644 --- a/src/main/java/uk/org/whoami/authme/datasource/SqliteDataSource.java +++ b/src/main/java/uk/org/whoami/authme/datasource/SqliteDataSource.java @@ -4,7 +4,6 @@ */ package uk.org.whoami.authme.datasource; - import java.sql.*; import java.util.ArrayList; import java.util.List; @@ -43,12 +42,10 @@ public class SqliteDataSource implements DataSource { private Connection con; public SqliteDataSource() throws ClassNotFoundException, SQLException { - //Settings s = Settings.getInstance(); this.host = Settings.getMySQLHost; this.port = Settings.getMySQLPort; this.username = Settings.getMySQLUsername; this.password = Settings.getMySQLPassword; - this.database = Settings.getMySQLDatabase; this.tableName = Settings.getMySQLTablename; this.columnName = Settings.getMySQLColumnName; @@ -63,7 +60,7 @@ public class SqliteDataSource implements DataSource { this.nonActivatedGroup = Settings.getNonActivatedGroup; this.columnEmail = Settings.getMySQLColumnEmail; this.columnID = Settings.getMySQLColumnId; - + connect(); setup(); } @@ -71,13 +68,11 @@ public class SqliteDataSource implements DataSource { private synchronized void connect() throws ClassNotFoundException, SQLException { Class.forName("org.sqlite.JDBC"); ConsoleLogger.info("SQLite driver loaded"); - this.con = DriverManager.getConnection("jdbc:sqlite:plugins/AuthMe/"+database+".db"); } private synchronized void setup() throws SQLException { - //Connection con = null; Statement st = null; ResultSet rs = null; try { @@ -93,7 +88,6 @@ public class SqliteDataSource implements DataSource { + lastlocZ + " smallint(6) DEFAULT '0'," + columnEmail + " VARCHAR(255) DEFAULT 'your@email.com'," + "CONSTRAINT table_const_prim PRIMARY KEY (" + columnID + "));"); - rs = con.getMetaData().getColumns(null, null, tableName, columnPassword); if (!rs.next()) { st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " @@ -126,7 +120,6 @@ public class SqliteDataSource implements DataSource { } finally { close(rs); close(st); - //close(con); } ConsoleLogger.info("SQLite Setup finished"); } @@ -146,33 +139,26 @@ public class SqliteDataSource implements DataSource { } finally { close(rs); close(pst); - //close(con); } } @Override public synchronized PlayerAuth getAuth(String user) { - //Connection con = null; PreparedStatement pst = null; ResultSet rs = null; try { - pst = con.prepareStatement("SELECT * FROM " + tableName + " WHERE " + columnName + "=?;"); pst.setString(1, user); rs = pst.executeQuery(); if (rs.next()) { if (rs.getString(columnIp).isEmpty() ) { - //System.out.println("[Authme Debug] ColumnIp is empty"); return new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword), "198.18.0.1", rs.getLong(columnLastLogin), rs.getInt(lastlocX), rs.getInt(lastlocY), rs.getInt(lastlocZ), rs.getString(columnEmail)); } else { if(!columnSalt.isEmpty()){ - //System.out.println("[Authme Debug] column Salt is" + rs.getString(columnSalt)); return new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword),rs.getString(columnSalt), rs.getInt(columnGroup), rs.getString(columnIp), rs.getLong(columnLastLogin), rs.getInt(lastlocX), rs.getInt(lastlocY), rs.getInt(lastlocZ), rs.getString(columnEmail)); } else { - //System.out.println("[Authme Debug] column Salt is empty"); return new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword), rs.getString(columnIp), rs.getLong(columnLastLogin), rs.getInt(lastlocX), rs.getInt(lastlocY), rs.getInt(lastlocZ), rs.getString(columnEmail)); - } } } else { @@ -184,13 +170,11 @@ public class SqliteDataSource implements DataSource { } finally { close(rs); close(pst); - //close(con); } } @Override public synchronized boolean saveAuth(PlayerAuth auth) { - //Connection con = null; PreparedStatement pst = null; try { if (columnSalt.isEmpty() && auth.getSalt().isEmpty()) { @@ -214,14 +198,12 @@ public class SqliteDataSource implements DataSource { return false; } finally { close(pst); - //close(con); } return true; } @Override public synchronized boolean updatePassword(PlayerAuth auth) { - //Connection con = null; PreparedStatement pst = null; try { pst = con.prepareStatement("UPDATE " + tableName + " SET " + columnPassword + "=? WHERE " + columnName + "=?;"); @@ -233,14 +215,12 @@ public class SqliteDataSource implements DataSource { return false; } finally { close(pst); - //close(con); } return true; } @Override public boolean updateSession(PlayerAuth auth) { - //Connection con = null; PreparedStatement pst = null; try { pst = con.prepareStatement("UPDATE " + tableName + " SET " + columnIp + "=?, " + columnLastLogin + "=? WHERE " + columnName + "=?;"); @@ -253,14 +233,12 @@ public class SqliteDataSource implements DataSource { return false; } finally { close(pst); - //close(con); } return true; } @Override public int purgeDatabase(long until) { - //Connection con = null; PreparedStatement pst = null; try { @@ -272,16 +250,13 @@ public class SqliteDataSource implements DataSource { return 0; } finally { close(pst); - //close(con); } } @Override public synchronized boolean removeAuth(String user) { - //Connection con = null; PreparedStatement pst = null; try { - pst = con.prepareStatement("DELETE FROM " + tableName + " WHERE " + columnName + "=?;"); pst.setString(1, user); pst.executeUpdate(); @@ -290,17 +265,14 @@ public class SqliteDataSource implements DataSource { return false; } finally { close(pst); - //close(con); } return true; } - + @Override public boolean updateQuitLoc(PlayerAuth auth) { - //Connection con = null; PreparedStatement pst = null; try { - pst = con.prepareStatement("UPDATE " + tableName + " SET " + lastlocX + "=?, "+ lastlocY +"=?, "+ lastlocZ +"=? WHERE " + columnName + "=?;"); pst.setLong(1, auth.getQuitLocX()); pst.setLong(2, auth.getQuitLocY()); @@ -312,23 +284,16 @@ public class SqliteDataSource implements DataSource { return false; } finally { close(pst); - //close(con); } return true; } - - // - // Check how many registration by given ip has been done - // - + @Override public int getIps(String ip) { - //Connection con = null; PreparedStatement pst = null; ResultSet rs = null; int countIp=0; try { - pst = con.prepareStatement("SELECT * FROM " + tableName + " WHERE " + columnIp + "=?;"); pst.setString(1, ip); @@ -343,13 +308,11 @@ public class SqliteDataSource implements DataSource { } finally { close(rs); close(pst); - //close(con); } } - + @Override public boolean updateEmail(PlayerAuth auth) { - //Connection con = null; PreparedStatement pst = null; try { pst = con.prepareStatement("UPDATE " + tableName + " SET " + columnEmail + "=? WHERE " + columnName + "=?;"); @@ -361,17 +324,15 @@ public class SqliteDataSource implements DataSource { return false; } finally { close(pst); - //close(con); } return true; } - + @Override public boolean updateSalt(PlayerAuth auth) { if(columnSalt.isEmpty()) { return false; } - //Connection con = null; PreparedStatement pst = null; try { pst = con.prepareStatement("UPDATE " + tableName + " SET " + columnSalt + "=? WHERE " + columnName + "=?;"); @@ -383,11 +344,10 @@ public class SqliteDataSource implements DataSource { return false; } finally { close(pst); - //close(con); } return true; } - + @Override public synchronized void close() { try { @@ -456,7 +416,6 @@ public class SqliteDataSource implements DataSource { } finally { close(rs); close(pst); - //close(con); } } @@ -485,10 +444,9 @@ public class SqliteDataSource implements DataSource { } finally { close(rs); close(pst); - //close(con); } } - + @Override public List getAllAuthsByEmail(String email) { PreparedStatement pst = null; @@ -516,5 +474,21 @@ public class SqliteDataSource implements DataSource { close(pst); } } - + + @Override + public void purgeBanned(List banned) { + PreparedStatement pst = null; + try { + for (String name : banned) { + pst = con.prepareStatement("DELETE FROM " + tableName + " WHERE " + columnName + "=?;"); + pst.setString(1, name); + pst.executeUpdate(); + } + } catch (SQLException ex) { + ConsoleLogger.showError(ex.getMessage()); + } finally { + close(pst); + } + } + } diff --git a/src/main/java/uk/org/whoami/authme/debug/CardboardBox.java b/src/main/java/uk/org/whoami/authme/debug/CardboardBox.java index 161d8d244..dce062740 100644 --- a/src/main/java/uk/org/whoami/authme/debug/CardboardBox.java +++ b/src/main/java/uk/org/whoami/authme/debug/CardboardBox.java @@ -15,10 +15,8 @@ import org.bukkit.inventory.ItemStack; public class CardboardBox implements Serializable { private static final long serialVersionUID = 729890133797629668L; - private final int type, amount; private final short damage; - private final HashMap enchants; public CardboardBox(ItemStack item) { diff --git a/src/main/java/uk/org/whoami/authme/debug/CardboardEnchantment.java b/src/main/java/uk/org/whoami/authme/debug/CardboardEnchantment.java index c056ac2d3..e1da30c5e 100644 --- a/src/main/java/uk/org/whoami/authme/debug/CardboardEnchantment.java +++ b/src/main/java/uk/org/whoami/authme/debug/CardboardEnchantment.java @@ -22,4 +22,5 @@ public class CardboardEnchantment implements Serializable { public Enchantment unbox() { return Enchantment.getById(this.id); } -} \ No newline at end of file + +} diff --git a/src/main/java/uk/org/whoami/authme/events/AuthMeTeleportEvent.java b/src/main/java/uk/org/whoami/authme/events/AuthMeTeleportEvent.java index be6ea5b0d..7f8b9a333 100644 --- a/src/main/java/uk/org/whoami/authme/events/AuthMeTeleportEvent.java +++ b/src/main/java/uk/org/whoami/authme/events/AuthMeTeleportEvent.java @@ -3,12 +3,16 @@ package uk.org.whoami.authme.events; import org.bukkit.Location; import org.bukkit.entity.Player; +/** +* +* @author Xephi59 +*/ public class AuthMeTeleportEvent extends CustomEvent { - + private Player player; private Location to; private Location from; - + public AuthMeTeleportEvent(Player player, Location to) { this.player = player; this.from = player.getLocation(); diff --git a/src/main/java/uk/org/whoami/authme/events/CustomEvent.java b/src/main/java/uk/org/whoami/authme/events/CustomEvent.java index b5f610e0c..31bdee99c 100644 --- a/src/main/java/uk/org/whoami/authme/events/CustomEvent.java +++ b/src/main/java/uk/org/whoami/authme/events/CustomEvent.java @@ -4,31 +4,32 @@ import org.bukkit.Server; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; +/** +* +* @author Xephi59 +*/ public class CustomEvent extends Event { - - + private boolean isCancelled; private static final HandlerList handlers = new HandlerList(); private static Server s; - public HandlerList getHandlers() { return handlers; } - + public static HandlerList getHandlerList() { return handlers; } - + public boolean isCancelled() { return this.isCancelled; } - + public void setCancelled(boolean cancelled) { this.isCancelled = cancelled; } - public static Server getServer() { return s; } diff --git a/src/main/java/uk/org/whoami/authme/events/LoginEvent.java b/src/main/java/uk/org/whoami/authme/events/LoginEvent.java index 4c6cca342..b7d0f7d42 100644 --- a/src/main/java/uk/org/whoami/authme/events/LoginEvent.java +++ b/src/main/java/uk/org/whoami/authme/events/LoginEvent.java @@ -2,21 +2,24 @@ package uk.org.whoami.authme.events; import org.bukkit.entity.Player; +/** +* +* @author Xephi59 +*/ public class LoginEvent extends UncancellableEvent { - private Player player; private boolean isLogin; - + public LoginEvent(Player player, boolean isLogin) { this.player = player; this.isLogin = isLogin; } - + public Player getPlayer() { return this.player; } - + public void setPlayer(Player player) { this.player = player; } @@ -28,4 +31,5 @@ public class LoginEvent extends UncancellableEvent { public boolean isLogin() { return isLogin; } + } diff --git a/src/main/java/uk/org/whoami/authme/events/ProtectInventoryEvent.java b/src/main/java/uk/org/whoami/authme/events/ProtectInventoryEvent.java index b6fd1551b..db4ca2610 100644 --- a/src/main/java/uk/org/whoami/authme/events/ProtectInventoryEvent.java +++ b/src/main/java/uk/org/whoami/authme/events/ProtectInventoryEvent.java @@ -5,20 +5,24 @@ import org.bukkit.inventory.ItemStack; import uk.org.whoami.authme.api.API; +/** +* +* @author Xephi59 +*/ public class ProtectInventoryEvent extends CustomEvent { - + private ItemStack[] storedinventory; private ItemStack[] storedarmor; private ItemStack[] emptyInventory = null; private ItemStack[] emptyArmor = null; private Player player; - + public ProtectInventoryEvent(Player player, ItemStack[] storedinventory, ItemStack[] storedarmor) { this.player = player; this.storedinventory = storedinventory; this.storedarmor = storedarmor; } - + public ProtectInventoryEvent(Player player, ItemStack[] storedinventory, ItemStack[] storedarmor, int newInventory, int newArmor) { this.player = player; this.storedinventory = storedinventory; @@ -31,11 +35,11 @@ public class ProtectInventoryEvent extends CustomEvent { public ItemStack[] getStoredInventory() { return this.storedinventory; } - + public ItemStack[] getStoredArmor() { return this.storedarmor; } - + public Player getPlayer() { return this.player; } @@ -55,4 +59,5 @@ public class ProtectInventoryEvent extends CustomEvent { public ItemStack[] getEmptyArmor() { return this.emptyArmor; } + } diff --git a/src/main/java/uk/org/whoami/authme/events/RegisterTeleportEvent.java b/src/main/java/uk/org/whoami/authme/events/RegisterTeleportEvent.java index e2e8b9a59..fb553b909 100644 --- a/src/main/java/uk/org/whoami/authme/events/RegisterTeleportEvent.java +++ b/src/main/java/uk/org/whoami/authme/events/RegisterTeleportEvent.java @@ -3,12 +3,16 @@ package uk.org.whoami.authme.events; import org.bukkit.Location; import org.bukkit.entity.Player; +/** +* +* @author Xephi59 +*/ public class RegisterTeleportEvent extends CustomEvent { private Player player; private Location to; private Location from; - + public RegisterTeleportEvent(Player player, Location to) { this.player = player; this.from = player.getLocation(); @@ -26,4 +30,5 @@ public class RegisterTeleportEvent extends CustomEvent { public Location getFrom() { return from; } + } diff --git a/src/main/java/uk/org/whoami/authme/events/ResetInventoryEvent.java b/src/main/java/uk/org/whoami/authme/events/ResetInventoryEvent.java index e2eff2098..cbb6f8237 100644 --- a/src/main/java/uk/org/whoami/authme/events/ResetInventoryEvent.java +++ b/src/main/java/uk/org/whoami/authme/events/ResetInventoryEvent.java @@ -5,20 +5,25 @@ import org.bukkit.inventory.ItemStack; import uk.org.whoami.authme.api.API; +/** +* +* @author Xephi59 +*/ public class ResetInventoryEvent extends CustomEvent { - + private Player player; - + public ResetInventoryEvent(Player player) { this.player = player; API.setPlayerInventory(player, new ItemStack[36], new ItemStack[4]); } - + public Player getPlayer() { return this.player; } - + public void setPlayer(Player player) { this.player = player; } + } diff --git a/src/main/java/uk/org/whoami/authme/events/RestoreInventoryEvent.java b/src/main/java/uk/org/whoami/authme/events/RestoreInventoryEvent.java index b2232195c..c14423152 100644 --- a/src/main/java/uk/org/whoami/authme/events/RestoreInventoryEvent.java +++ b/src/main/java/uk/org/whoami/authme/events/RestoreInventoryEvent.java @@ -3,12 +3,16 @@ package uk.org.whoami.authme.events; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +/** +* +* @author Xephi59 +*/ public class RestoreInventoryEvent extends CustomEvent { - + private ItemStack[] inventory; private ItemStack[] armor; private Player player; - + public RestoreInventoryEvent(Player player, ItemStack[] inventory, ItemStack[] armor) { this.player = player; this.inventory = inventory; @@ -18,24 +22,25 @@ public class RestoreInventoryEvent extends CustomEvent { public ItemStack[] getInventory() { return this.inventory; } - + public void setInventory(ItemStack[] inventory) { this.inventory = inventory; } - + public ItemStack[] getArmor() { return this.armor; } - + public void setArmor(ItemStack[] armor) { this.armor = armor; } - + public Player getPlayer() { return this.player; } - + public void setPlayer(Player player) { this.player = player; } + } diff --git a/src/main/java/uk/org/whoami/authme/events/SessionEvent.java b/src/main/java/uk/org/whoami/authme/events/SessionEvent.java index 9b88cd3a8..0259716d0 100644 --- a/src/main/java/uk/org/whoami/authme/events/SessionEvent.java +++ b/src/main/java/uk/org/whoami/authme/events/SessionEvent.java @@ -2,21 +2,24 @@ package uk.org.whoami.authme.events; import uk.org.whoami.authme.cache.auth.PlayerAuth; +/** +* +* @author Xephi59 +*/ public class SessionEvent extends CustomEvent { - private PlayerAuth player; private boolean isLogin; - + public SessionEvent(PlayerAuth auth, boolean isLogin) { this.player = auth; this.isLogin = isLogin; } - + public PlayerAuth getPlayerAuth() { return this.player; } - + public void setPlayer(PlayerAuth player) { this.player = player; } @@ -24,4 +27,5 @@ public class SessionEvent extends CustomEvent { public boolean isLogin() { return isLogin; } + } diff --git a/src/main/java/uk/org/whoami/authme/events/SpawnTeleportEvent.java b/src/main/java/uk/org/whoami/authme/events/SpawnTeleportEvent.java index 7bbfc6288..f615b618f 100644 --- a/src/main/java/uk/org/whoami/authme/events/SpawnTeleportEvent.java +++ b/src/main/java/uk/org/whoami/authme/events/SpawnTeleportEvent.java @@ -3,13 +3,17 @@ package uk.org.whoami.authme.events; import org.bukkit.Location; import org.bukkit.entity.Player; +/** +* +* @author Xephi59 +*/ public class SpawnTeleportEvent extends CustomEvent { - + private Player player; private Location to; private Location from; private boolean isAuthenticated; - + public SpawnTeleportEvent(Player player, Location from, Location to, boolean isAuthenticated) { this.player = player; this.from = from; diff --git a/src/main/java/uk/org/whoami/authme/events/StoreInventoryEvent.java b/src/main/java/uk/org/whoami/authme/events/StoreInventoryEvent.java index 1d5a11a83..a7387f241 100644 --- a/src/main/java/uk/org/whoami/authme/events/StoreInventoryEvent.java +++ b/src/main/java/uk/org/whoami/authme/events/StoreInventoryEvent.java @@ -5,19 +5,22 @@ import org.bukkit.inventory.ItemStack; import uk.org.whoami.authme.cache.backup.FileCache; +/** +* +* @author Xephi59 +*/ public class StoreInventoryEvent extends CustomEvent { - private ItemStack[] inventory; private ItemStack[] armor; private Player player; - + public StoreInventoryEvent(Player player) { this.player = player; this.inventory = player.getInventory().getContents(); this.armor = player.getInventory().getArmorContents(); } - + public StoreInventoryEvent(Player player, FileCache fileCache) { this.player = player; this.inventory = fileCache.readCache(player.getName().toLowerCase()).getInventory(); @@ -27,24 +30,25 @@ public class StoreInventoryEvent extends CustomEvent { public ItemStack[] getInventory() { return this.inventory; } - + public void setInventory(ItemStack[] inventory) { this.inventory = inventory; } - + public ItemStack[] getArmor() { return this.armor; } - + public void setArmor(ItemStack[] armor) { this.armor = armor; } - + public Player getPlayer() { return this.player; } - + public void setPlayer(Player player) { this.player = player; } + } diff --git a/src/main/java/uk/org/whoami/authme/events/UncancellableEvent.java b/src/main/java/uk/org/whoami/authme/events/UncancellableEvent.java index 1c6f17e40..c746ac73b 100644 --- a/src/main/java/uk/org/whoami/authme/events/UncancellableEvent.java +++ b/src/main/java/uk/org/whoami/authme/events/UncancellableEvent.java @@ -4,21 +4,23 @@ import org.bukkit.Server; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; +/** +* +* @author Xephi59 +*/ public class UncancellableEvent extends Event { - - + private static final HandlerList handlers = new HandlerList(); private static Server s; - public HandlerList getHandlers() { return handlers; } - + public static HandlerList getHandlerList() { return handlers; } - + public static Server getServer() { return s; } diff --git a/src/main/java/uk/org/whoami/authme/filter/ConsoleFilter.java b/src/main/java/uk/org/whoami/authme/filter/ConsoleFilter.java index 190495737..b86512080 100644 --- a/src/main/java/uk/org/whoami/authme/filter/ConsoleFilter.java +++ b/src/main/java/uk/org/whoami/authme/filter/ConsoleFilter.java @@ -3,10 +3,14 @@ package uk.org.whoami.authme.filter; import java.util.logging.Filter; import java.util.logging.LogRecord; +/** +* +* @author Xephi59 +*/ public class ConsoleFilter implements Filter { public ConsoleFilter() {} - + @Override public boolean isLoggable(LogRecord record) { String logM = record.getMessage().toLowerCase(); @@ -17,7 +21,5 @@ public class ConsoleFilter implements Filter { record.setMessage(playername + " issued an AuthMe command!"); return true; } - - - + } diff --git a/src/main/java/uk/org/whoami/authme/gui/CustomButton.java b/src/main/java/uk/org/whoami/authme/gui/CustomButton.java index 67ad0695d..9ba873a85 100644 --- a/src/main/java/uk/org/whoami/authme/gui/CustomButton.java +++ b/src/main/java/uk/org/whoami/authme/gui/CustomButton.java @@ -6,7 +6,7 @@ import org.getspout.spoutapi.gui.GenericButton; public class CustomButton extends GenericButton { public Clickable handleRef = null; - + public CustomButton(Clickable c) { handleRef = c; } @@ -15,7 +15,7 @@ public class CustomButton extends GenericButton public void onButtonClick(ButtonClickEvent event) { handleRef.handleClick(event); } - + public CustomButton setMidPos(int x, int y) { this.setX(x) @@ -24,4 +24,5 @@ public class CustomButton extends GenericButton .shiftYPos(-(height / 2)); return this; } + } diff --git a/src/main/java/uk/org/whoami/authme/gui/screens/LoginScreen.java b/src/main/java/uk/org/whoami/authme/gui/screens/LoginScreen.java index 91e9b13f3..654445267 100644 --- a/src/main/java/uk/org/whoami/authme/gui/screens/LoginScreen.java +++ b/src/main/java/uk/org/whoami/authme/gui/screens/LoginScreen.java @@ -27,7 +27,6 @@ public class LoginScreen extends GenericPopup implements Clickable{ public AuthMe plugin = AuthMe.getInstance(); private SpoutCfg spoutCfg = SpoutCfg.getInstance(); - private CustomButton exitBtn; private CustomButton loginBtn; private GenericTextField passBox; @@ -35,17 +34,16 @@ public class LoginScreen extends GenericPopup implements Clickable{ private GenericLabel textLbl; private GenericLabel errorLbl; - String exitTxt = spoutCfg.getString("LoginScreen.exit button"); //"Quit"; - String loginTxt = spoutCfg.getString("LoginScreen.login button"); //"Login"; - String exitMsg = spoutCfg.getString("LoginScreen.exit message"); //"Good Bye"; - String title = spoutCfg.getString("LoginScreen.title"); //"LOGIN" + String exitTxt = spoutCfg.getString("LoginScreen.exit button"); + String loginTxt = spoutCfg.getString("LoginScreen.login button"); + String exitMsg = spoutCfg.getString("LoginScreen.exit message"); + String title = spoutCfg.getString("LoginScreen.title"); @SuppressWarnings("unchecked") List textlines = (List) spoutCfg.getList("LoginScreen.text"); public SpoutPlayer splayer; - + public LoginScreen(SpoutPlayer player) { this.splayer = player; - createScreen(); } @@ -53,7 +51,6 @@ public class LoginScreen extends GenericPopup implements Clickable{ int objects = textlines.size() + 4; int part = !(textlines.size() <= 5) ? 195 / objects : 20; int h = 3*part/4, w = 8*part; - titleLbl = new GenericLabel(); titleLbl .setText(title) @@ -64,7 +61,6 @@ public class LoginScreen extends GenericPopup implements Clickable{ .setX(maxWidth / 2 ) .setY(25); this.attachWidget(plugin, titleLbl); - int ystart = 25 + h + part/2; for (int x=0; x gameMode = new HashMap(); private Utils utils = Utils.getInstance(); @@ -96,8 +95,7 @@ public class AuthMePlayerListener implements Listener { Player player = event.getPlayer(); String name = player.getName().toLowerCase(); - - + if (Utils.getInstance().isUnrestricted(player)) { return; } @@ -122,30 +120,28 @@ public class AuthMePlayerListener implements Listener { if (cmd.equalsIgnoreCase("/login") || cmd.equalsIgnoreCase("/register") || cmd.equalsIgnoreCase("/passpartu") || cmd.equalsIgnoreCase("/l") || cmd.equalsIgnoreCase("/reg") || cmd.equalsIgnoreCase("/email") || cmd.equalsIgnoreCase("/captcha")) { return; } - if (Settings.allowCommands.contains(cmd)) { return; } - event.setMessage("/notloggedin"); event.setCancelled(true); } - + @EventHandler( priority = EventPriority.NORMAL) public void onPlayerNormalChat(AsyncPlayerChatEvent event) { if (event.isCancelled() || event.getPlayer() == null) { return; } - + final Player player = event.getPlayer(); final String name = player.getName().toLowerCase(); - + if(plugin.CitizensVersion != 0) { if (plugin.getCitizensCommunicator().isNPC(player, plugin)) { return; } } - + if(plugin.CombatTag != 0) { if (CombatTagComunicator.isNPC(player)) { return; @@ -159,7 +155,7 @@ public class AuthMePlayerListener implements Listener { if (PlayerCache.getInstance().isAuthenticated(name)) { return; } - + String cmd = event.getMessage().split(" ")[0]; if (!Settings.isChatAllowed && !(Settings.allowCommands.contains(cmd))) { @@ -167,7 +163,7 @@ public class AuthMePlayerListener implements Listener { event.setCancelled(true); return; } - + if (!event.isAsynchronous()) { if (data.isAuthAvailable(name)) { player.sendMessage(m._("login_msg")); @@ -178,7 +174,6 @@ public class AuthMePlayerListener implements Listener { player.sendMessage(m._("reg_msg")); } } else { - Bukkit.getScheduler().runTask(plugin, new Runnable() { @Override @@ -193,14 +188,13 @@ public class AuthMePlayerListener implements Listener { }}); } } - + @EventHandler( priority = EventPriority.HIGH) public void onPlayerHighChat(AsyncPlayerChatEvent event) { if (event.isCancelled() || event.getPlayer() == null) { return; } - - + final Player player = event.getPlayer(); final String name = player.getName().toLowerCase(); @@ -223,7 +217,7 @@ public class AuthMePlayerListener implements Listener { if (PlayerCache.getInstance().isAuthenticated(name)) { return; } - + String cmd = event.getMessage().split(" ")[0]; if (!Settings.isChatAllowed && !(Settings.allowCommands.contains(cmd))) { @@ -231,7 +225,7 @@ public class AuthMePlayerListener implements Listener { event.setCancelled(true); return; } - + if (!event.isAsynchronous()) { if (data.isAuthAvailable(name)) { player.sendMessage(m._("login_msg")); @@ -242,7 +236,6 @@ public class AuthMePlayerListener implements Listener { player.sendMessage(m._("reg_msg")); } } else { - Bukkit.getScheduler().runTask(plugin, new Runnable() { @Override @@ -257,14 +250,13 @@ public class AuthMePlayerListener implements Listener { }}); } } - + @EventHandler( priority = EventPriority.MONITOR) public void onPlayerChat(AsyncPlayerChatEvent event) { if (event.isCancelled() || event.getPlayer() == null) { return; } - - + final Player player = event.getPlayer(); final String name = player.getName().toLowerCase(); @@ -287,7 +279,7 @@ public class AuthMePlayerListener implements Listener { if (PlayerCache.getInstance().isAuthenticated(name)) { return; } - + String cmd = event.getMessage().split(" ")[0]; if (!Settings.isChatAllowed && !(Settings.allowCommands.contains(cmd))) { @@ -295,7 +287,7 @@ public class AuthMePlayerListener implements Listener { event.setCancelled(true); return; } - + if (!event.isAsynchronous()) { if (data.isAuthAvailable(name)) { player.sendMessage(m._("login_msg")); @@ -306,7 +298,6 @@ public class AuthMePlayerListener implements Listener { player.sendMessage(m._("reg_msg")); } } else { - Bukkit.getScheduler().runTask(plugin, new Runnable() { @Override @@ -321,14 +312,13 @@ public class AuthMePlayerListener implements Listener { }}); } } - + @EventHandler( priority = EventPriority.HIGHEST) public void onPlayerHighestChat(AsyncPlayerChatEvent event) { if (event.isCancelled() || event.getPlayer() == null) { return; } - - + final Player player = event.getPlayer(); final String name = player.getName().toLowerCase(); @@ -351,7 +341,7 @@ public class AuthMePlayerListener implements Listener { if (PlayerCache.getInstance().isAuthenticated(name)) { return; } - + String cmd = event.getMessage().split(" ")[0]; if (!Settings.isChatAllowed && !(Settings.allowCommands.contains(cmd))) { @@ -359,7 +349,7 @@ public class AuthMePlayerListener implements Listener { event.setCancelled(true); return; } - + if (!event.isAsynchronous()) { if (data.isAuthAvailable(name)) { player.sendMessage(m._("login_msg")); @@ -370,7 +360,6 @@ public class AuthMePlayerListener implements Listener { player.sendMessage(m._("reg_msg")); } } else { - Bukkit.getScheduler().runTask(plugin, new Runnable() { @Override @@ -385,15 +374,13 @@ public class AuthMePlayerListener implements Listener { }}); } } - - + @EventHandler( priority = EventPriority.LOWEST) public void onPlayerEarlyChat(AsyncPlayerChatEvent event) { if (event.isCancelled() || event.getPlayer() == null) { return; } - - + final Player player = event.getPlayer(); final String name = player.getName().toLowerCase(); @@ -416,7 +403,7 @@ public class AuthMePlayerListener implements Listener { if (PlayerCache.getInstance().isAuthenticated(name)) { return; } - + String cmd = event.getMessage().split(" ")[0]; if (!Settings.isChatAllowed && !(Settings.allowCommands.contains(cmd))) { @@ -424,7 +411,7 @@ public class AuthMePlayerListener implements Listener { event.setCancelled(true); return; } - + if (!event.isAsynchronous()) { if (data.isAuthAvailable(name)) { player.sendMessage(m._("login_msg")); @@ -435,7 +422,6 @@ public class AuthMePlayerListener implements Listener { player.sendMessage(m._("reg_msg")); } } else { - Bukkit.getScheduler().runTask(plugin, new Runnable() { @Override @@ -456,8 +442,7 @@ public class AuthMePlayerListener implements Listener { if (event.isCancelled() || event.getPlayer() == null) { return; } - - + final Player player = event.getPlayer(); final String name = player.getName().toLowerCase(); @@ -480,7 +465,7 @@ public class AuthMePlayerListener implements Listener { if (PlayerCache.getInstance().isAuthenticated(name)) { return; } - + String cmd = event.getMessage().split(" ")[0]; if (!Settings.isChatAllowed && !(Settings.allowCommands.contains(cmd))) { @@ -488,7 +473,7 @@ public class AuthMePlayerListener implements Listener { event.setCancelled(true); return; } - + if (!event.isAsynchronous()) { if (data.isAuthAvailable(name)) { player.sendMessage(m._("login_msg")); @@ -499,7 +484,6 @@ public class AuthMePlayerListener implements Listener { player.sendMessage(m._("reg_msg")); } } else { - Bukkit.getScheduler().runTask(plugin, new Runnable() { @Override @@ -520,7 +504,6 @@ public class AuthMePlayerListener implements Listener { if (event.isCancelled() || event.getPlayer() == null) { return; } - Player player = event.getPlayer(); String name = player.getName().toLowerCase(); @@ -536,7 +519,7 @@ public class AuthMePlayerListener implements Listener { if (!Settings.isForcedRegistrationEnabled) { return; } - + if (!Settings.isMovementAllowed) { event.setTo(event.getFrom()); return; @@ -545,7 +528,6 @@ public class AuthMePlayerListener implements Listener { if (Settings.getMovementRadius == 0) { return; } - int radius = Settings.getMovementRadius; Location spawn = player.getWorld().getSpawnLocation(); @@ -559,62 +541,44 @@ public class AuthMePlayerListener implements Listener { } if (Spawn.getInstance().getLocation() != null) spawn = Spawn.getInstance().getLocation(); - + if ((spawn.distance(player.getLocation()) > radius) ) { event.getPlayer().teleport(spawn); } - } - + @EventHandler(priority = EventPriority.HIGHEST) public void onPlayerLogin(PlayerLoginEvent event) { final Player player = event.getPlayer(); final String name = player.getName().toLowerCase(); - + if (plugin.getCitizensCommunicator().isNPC(player, plugin) || Utils.getInstance().isUnrestricted(player) || CombatTagComunicator.isNPC(player)) { return; } - + if (player.isOnline() && Settings.isForceSingleSessionEnabled) { event.disallow(PlayerLoginEvent.Result.KICK_OTHER, m._("same_nick")); return; } - - if(!event.isAsynchronous()) { - if(data.isAuthAvailable(name) && !LimboCache.getInstance().hasLimboPlayer(name)) { - if(!Settings.isSessionsEnabled) { - LimboCache.getInstance().addLimboPlayer(player , utils.removeAll(player)); - } else if(PlayerCache.getInstance().isAuthenticated(name)) { - if(!Settings.sessionExpireOnIpChange) - if(LimboCache.getInstance().hasLimboPlayer(player.getName().toLowerCase())) { - LimboCache.getInstance().deleteLimboPlayer(name); - } - LimboCache.getInstance().addLimboPlayer(player , utils.removeAll(player)); - } - } - } else { - Bukkit.getScheduler().runTask(plugin, new Runnable() { - @Override - public void run() { - if(data.isAuthAvailable(name) && !LimboCache.getInstance().hasLimboPlayer(name)) { - if(!Settings.isSessionsEnabled) { - LimboCache.getInstance().addLimboPlayer(player , utils.removeAll(player)); - } else if(PlayerCache.getInstance().isAuthenticated(name)) { - if(!Settings.sessionExpireOnIpChange) - if(LimboCache.getInstance().hasLimboPlayer(player.getName().toLowerCase())) { - LimboCache.getInstance().deleteLimboPlayer(name); - } - LimboCache.getInstance().addLimboPlayer(player , utils.removeAll(player)); - } - } - - } - - }); - } - + //Run that asynchronous + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { + @Override + public void run() { + if(data.isAuthAvailable(name) && !LimboCache.getInstance().hasLimboPlayer(name)) { + if(!Settings.isSessionsEnabled) { + LimboCache.getInstance().addLimboPlayer(player , utils.removeAll(player)); + } else if(PlayerCache.getInstance().isAuthenticated(name)) { + if(!Settings.sessionExpireOnIpChange) + if(LimboCache.getInstance().hasLimboPlayer(player.getName().toLowerCase())) { + LimboCache.getInstance().deleteLimboPlayer(name); + } + LimboCache.getInstance().addLimboPlayer(player , utils.removeAll(player)); + } + } + } + }); //Check if forceSingleSession is set to true, so kick player that has joined with same nick of online player if(player.isOnline() && Settings.isForceSingleSessionEnabled ) { LimboPlayer limbo = LimboCache.getInstance().getLimboPlayer(player.getName().toLowerCase()); @@ -625,9 +589,8 @@ public class AuthMePlayerListener implements Listener { LimboCache.getInstance().deleteLimboPlayer(player.getName().toLowerCase()); } return; - } - + int min = Settings.getMinNickLength; int max = Settings.getMaxNickLength; String regex = Settings.getNickRegex; @@ -645,7 +608,7 @@ public class AuthMePlayerListener implements Listener { } return; } - + if (Settings.isKickNonRegisteredEnabled) { if (!data.isAuthAvailable(name)) { event.disallow(Result.KICK_OTHER, m._("reg_only")); @@ -658,6 +621,7 @@ public class AuthMePlayerListener implements Listener { event.disallow(Result.KICK_FULL, m._("kick_fullserver")); return; } + if (plugin.getServer().getOnlinePlayers().length > plugin.getServer().getMaxPlayers()) { event.allow(); return; @@ -673,7 +637,6 @@ public class AuthMePlayerListener implements Listener { } } } - @EventHandler(priority = EventPriority.HIGHEST) public void onPlayerJoin(PlayerJoinEvent event) { @@ -699,9 +662,13 @@ public class AuthMePlayerListener implements Listener { String ip = player.getAddress().getAddress().getHostAddress(); if (Settings.bungee) { try { - ip = BungeeCord.getInstance().getPlayer(player.getName()).getAddress().getAddress().getHostAddress(); + for (ProxiedPlayer pp : BungeeCord.getInstance().getPlayers()) { + if (pp.getName().toLowerCase() == name) { + ip = pp.getAddress().getAddress().getHostAddress(); + break; + } + } } catch (NoClassDefFoundError ncdfe) { - ConsoleLogger.showError("Your BungeeCord version is outdated, you need a version with the latest API"); } } if(Settings.isAllowRestrictedIp && !Settings.getRestrictedIp(name, ip)) { @@ -712,17 +679,13 @@ public class AuthMePlayerListener implements Listener { plugin.getServer().banIP(ip); return; } - + if (data.isAuthAvailable(name)) { - - if (Settings.isSessionsEnabled) { PlayerAuth auth = data.getAuth(name); long timeout = Settings.getSessionTimeout * 60000; long lastLogin = auth.getLastLogin(); long cur = new Date().getTime(); - - if((cur - lastLogin < timeout || timeout == 0) && !auth.getIp().equals("198.18.0.1") ) { if (auth.getNickname().equalsIgnoreCase(name) && auth.getIp().equals(ip) ) { plugin.getServer().getPluginManager().callEvent(new SessionEvent(auth, true)); @@ -756,10 +719,8 @@ public class AuthMePlayerListener implements Listener { } // isent in session or session was ended correctly LimboCache.getInstance().addLimboPlayer(player); - DataFileCache dataFile = new DataFileCache(LimboCache.getInstance().getLimboPlayer(name).getInventory(),LimboCache.getInstance().getLimboPlayer(name).getArmour()); playerBackup.createCache(name, dataFile, LimboCache.getInstance().getLimboPlayer(name).getGroup(),LimboCache.getInstance().getLimboPlayer(name).getOperator()); - } else { if(!Settings.unRegisteredGroup.isEmpty()){ utils.setGroup(player, Utils.groupType.UNREGISTERED); @@ -768,9 +729,6 @@ public class AuthMePlayerListener implements Listener { return; } } - - - if(Settings.protectInventoryBeforeLogInEnabled) { try { LimboPlayer limbo = LimboCache.getInstance().getLimboPlayer(player.getName().toLowerCase()); @@ -783,10 +741,8 @@ public class AuthMePlayerListener implements Listener { } catch (NullPointerException ex) { } } - if(player.isOp()) player.setOp(false); - if (Settings.isTeleportToSpawnEnabled || (Settings.isForceSpawnLocOnJoinEnabled && Settings.getForcedWorlds.contains(player.getWorld().getName()))) { SpawnTeleportEvent tpEvent = new SpawnTeleportEvent(player, player.getLocation(), spawnLoc, PlayerCache.getInstance().isAuthenticated(name)); plugin.getServer().getPluginManager().callEvent(tpEvent); @@ -797,25 +753,19 @@ public class AuthMePlayerListener implements Listener { player.teleport(tpEvent.getTo()); } } - - String msg = data.isAuthAvailable(name) ? m._("login_msg") : m._("reg_msg"); int time = Settings.getRegistrationTimeout * 20; int msgInterval = Settings.getWarnMessageInterval; if (time != 0) { - BukkitTask id = sched.runTaskLater(plugin, new TimeoutTask(plugin, name), time); if(!LimboCache.getInstance().hasLimboPlayer(name)) LimboCache.getInstance().addLimboPlayer(player); - LimboCache.getInstance().getLimboPlayer(name).setTimeoutTaskId(id.getTaskId()); } - if(!LimboCache.getInstance().hasLimboPlayer(name)) LimboCache.getInstance().addLimboPlayer(player); BukkitTask msgT = sched.runTask(plugin, new MessageTask(plugin, name, msg, msgInterval)); LimboCache.getInstance().getLimboPlayer(name).setMessageTaskId(msgT.getTaskId()); - if (Settings.isForceSurvivalModeEnabled) sched.runTask(plugin, new Runnable() { public void run() { @@ -823,32 +773,34 @@ public class AuthMePlayerListener implements Listener { } }); } - @EventHandler(priority = EventPriority.MONITOR) public void onPlayerQuit(PlayerQuitEvent event) { if (event.getPlayer() == null) { return; } - - + Player player = event.getPlayer(); String name = player.getName().toLowerCase(); - + if (plugin.getCitizensCommunicator().isNPC(player, plugin) || Utils.getInstance().isUnrestricted(player) || CombatTagComunicator.isNPC(player)) { return; } - - if (PlayerCache.getInstance().isAuthenticated(name) && !player.isDead()) { - if(Settings.isSaveQuitLocationEnabled && data.isAuthAvailable(name)) { - PlayerAuth auth = new PlayerAuth(event.getPlayer().getName().toLowerCase(),(int)player.getLocation().getX(),(int)player.getLocation().getY(),(int)player.getLocation().getZ()); - try { - data.updateQuitLoc(auth); - } catch (NullPointerException npe) { } - - } - } - + + if (PlayerCache.getInstance().isAuthenticated(name) && !player.isDead()) { + if(Settings.isSaveQuitLocationEnabled && data.isAuthAvailable(name)) { + final PlayerAuth auth = new PlayerAuth(event.getPlayer().getName().toLowerCase(),(int)player.getLocation().getX(),(int)player.getLocation().getY(),(int)player.getLocation().getZ()); + try { + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { + @Override + public void run() { + data.updateQuitLoc(auth); + } + }); + } catch (NullPointerException npe) { } + } + } + if (LimboCache.getInstance().hasLimboPlayer(name)) { //System.out.println("e' nel quit"); LimboPlayer limbo = LimboCache.getInstance().getLimboPlayer(name); @@ -870,18 +822,13 @@ public class AuthMePlayerListener implements Listener { } try { PlayerCache.getInstance().removePlayer(name); - } catch (NullPointerException npe) { - - } - try { PlayersLogs.players.remove(player.getName()); PlayersLogs.getInstance().save(); + player.getVehicle().eject(); } catch (NullPointerException ex) { - } if (gameMode.containsKey(name)) gameMode.remove(name); player.saveData(); - } @EventHandler(priority=EventPriority.MONITOR) @@ -908,8 +855,13 @@ public class AuthMePlayerListener implements Listener { String name = player.getName().toLowerCase(); if ((PlayerCache.getInstance().isAuthenticated(name)) && (!player.isDead()) && (Settings.isSaveQuitLocationEnabled.booleanValue()) && data.isAuthAvailable(name)) { - PlayerAuth auth = new PlayerAuth(event.getPlayer().getName().toLowerCase(), (int)player.getLocation().getX(), (int)player.getLocation().getY(), (int)player.getLocation().getZ()); - this.data.updateQuitLoc(auth); + final PlayerAuth auth = new PlayerAuth(event.getPlayer().getName().toLowerCase(), (int)player.getLocation().getX(), (int)player.getLocation().getY(), (int)player.getLocation().getZ()); + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { + @Override + public void run() { + data.updateQuitLoc(auth); + } + }); } if (LimboCache.getInstance().hasLimboPlayer(name)) @@ -936,7 +888,6 @@ public class AuthMePlayerListener implements Listener { player.teleport(tpEvent.getTo()); } } catch (NullPointerException npe) { - } this.utils.addNormal(player, limbo.getGroup()); player.setOp(limbo.getOperator()); @@ -952,6 +903,7 @@ public class AuthMePlayerListener implements Listener { PlayersLogs.players.remove(player.getName()); PlayersLogs.getInstance().save(); if (gameMode.containsKey(name)) gameMode.remove(name); + player.getVehicle().eject(); player.saveData(); } catch (NullPointerException ex) {} } @@ -982,11 +934,11 @@ public class AuthMePlayerListener implements Listener { event.setCancelled(true); } - @EventHandler(priority = EventPriority.MONITOR) + @EventHandler(priority = EventPriority.LOWEST) public void onPlayerInteract(PlayerInteractEvent event) { if (event.isCancelled() || event.getPlayer() == null) return; if (event.getClickedBlock() == null) return; - + Player player = event.getPlayer(); String name = player.getName().toLowerCase(); @@ -1003,17 +955,14 @@ public class AuthMePlayerListener implements Listener { return; } } - + try { final int sign = event.getClickedBlock().getTypeId(); if (sign == Material.SIGN_POST.getId() || sign == Material.WALL_SIGN.getId()) { event.setUseInteractedBlock(org.bukkit.event.Event.Result.DENY); } } catch (NullPointerException npe) { - } - - event.setCancelled(true); } @@ -1063,8 +1012,6 @@ public class AuthMePlayerListener implements Listener { return; } } - //System.out.println("player try to drop item"); - event.setCancelled(true); } @@ -1091,8 +1038,8 @@ public class AuthMePlayerListener implements Listener { } event.setCancelled(true); } - - @EventHandler(priority = EventPriority.MONITOR) + + @EventHandler(priority = EventPriority.LOWEST) public void onSignChange(SignChangeEvent event) { if (event.isCancelled() || event.getPlayer() == null || event == null) { return; @@ -1114,8 +1061,5 @@ public class AuthMePlayerListener implements Listener { } } event.setCancelled(true); - } - - -} \ No newline at end of file +} diff --git a/src/main/java/uk/org/whoami/authme/listener/AuthMeSpoutListener.java b/src/main/java/uk/org/whoami/authme/listener/AuthMeSpoutListener.java index 1357ce6cf..2846408cc 100644 --- a/src/main/java/uk/org/whoami/authme/listener/AuthMeSpoutListener.java +++ b/src/main/java/uk/org/whoami/authme/listener/AuthMeSpoutListener.java @@ -17,19 +17,16 @@ import uk.org.whoami.authme.settings.SpoutCfg; public class AuthMeSpoutListener implements Listener { private DataSource data; - public AuthMeSpoutListener(DataSource data) { - this.data = data; } - + @EventHandler - public void onSpoutCraftEnable(final SpoutCraftEnableEvent event) - { - if(SpoutCfg.getInstance().getBoolean("LoginScreen.enabled")) { - if (data.isAuthAvailable(event.getPlayer().getName().toLowerCase()) && !PlayerCache.getInstance().isAuthenticated(event.getPlayer().getName().toLowerCase()) ) { - event.getPlayer().getMainScreen().attachPopupScreen(new LoginScreen(event.getPlayer())); - } - } - } + public void onSpoutCraftEnable(final SpoutCraftEnableEvent event) { + if(SpoutCfg.getInstance().getBoolean("LoginScreen.enabled")) { + if (data.isAuthAvailable(event.getPlayer().getName().toLowerCase()) && !PlayerCache.getInstance().isAuthenticated(event.getPlayer().getName().toLowerCase()) ) { + event.getPlayer().getMainScreen().attachPopupScreen(new LoginScreen(event.getPlayer())); + } + } + } } diff --git a/src/main/java/uk/org/whoami/authme/plugin/manager/CitizensCommunicator.java b/src/main/java/uk/org/whoami/authme/plugin/manager/CitizensCommunicator.java index 81fe7a60a..c57674711 100644 --- a/src/main/java/uk/org/whoami/authme/plugin/manager/CitizensCommunicator.java +++ b/src/main/java/uk/org/whoami/authme/plugin/manager/CitizensCommunicator.java @@ -8,9 +8,9 @@ import org.bukkit.entity.Entity; import uk.org.whoami.authme.AuthMe; public class CitizensCommunicator { - + public AuthMe instance; - + public CitizensCommunicator(AuthMe instance) { this.instance = instance; } diff --git a/src/main/java/uk/org/whoami/authme/plugin/manager/CombatTagComunicator.java b/src/main/java/uk/org/whoami/authme/plugin/manager/CombatTagComunicator.java index dafa9b3af..caa7b5a56 100644 --- a/src/main/java/uk/org/whoami/authme/plugin/manager/CombatTagComunicator.java +++ b/src/main/java/uk/org/whoami/authme/plugin/manager/CombatTagComunicator.java @@ -16,8 +16,9 @@ import org.bukkit.entity.Player; * @author stefano */ public abstract class CombatTagComunicator { - static CombatTagApi combatApi; - + + static CombatTagApi combatApi; + public CombatTagComunicator() { if(Bukkit.getServer().getPluginManager().getPlugin("CombatTag") != null){ combatApi = new CombatTagApi((CombatTag)Bukkit.getServer().getPluginManager().getPlugin("CombatTag")); @@ -30,16 +31,15 @@ public abstract class CombatTagComunicator { * @return true if player is in combat */ public abstract boolean isInCombat(String player); - - /** + + /** * Checks to see if the player is in combat. The combat time can be configured by the server owner * If the player has died while in combat the player is no longer considered in combat and as such will return false * @param player * @return true if player is in combat */ - public abstract boolean isInCombat(Player player); - - /** + public abstract boolean isInCombat(Player player); + /** * Returns the time before the tag is over * -1 if the tag has expired * -2 if the player is not in combat @@ -48,25 +48,25 @@ public abstract class CombatTagComunicator { */ public abstract long getRemainingTagTime(String player); - //(Implemented in 3.8) - /** + /** * Returns if the entity is an NPC * @param player * @return true if the player is an NPC */ - public static boolean isNPC(Entity player) { - try { - if(Bukkit.getServer().getPluginManager().getPlugin("CombatTag") != null){ - combatApi = new CombatTagApi((CombatTag) Bukkit.getServer().getPluginManager().getPlugin("CombatTag")); - return combatApi.isNPC(player); - } - } catch (ClassCastException ex) { - return false; - } catch (NullPointerException npe) { - return false; - } catch (NoClassDefFoundError ncdfe) { - return false; - } - return false; - } + public static boolean isNPC(Entity player) { + try { + if(Bukkit.getServer().getPluginManager().getPlugin("CombatTag") != null){ + combatApi = new CombatTagApi((CombatTag) Bukkit.getServer().getPluginManager().getPlugin("CombatTag")); + return combatApi.isNPC(player); + } + } catch (ClassCastException ex) { + return false; + } catch (NullPointerException npe) { + return false; + } catch (NoClassDefFoundError ncdfe) { + return false; + } + return false; + } + } diff --git a/src/main/java/uk/org/whoami/authme/security/PasswordSecurity.java b/src/main/java/uk/org/whoami/authme/security/PasswordSecurity.java index efea449a4..e16affc40 100644 --- a/src/main/java/uk/org/whoami/authme/security/PasswordSecurity.java +++ b/src/main/java/uk/org/whoami/authme/security/PasswordSecurity.java @@ -31,19 +31,16 @@ import uk.org.whoami.authme.AuthMe; import uk.org.whoami.authme.settings.Settings; public class PasswordSecurity { - + private static SecureRandom rnd = new SecureRandom(); public static HashMap userSalt = new HashMap(); private static String getMD5(String message) throws NoSuchAlgorithmException { MessageDigest md5 = MessageDigest.getInstance("MD5"); - md5.reset(); md5.update(message.getBytes()); byte[] digest = md5.digest(); - - return String.format("%0" + (digest.length << 1) + "x", new BigInteger(1, - digest)); + return String.format("%0" + (digest.length << 1) + "x", new BigInteger(1,digest)); } private static String getSHA1(String message) throws NoSuchAlgorithmException { @@ -51,20 +48,15 @@ public class PasswordSecurity { sha1.reset(); sha1.update(message.getBytes()); byte[] digest = sha1.digest(); - - return String.format("%0" + (digest.length << 1) + "x", new BigInteger(1, - digest)); + return String.format("%0" + (digest.length << 1) + "x", new BigInteger(1,digest)); } private static String getSHA256(String message) throws NoSuchAlgorithmException { MessageDigest sha256 = MessageDigest.getInstance("SHA-256"); - sha256.reset(); sha256.update(message.getBytes()); byte[] digest = sha256.digest(); - - return String.format("%0" + (digest.length << 1) + "x", new BigInteger(1, - digest)); + return String.format("%0" + (digest.length << 1) + "x", new BigInteger(1,digest)); } public static String getWhirlpool(String message) { @@ -79,35 +71,28 @@ public class PasswordSecurity { private static String getSaltedHash(String message, String salt) throws NoSuchAlgorithmException { return "$SHA$" + salt + "$" + getSHA256(getSHA256(message) + salt); } - - // - // VBULLETIN 3.X 4.X METHOD - // - + private static String getSaltedMd5(String message, String salt) throws NoSuchAlgorithmException { return "$MD5vb$" + salt + "$" + getMD5(getMD5(message) + salt); } - + private static String getSaltedMyBB(String message, String salt) throws NoSuchAlgorithmException { return getMD5(getMD5(salt)+ getMD5(message)); } - + private static String getXAuth(String message, String salt) { String hash = getWhirlpool(salt + message).toLowerCase(); int saltPos = (message.length() >= hash.length() ? hash.length() - 1 : message.length()); return hash.substring(0, saltPos) + salt + hash.substring(saltPos); } - - private static String getSaltedIPB3(String message, String salt) throws NoSuchAlgorithmException { - return getMD5(getMD5(salt) + getMD5(message)); - + private static String getSaltedIPB3(String message, String salt) throws NoSuchAlgorithmException { + return getMD5(getMD5(salt) + getMD5(message)); } private static String createSalt(int length) throws NoSuchAlgorithmException { byte[] msg = new byte[40]; rnd.nextBytes(msg); - MessageDigest sha1 = MessageDigest.getInstance("SHA1"); sha1.reset(); byte[] digest = sha1.digest(msg); @@ -203,10 +188,9 @@ public class PasswordSecurity { } public static boolean comparePasswordWithHash(String password, String hash, String playername) throws NoSuchAlgorithmException { - //System.out.println("[Authme Debug] debug hashString"+hash); if(hash.contains("$H$")) { - PhpBB checkHash = new PhpBB(); - return checkHash.phpbb_check_hash(password, hash); + PhpBB checkHash = new PhpBB(); + return checkHash.phpbb_check_hash(password, hash); } if(!Settings.getMySQLColumnSalt.isEmpty() && Settings.getPasswordHash == HashAlgorithm.IPB3) { String saltipb = AuthMe.getInstance().database.getAuth(playername).getSalt(); @@ -241,32 +225,23 @@ public class PasswordSecurity { if(hash.length() < 32 ) { return hash.equals(password); } - if (hash.length() == 32) { return hash.equals(getMD5(password)); } - if (hash.length() == 40) { return hash.equals(getSHA1(password)); } - if (hash.length() == 140) { int saltPos = (password.length() >= hash.length() ? hash.length() - 1 : password.length()); String salt = hash.substring(saltPos, saltPos + 12); return hash.equals(getXAuth(password, salt)); } - if (hash.contains("$")) { - //System.out.println("[Authme Debug] debug hashString"+hash); String[] line = hash.split("\\$"); if (line.length > 3 && line[1].equals("SHA")) { return hash.equals(getSaltedHash(password, line[2])); } else { if(line[1].equals("MD5vb")) { - //System.out.println("[Authme Debug] password hashed from Authme"+getSaltedMd5(password, line[2])); - //System.out.println("[Authme Debug] salt from Authme"+line[2]); - //System.out.println("[Authme Debug] equals? Authme: "+hash); - //hash = "$MD5vb$" + salt + "$" + hash; return hash.equals(getSaltedMd5(password, line[2])); } } @@ -280,11 +255,10 @@ public class PasswordSecurity { return phpBBhash; } - private static String getPlainText(String password) { return password; } - + public static String getPhPFusion(String msg, String keyString) { String digest = null; String algo = "HmacSHA256"; @@ -292,9 +266,7 @@ public class PasswordSecurity { SecretKeySpec key = new SecretKeySpec((keyString).getBytes("UTF-8"), algo); Mac mac = Mac.getInstance(algo); mac.init(key); - byte[] bytes = mac.doFinal(msg.getBytes("ASCII")); - StringBuffer hash = new StringBuffer(); for (int i = 0; i < bytes.length; i++) { String hex = Integer.toHexString(0xFF & bytes[i]); @@ -315,4 +287,5 @@ public class PasswordSecurity { MD5, SHA1, SHA256, WHIRLPOOL, XAUTH, MD5VB, PHPBB, PLAINTEXT, MYBB, IPB3, PHPFUSION, SMF, XFSHA1, XFSHA256, SALTED2MD5, JOOMLA } + } diff --git a/src/main/java/uk/org/whoami/authme/security/PhpBB.java b/src/main/java/uk/org/whoami/authme/security/PhpBB.java index 8532c243e..e9af72c66 100644 --- a/src/main/java/uk/org/whoami/authme/security/PhpBB.java +++ b/src/main/java/uk/org/whoami/authme/security/PhpBB.java @@ -17,43 +17,34 @@ public class PhpBB { private String itoa64 = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; - public String phpbb_hash(String password) { String random_state = unique_id(); String random = ""; int count = 6; - if (random.length() < count) { random = ""; - for (int i = 0; i < count; i += 16) { random_state = md5(unique_id() + random_state); random += pack(md5(random_state)); } random = random.substring(0, count); } - String hash = _hash_crypt_private( password, _hash_gensalt_private(random, itoa64)); if (hash.length() == 34) return hash; - return md5(password); } - // global $config; - // private boolean dss_seeded = false; - private String unique_id() { return unique_id("c"); } - + private String unique_id(String extra) { //TODO: Maybe check the salt? return "1234567890abcdef"; } - private String _hash_gensalt_private(String input, String itoa64) { return _hash_gensalt_private(input, itoa64, 6); } @@ -64,13 +55,11 @@ private String _hash_gensalt_private( if (iteration_count_log2 < 4 || iteration_count_log2 > 31) { iteration_count_log2 = 8; } - String output = "$H$"; output += itoa64.charAt( Math.min(iteration_count_log2 + ((PHP_VERSION >= 5) ? 5 : 3), 30)); output += _hash_encode64(input, 6); - return output; } @@ -80,58 +69,41 @@ private String _hash_gensalt_private( private String _hash_encode64(String input, int count) { String output = ""; int i = 0; - do { int value = input.charAt(i++); output += itoa64.charAt(value & 0x3f); - if (i < count) value |= input.charAt(i) << 8; - output += itoa64.charAt((value >> 6) & 0x3f); - if (i++ >= count) break; - if (i < count) value |= input.charAt(i) << 16; - output += itoa64.charAt((value >> 12) & 0x3f); - if (i++ >= count) break; - output += itoa64.charAt((value >> 18) & 0x3f); } while (i < count); - return output; } - String _hash_crypt_private(String password, String setting) { - String output = "*"; - - // Check for correct hash + String output = "*"; if (!setting.substring(0, 3).equals("$H$")) return output; - int count_log2 = itoa64.indexOf(setting.charAt(3)); if (count_log2 < 7 || count_log2 > 30) return output; - int count = 1 << count_log2; String salt = setting.substring(4, 12); if (salt.length() != 8) return output; - String m1 = md5(salt + password); String hash = pack(m1); do { hash = pack(md5(hash + password)); } while (--count > 0); - output = setting.substring(0, 12); output += _hash_encode64(hash, 16); - return output; } @@ -154,18 +126,16 @@ private String _hash_gensalt_private( throw new RuntimeException(e); } } - + static int hexToInt(char ch) { if(ch >= '0' && ch <= '9') return ch - '0'; - ch = Character.toUpperCase(ch); if(ch >= 'A' && ch <= 'F') return ch - 'A' + 0xA; - throw new IllegalArgumentException("Not a hex character: " + ch); } - + private static String bytes2hex(byte[] bytes) { StringBuffer r = new StringBuffer(32); for (int i = 0; i < bytes.length; i++) { @@ -188,4 +158,3 @@ private String _hash_gensalt_private( return buf.toString(); } } - diff --git a/src/main/java/uk/org/whoami/authme/security/RandomString.java b/src/main/java/uk/org/whoami/authme/security/RandomString.java index e599d8e60..4ae022a1b 100644 --- a/src/main/java/uk/org/whoami/authme/security/RandomString.java +++ b/src/main/java/uk/org/whoami/authme/security/RandomString.java @@ -2,16 +2,20 @@ package uk.org.whoami.authme.security; import java.util.Random; +/** +* +* @author Xephi59 +*/ public class RandomString { - private static final char[] symbols = new char[36]; + private static final char[] chars = new char[36]; static { for (int idx = 0; idx < 10; ++idx) - symbols[idx] = (char) ('0' + idx); + chars[idx] = (char) ('0' + idx); for (int idx = 10; idx < 36; ++idx) - symbols[idx] = (char) ('a' + idx - 10); + chars[idx] = (char) ('a' + idx - 10); } private final Random random = new Random(); @@ -28,7 +32,7 @@ public class RandomString public String nextString() { for (int idx = 0; idx < buf.length; ++idx) - buf[idx] = symbols[random.nextInt(symbols.length)]; + buf[idx] = chars[random.nextInt(chars.length)]; return new String(buf); } diff --git a/src/main/java/uk/org/whoami/authme/security/Whirlpool.java b/src/main/java/uk/org/whoami/authme/security/Whirlpool.java index 01201c5b5..0066bfa3c 100644 --- a/src/main/java/uk/org/whoami/authme/security/Whirlpool.java +++ b/src/main/java/uk/org/whoami/authme/security/Whirlpool.java @@ -131,26 +131,6 @@ class Whirlpool { C[t][x] = (C[t - 1][x] >>> 8) | ((C[t - 1][x] << 56)); } } - /* - for (int t = 0; t < 8; t++) { - System.out.println("static const u64 C" + t + "[256] = {"); - for (int i = 0; i < 64; i++) { - System.out.print(" "); - for (int j = 0; j < 4; j++) { - String v = Long.toHexString(C[t][4*i + j]); - while (v.length() < 16) { - v = "0" + v; - } - System.out.print(" LL(0x" + v + "),"); - } - System.out.println(); - } - System.out.println("};"); - System.out.println(); - } - System.out.println(); - //*/ - /* * build the round constants: */ @@ -167,18 +147,6 @@ class Whirlpool { (C[6][i + 6] & 0x000000000000ff00L) ^ (C[7][i + 7] & 0x00000000000000ffL); } - /* - System.out.println("static const u64 rc[R + 1] = {"); - for (int r = 0; r <= R; r++) { - String v = Long.toHexString(rc[r]); - while (v.length() < 16) { - v = "0" + v; - } - System.out.println(" LL(0x" + v + "),"); - } - System.out.println("};"); - System.out.println(); - //*/ } /** @@ -205,10 +173,10 @@ class Whirlpool { * The hashing state. */ protected long[] hash = new long[8]; - protected long[] K = new long[8]; // the round key + protected long[] K = new long[8]; protected long[] L = new long[8]; - protected long[] block = new long[8]; // mu(buffer) - protected long[] state = new long[8]; // the cipher state + protected long[] block = new long[8]; + protected long[] state = new long[8]; public Whirlpool() { } @@ -281,8 +249,8 @@ class Whirlpool { public void NESSIEinit() { Arrays.fill(bitLength, (byte)0); bufferBits = bufferPos = 0; - buffer[0] = 0; // it's only necessary to cleanup buffer[bufferPos]. - Arrays.fill(hash, 0L); // initial value + buffer[0] = 0; + Arrays.fill(hash, 0L); } /** diff --git a/src/main/java/uk/org/whoami/authme/settings/CustomConfiguration.java b/src/main/java/uk/org/whoami/authme/settings/CustomConfiguration.java index 66523665e..c98e5895a 100644 --- a/src/main/java/uk/org/whoami/authme/settings/CustomConfiguration.java +++ b/src/main/java/uk/org/whoami/authme/settings/CustomConfiguration.java @@ -19,10 +19,10 @@ public class CustomConfiguration extends YamlConfiguration{ public CustomConfiguration(File file) { this.configFile = file; - + load(); } - + public void load() { try { @@ -36,7 +36,7 @@ public class CustomConfiguration extends YamlConfiguration{ Logger.getLogger(JavaPlugin.class.getName()).log(Level.SEVERE, configFile.getName() + " is no valid configuration file", e); } } - + public boolean reload() { boolean out = true; if (!configFile.exists()) @@ -46,7 +46,7 @@ public class CustomConfiguration extends YamlConfiguration{ if (out) load(); return out; } - + public void save() { try { super.save(configFile); @@ -54,7 +54,7 @@ public class CustomConfiguration extends YamlConfiguration{ Logger.getLogger(JavaPlugin.class.getName()).log(Level.SEVERE, "Could not save config to " + configFile.getName(), ex); } } - + public boolean loadRessource(File file) { boolean out = true; if (!file.exists()) { @@ -64,7 +64,6 @@ public class CustomConfiguration extends YamlConfiguration{ fos = new FileOutputStream(file); byte[] buf = new byte[1024]; int i = 0; - while ((i = fis.read(buf)) != -1) { fos.write(buf, 0, i); } diff --git a/src/main/java/uk/org/whoami/authme/settings/Messages.java b/src/main/java/uk/org/whoami/authme/settings/Messages.java index 630a90c34..db47a950b 100644 --- a/src/main/java/uk/org/whoami/authme/settings/Messages.java +++ b/src/main/java/uk/org/whoami/authme/settings/Messages.java @@ -21,17 +21,14 @@ import java.io.File; public class Messages extends CustomConfiguration { private static Messages singleton = null; - public Messages() { - super(new File(Settings.MESSAGE_FILE+"_"+Settings.messagesLanguage+".yml")); loadDefaults(); loadFile(); singleton = this; - } - + private void loadDefaults() { this.set("logged_in", "&cAlready logged in!"); this.set("not_logged_in", "&cNot logged in!"); @@ -80,7 +77,6 @@ public class Messages extends CustomConfiguration { private void loadFile() { this.load(); this.save(); - } public String _(String msg) { @@ -90,13 +86,12 @@ public class Messages extends CustomConfiguration { } return msg; } - - + public static Messages getInstance() { if (singleton == null) { singleton = new Messages(); } return singleton; } - + } diff --git a/src/main/java/uk/org/whoami/authme/settings/PlayersLogs.java b/src/main/java/uk/org/whoami/authme/settings/PlayersLogs.java index c84e7f974..d439d012b 100644 --- a/src/main/java/uk/org/whoami/authme/settings/PlayersLogs.java +++ b/src/main/java/uk/org/whoami/authme/settings/PlayersLogs.java @@ -3,11 +3,15 @@ package uk.org.whoami.authme.settings; import java.io.File; import java.util.List; +/** +* +* @author Xephi59 +*/ public class PlayersLogs extends CustomConfiguration { private static PlayersLogs pllog = null; public static List players; - + @SuppressWarnings("unchecked") public PlayersLogs() { super(new File("./plugins/AuthMe/players.yml")); @@ -15,16 +19,13 @@ public class PlayersLogs extends CustomConfiguration { load(); save(); players = (List) this.getList("players"); - } - + public static PlayersLogs getInstance() { if (pllog == null) { pllog = new PlayersLogs(); } return pllog; } - - } diff --git a/src/main/java/uk/org/whoami/authme/settings/Settings.java b/src/main/java/uk/org/whoami/authme/settings/Settings.java index b066e6477..60e5ff39a 100644 --- a/src/main/java/uk/org/whoami/authme/settings/Settings.java +++ b/src/main/java/uk/org/whoami/authme/settings/Settings.java @@ -45,14 +45,13 @@ public final class Settings extends YamlConfiguration { private static List getRestrictedIp; public static List getMySQLOtherUsernameColumn = null; public static List getForcedWorlds = null; - public final Plugin plugin; private final File file; - public static DataSourceType getDataSource; public static HashAlgorithm getPasswordHash; public static HashAlgorithm rakamakHash; - + public static Boolean useLogging = false; + public static Boolean isPermissionCheckEnabled, isRegistrationEnabled, isForcedRegistrationEnabled, isTeleportToSpawnEnabled, isSessionsEnabled, isChatAllowed, isAllowRestrictedIp, isMovementAllowed, isKickNonRegisteredEnabled, isForceSingleSessionEnabled, @@ -61,8 +60,7 @@ public final class Settings extends YamlConfiguration { getEnablePasswordVerifier, protectInventoryBeforeLogInEnabled, isBackupActivated, isBackupOnStart, isBackupOnStop, enablePasspartu, isStopEnabled, reloadSupport, rakamakUseIp, noConsoleSpam, removePassword, displayOtherAccounts, useCaptcha, emailRegistration, multiverse, notifications, chestshop, bungee, banUnsafeIp, doubleEmailCheck, sessionExpireOnIpChange; - - + public static String getNickRegex, getUnloggedinGroup, getMySQLHost, getMySQLPort, getMySQLUsername, getMySQLPassword, getMySQLDatabase, getMySQLTablename, getMySQLColumnName, getMySQLColumnPassword, getMySQLColumnIp, getMySQLColumnLastLogin, @@ -70,24 +68,16 @@ public final class Settings extends YamlConfiguration { getcUnrestrictedName, getRegisteredGroup, messagesLanguage, getMySQLlastlocX, getMySQLlastlocY, getMySQLlastlocZ, rakamakUsers, rakamakUsersIp, getmailAccount, getmailPassword, getmailSMTP, getMySQLColumnId, getmailSenderName, getPredefinedSalt, getMailSubject, getMailText; - - + public static int getWarnMessageInterval, getSessionTimeout, getRegistrationTimeout, getMaxNickLength, getMinNickLength, getPasswordMinLen, getMovementRadius, getmaxRegPerIp, getNonActivatedGroup, passwordMaxLength, getRecoveryPassLength, getMailPort, maxLoginTry, captchaLength, saltLength, getmaxRegPerEmail; - + protected static YamlConfiguration configFile; - + public Settings(Plugin plugin) { - //super(new File(Settings.PLUGIN_FOLDER + "/config.yml"), this.plugin); this.file = new File(plugin.getDataFolder(),"config.yml"); - this.plugin = plugin; - - - - //options().indent(4); - // Override to always indent 4 spaces if(exists()) { load(); } @@ -95,21 +85,14 @@ public final class Settings extends YamlConfiguration { loadDefaults(file.getName()); load(); } - configFile = (YamlConfiguration) plugin.getConfig(); - - //saveDefaults(); - } - @SuppressWarnings("unchecked") public void loadConfigOptions() { - plugin.getLogger().info("Loading Configuration File..."); - mergeConfig(); - + messagesLanguage = checkLang(configFile.getString("settings.messagesLanguage","en")); isPermissionCheckEnabled = configFile.getBoolean("permission.EnablePermissionCheck", false); isForcedRegistrationEnabled = configFile.getBoolean("settings.registration.force", true); @@ -220,16 +203,15 @@ public void loadConfigOptions() { banUnsafeIp = configFile.getBoolean("settings.restrictions.banUnsafedIP", false); doubleEmailCheck = configFile.getBoolean("settings.registration.doubleEmailCheck", false); sessionExpireOnIpChange = configFile.getBoolean("settings.sessions.sessionExpireOnIpChange", false); + useLogging = configFile.getBoolean("Security.console.logConsole", false); saveDefaults(); } - @SuppressWarnings("unchecked") public static void reloadConfigOptions(YamlConfiguration newConfig) { configFile = newConfig; - - //plugin.getLogger().info("RELoading Configuration File..."); + messagesLanguage = checkLang(configFile.getString("settings.messagesLanguage","en")); isPermissionCheckEnabled = configFile.getBoolean("permission.EnablePermissionCheck", false); isForcedRegistrationEnabled = configFile.getBoolean("settings.registration.force", true); @@ -340,114 +322,84 @@ public static void reloadConfigOptions(YamlConfiguration newConfig) { banUnsafeIp = configFile.getBoolean("settings.restrictions.banUnsafedIP", false); doubleEmailCheck = configFile.getBoolean("settings.registration.doubleEmailCheck", false); sessionExpireOnIpChange = configFile.getBoolean("settings.sessions.sessionExpireOnIpChange", false); - + useLogging = configFile.getBoolean("Security.console.logConsole", false); + } - public void mergeConfig() { - if (contains("settings.restrictions.allowedPluginTeleportHandler")) set("settings.restrictions.allowedPluginTeleportHandler", null); - if(!contains("DataSource.mySQLColumnEmail")) set("DataSource.mySQLColumnEmail","email"); - if(contains("Email.GmailAccount")) { set("Email.mailAccount", getString("Email.GmailAccount")); set("Email.GmailAccount", null); } - if(contains("Email.GmailPassword")) { set("Email.mailPassword", getString("Email.GmailPassword")); set("Email.GmailPassword", null); } - if(!contains("Email.RecoveryPasswordLength")) set("Email.RecoveryPasswordLength", 8); - if(!contains("Email.mailPort")) set("Email.mailPort", 465); - if(!contains("Email.mailSMTP")) set("Email.mailSMTP", "smtp.gmail.com"); - if(!contains("Email.mailAccount")) set("Email.mailAccount", ""); - if(!contains("Email.mailPassword")) set("Email.mailPassword", ""); - if(!contains("ExternalBoardOptions.mySQLOtherUsernameColumns")) set("ExternalBoardOptions.mySQLOtherUsernameColumns", new ArrayList()); - if(!contains("settings.restrictions.displayOtherAccounts")) set("settings.restrictions.displayOtherAccounts", true); - if(!contains("DataSource.mySQLColumnId")) set("DataSource.mySQLColumnId", "id"); - if(!contains("Email.mailSenderName")) set("Email.mailSenderName", ""); - if(!contains("Xenoforo.predefinedSalt")) set("Xenoforo.predefinedSalt", ""); - if(!contains("Security.captcha.useCaptcha")) set("Security.captcha.useCaptcha", false); - if(!contains("Security.captcha.maxLoginTry")) set("Security.captcha.maxLoginTry", 5); - if(!contains("Security.captcha.captchaLength")) set("Security.captcha.captchaLength", 5); - if(!contains("Email.mailSubject")) set("Email.mailSubject", ""); - if(!contains("Email.mailText")) set("Email.mailText", "Dear , \n\n This is your new AuthMe password for the server : \n\n \n\n \n\n Do not forget to change password after login! \n /changepassword newPassword"); - if(!contains("settings.registration.enableEmailRegistrationSystem")) set("settings.registration.enableEmailRegistrationSystem", false); - if(!contains("settings.security.doubleMD5SaltLength")) set("settings.security.doubleMD5SaltLength", 8); - if(!contains("Email.maxRegPerEmail")) set("Email.maxRegPerEmail", 1); - if(!contains("Hooks.multiverse")) { set("Hooks.multiverse", true); set("Hooks.chestshop", true); set("Hooks.notifications", true); set("Hooks.bungeecord", false); } - if(!contains("settings.restrictions.ForceSpawnOnTheseWorlds")) set("settings.restrictions.ForceSpawnOnTheseWorlds", new ArrayList()); - if(!contains("settings.restrictions.banUnsafedIP")) set("settings.restrictions.banUnsafedIP", false); - if(!contains("settings.registration.doubleEmailCheck")) set("settings.registration.doubleEmailCheck", false); - if(!contains("settings.sessions.sessionExpireOnIpChange")) set("settings.sessions.sessionExpireOnIpChange", false); + if(!contains("Security.console.logConsole")) + set("Security.console.logConsole", false); plugin.getLogger().info("Merge new Config Options if needed.."); plugin.saveConfig(); - + return; } - /** - * - * - * - */ + private static HashAlgorithm getPasswordHash() { String key = "settings.security.passwordHash"; - try { return PasswordSecurity.HashAlgorithm.valueOf(configFile.getString(key,"SHA256").toUpperCase()); } catch (IllegalArgumentException ex) { @@ -455,8 +407,7 @@ public void mergeConfig() { return PasswordSecurity.HashAlgorithm.SHA256; } } - - + private static HashAlgorithm getRakamakHash() { String key = "Converter.Rakamak.newPasswordHash"; @@ -467,15 +418,9 @@ public void mergeConfig() { return PasswordSecurity.HashAlgorithm.SHA256; } } - - /** - * - * - * - */ + private static DataSourceType getDataSource() { String key = "DataSource.backend"; - try { return DataSource.DataSourceType.valueOf(configFile.getString(key).toUpperCase()); } catch (IllegalArgumentException ex) { @@ -490,48 +435,33 @@ public void mergeConfig() { * player that join the server, so player has a restricted access */ public static Boolean getRestrictedIp(String name, String ip) { - + Iterator iter = getRestrictedIp.iterator(); - - /* setup a few boolean variables to test the parameters */ Boolean trueonce = false; Boolean namefound = false; - while (iter.hasNext()) { String[] args = iter.next().split(";"); - String testname = args[0]; String testip = args[1]; - - /** Changing this logic to be more customized - * test each case against the entire - * list not just the first one in the list.*/ - - /* Fist Check the name */ if(testname.equalsIgnoreCase(name) ) { - namefound = true; - /* Check to see if the IP is the same */ - if(testip.equalsIgnoreCase(ip)) { - trueonce = true; - }; - } - } - // if the name is not found in the list let the user pass they are not being monitored + namefound = true; + if(testip.equalsIgnoreCase(ip)) { + trueonce = true; + }; + } + } if ( namefound == false){ return true; } else { - // if the name and IP was found once in the list let the user pass they are in the config if ( trueonce == true ){ return true; - // otherwise nip them in the bud and THEY SHALL NOT PASS! } else { return false; } } } - /** * Loads the configuration from disk * @@ -545,7 +475,7 @@ public void mergeConfig() { return false; } } - + public final void reload() { load(); loadDefaults(file.getName()); @@ -599,11 +529,9 @@ public void mergeConfig() { boolean success = save(); options().copyDefaults(false); options().copyHeader(false); - return success; } - /** * Clears current configuration defaults */ @@ -611,7 +539,7 @@ public void mergeConfig() { setDefaults(new MemoryConfiguration()); } - /** +/** * Check loaded defaults against current configuration * * @return false When all defaults aren't present in config @@ -622,17 +550,9 @@ public void mergeConfig() { } return getKeys(true).containsAll(getDefaults().getKeys(true)); } - /* - public static Settings getInstance() { - if (singleton == null) { - singleton = new Settings(); - } - return singleton; - } -*/ + public static String checkLang(String lang) { for(messagesLang language: messagesLang.values()) { - //System.out.println(language.toString()); if(lang.toLowerCase().contains(language.toString())) { ConsoleLogger.info("Set Language: "+lang); return lang; @@ -641,8 +561,9 @@ public void mergeConfig() { ConsoleLogger.info("Set Default Language: En "); return "en"; } - + public enum messagesLang { en, de, br, cz, pl, fr, ru, hu, sk, es, zhtw, fi, zhcn - } + } + } diff --git a/src/main/java/uk/org/whoami/authme/settings/Spawn.java b/src/main/java/uk/org/whoami/authme/settings/Spawn.java index 29b27c9b8..16a85d104 100644 --- a/src/main/java/uk/org/whoami/authme/settings/Spawn.java +++ b/src/main/java/uk/org/whoami/authme/settings/Spawn.java @@ -7,8 +7,12 @@ import java.util.List; import org.bukkit.Bukkit; import org.bukkit.Location; +/** +* +* @author Xephi59 +*/ public class Spawn extends CustomConfiguration { - + private static Spawn spawn; private static List emptyList = new ArrayList(); @@ -19,7 +23,7 @@ public class Spawn extends CustomConfiguration { save(); saveDefault(); } - + private void saveDefault() { if (!contains("spawn")) { set("spawn", emptyList); @@ -31,7 +35,6 @@ public class Spawn extends CustomConfiguration { set("spawn.pitch", ""); save(); } - } public static Spawn getInstance() { @@ -40,7 +43,7 @@ public class Spawn extends CustomConfiguration { } return spawn; } - + public boolean setSpawn(Location location) { try { set("spawn.world", location.getWorld().getName()); @@ -55,7 +58,7 @@ public class Spawn extends CustomConfiguration { return false; } } - + public Location getLocation() { try { if (this.getString("spawn.world").isEmpty() || this.getString("spawn.world") == "") return null; @@ -65,4 +68,5 @@ public class Spawn extends CustomConfiguration { return null; } } + } diff --git a/src/main/java/uk/org/whoami/authme/settings/SpoutCfg.java b/src/main/java/uk/org/whoami/authme/settings/SpoutCfg.java index 93efed4f3..7b6197c60 100644 --- a/src/main/java/uk/org/whoami/authme/settings/SpoutCfg.java +++ b/src/main/java/uk/org/whoami/authme/settings/SpoutCfg.java @@ -7,7 +7,7 @@ import java.io.File; import java.util.ArrayList; public class SpoutCfg extends CustomConfiguration{ - + private static SpoutCfg instance = null; public SpoutCfg(File file) @@ -21,7 +21,6 @@ public class SpoutCfg extends CustomConfiguration{ @SuppressWarnings("serial") private void loadDefaults() { this.set("Spout GUI enabled", true); - //Login: this.set("LoginScreen.enabled", true); this.set("LoginScreen.exit button", "Quit"); this.set("LoginScreen.exit message", "Good Bye"); @@ -30,16 +29,13 @@ public class SpoutCfg extends CustomConfiguration{ this.set("LoginScreen.text", new ArrayList() {{ add("Sample text"); add("Change this at spout.yml"); - add("------------------"); - add("AuthMe Reloaded by d4rkwarriors"); + add("--- AuthMe Reloaded by ---"); + add("d4rkwarriors and Xephi59"); }}); - //Registration: - //this.set("RegistrationScreen.enabled",true); - } public static SpoutCfg getInstance() { if (instance == null) instance = new SpoutCfg(new File("plugins/AuthMe", "spout.yml")); return instance; } -} \ No newline at end of file +} diff --git a/src/main/java/uk/org/whoami/authme/task/MessageTask.java b/src/main/java/uk/org/whoami/authme/task/MessageTask.java index 2bb0613b7..44d08ea42 100644 --- a/src/main/java/uk/org/whoami/authme/task/MessageTask.java +++ b/src/main/java/uk/org/whoami/authme/task/MessageTask.java @@ -43,17 +43,14 @@ public class MessageTask implements Runnable { if (PlayerCache.getInstance().isAuthenticated(name)) { return; } - for (Player player : plugin.getServer().getOnlinePlayers()) { if (player.getName().toLowerCase().equals(name)) { player.sendMessage(msg); - BukkitScheduler sched = plugin.getServer().getScheduler(); BukkitTask late = sched.runTaskLater(plugin, this, interval * 20); if(LimboCache.getInstance().hasLimboPlayer(name)) { LimboCache.getInstance().getLimboPlayer(name).setMessageTaskId(late.getTaskId()); } - } } } diff --git a/src/main/java/uk/org/whoami/authme/task/TimeoutTask.java b/src/main/java/uk/org/whoami/authme/task/TimeoutTask.java index 4b3e013a1..ff8993137 100644 --- a/src/main/java/uk/org/whoami/authme/task/TimeoutTask.java +++ b/src/main/java/uk/org/whoami/authme/task/TimeoutTask.java @@ -50,13 +50,11 @@ public class TimeoutTask implements Runnable { if (PlayerCache.getInstance().isAuthenticated(name)) { return; } - for (Player player : plugin.getServer().getOnlinePlayers()) { if (player.getName().toLowerCase().equals(name)) { if (LimboCache.getInstance().hasLimboPlayer(name)) { LimboPlayer inv = LimboCache.getInstance().getLimboPlayer(name); player.getServer().getScheduler().cancelTask(inv.getTimeoutTaskId()); - if(playerCache.doesCacheExist(name)) { playerCache.removeCache(name); } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 7350973eb..acff6f222 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -100,6 +100,7 @@ Security: console: noConsoleSpam: false removePassword: true + logConsole: false captcha: useCaptcha: false maxLoginTry: 5 diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 03553ef62..eb52aa2c0 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -3,7 +3,7 @@ author: darkwarriros,Xephi website: http://www.multiplayer-italia.com/ description: AuthMe prevents people, which aren't logged in, from doing stuff like placing blocks, moving, typing commands or seeing the inventory of the current player. main: uk.org.whoami.authme.AuthMe -version: 2.7.13b2 +version: 2.7.14 softdepend: [Vault, ChestShop, Spout, Multiverse-Core, Notifications, Citizens, CombatTag] commands: register: @@ -134,4 +134,7 @@ permissions: default: op authme.vip: description: Allow vip slot when the server is full + default: op + authme.admin.purgebannedplayers: + description: Purge banned players default: op \ No newline at end of file