diff --git a/src/main/java/fr/xephi/authme/AuthMe.java b/src/main/java/fr/xephi/authme/AuthMe.java index 14a30c5e..c1ba5cdf 100644 --- a/src/main/java/fr/xephi/authme/AuthMe.java +++ b/src/main/java/fr/xephi/authme/AuthMe.java @@ -77,7 +77,7 @@ public class AuthMe extends JavaPlugin { public DataSource database = null; private Settings settings; - private Messages m; + private Messages m; public PlayersLogs pllog; public OtherAccounts otherAccounts; public static Server server; @@ -87,108 +87,111 @@ public class AuthMe extends JavaPlugin { private Utils utils = Utils.getInstance(); private JavaPlugin plugin; private FileCache playerBackup = new FileCache(); - public CitizensCommunicator citizens; - public SendMailSSL mail = null; - public int CitizensVersion = 0; - public int CombatTag = 0; - public double ChestShop = 0; - public boolean BungeeCord = false; - public Essentials ess; - public Notifications notifications; - public API api; - public Management management; + public CitizensCommunicator citizens; + public SendMailSSL mail = null; + public int CitizensVersion = 0; + public int CombatTag = 0; + public double ChestShop = 0; + public boolean BungeeCord = false; + public Essentials ess; + public Notifications notifications; + public API api; + public Management management; public HashMap captcha = new HashMap(); public HashMap cap = new HashMap(); public HashMap realIp = new HashMap(); - public MultiverseCore multiverse = null; - public Location essentialsSpawn; - public Thread databaseThread = null; - public LookupService ls = null; - public boolean antibotMod = false; - public boolean delayedAntiBot = true; - protected static String vgUrl = "http://monitor-1.verygames.net/api/?action=ipclean-real-ip&out=raw&ip=%IP%&port=%PORT%"; - public DataManager dataManager; + public MultiverseCore multiverse = null; + public Location essentialsSpawn; + public Thread databaseThread = null; + public LookupService ls = null; + public boolean antibotMod = false; + public boolean delayedAntiBot = true; + protected static String vgUrl = "http://monitor-1.verygames.net/api/?action=ipclean-real-ip&out=raw&ip=%IP%&port=%PORT%"; + public DataManager dataManager; - public Settings getSettings() { - return settings; - } + public Settings getSettings() { + return settings; + } - @Override + @Override public void onEnable() { - authme = this; + authme = this; - authmeLogger.setParent(this.getLogger()); + authmeLogger.setParent(this.getLogger()); - settings = new Settings(this); - settings.loadConfigOptions(); + settings = new Settings(this); + settings.loadConfigOptions(); - citizens = new CitizensCommunicator(this); + citizens = new CitizensCommunicator(this); if (Settings.enableAntiBot) { - Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() { - @Override - public void run() { - delayedAntiBot = false; - } - }, 2400); + Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() { + @Override + public void run() { + delayedAntiBot = false; + } + }, 2400); } - m = Messages.getInstance(); + m = Messages.getInstance(); pllog = PlayersLogs.getInstance(); - + otherAccounts = OtherAccounts.getInstance(); server = getServer(); - //Find Permissions + // Find Permissions checkVault(); - //Set Console Filter + // Set Console Filter if (Settings.removePassword) { - this.getLogger().setFilter(new ConsoleFilter()); - Bukkit.getLogger().setFilter(new ConsoleFilter()); - Logger.getLogger("Minecraft").setFilter(new ConsoleFilter()); - authmeLogger.setFilter(new ConsoleFilter()); - // Set Log4J Filter - try { - Class.forName("org.apache.logging.log4j.core.Filter"); - setLog4JFilter(); - } catch (ClassNotFoundException e) { - ConsoleLogger.info("You're using Minecraft 1.6.x or older, Log4J support is disabled"); - } catch (NoClassDefFoundError e) { - ConsoleLogger.info("You're using Minecraft 1.6.x or older, Log4J support is disabled"); - } + this.getLogger().setFilter(new ConsoleFilter()); + Bukkit.getLogger().setFilter(new ConsoleFilter()); + Logger.getLogger("Minecraft").setFilter(new ConsoleFilter()); + authmeLogger.setFilter(new ConsoleFilter()); + // Set Log4J Filter + try { + Class.forName("org.apache.logging.log4j.core.Filter"); + setLog4JFilter(); + } catch (ClassNotFoundException e) { + ConsoleLogger + .info("You're using Minecraft 1.6.x or older, Log4J support is disabled"); + } catch (NoClassDefFoundError e) { + ConsoleLogger + .info("You're using Minecraft 1.6.x or older, Log4J support is disabled"); + } } - //Load MailApi - if(!Settings.getmailAccount.isEmpty() && !Settings.getmailPassword.isEmpty()) - mail = new SendMailSSL(this); + // Load MailApi + if (!Settings.getmailAccount.isEmpty() + && !Settings.getmailPassword.isEmpty()) mail = new SendMailSSL( + this); - //Check Citizens Version - citizensVersion(); + // Check Citizens Version + citizensVersion(); - //Check Combat Tag Version - combatTag(); + // Check Combat Tag Version + combatTag(); - //Check Notifications - checkNotifications(); + // Check Notifications + checkNotifications(); - //Check Multiverse - checkMultiverse(); + // Check Multiverse + checkMultiverse(); - //Check ChestShop - checkChestShop(); + // Check ChestShop + checkChestShop(); - //Check Essentials - checkEssentials(); + // Check Essentials + checkEssentials(); /* - * Back style on start if avalaible + * Back style on start if avalaible */ - if(Settings.isBackupActivated && Settings.isBackupOnStart) { - Boolean Backup = new PerformBackup(this).DoBackup(); - if(Backup) ConsoleLogger.info("Backup Complete"); + if (Settings.isBackupActivated && Settings.isBackupOnStart) { + Boolean Backup = new PerformBackup(this).DoBackup(); + if (Backup) ConsoleLogger.info("Backup Complete"); else ConsoleLogger.showError("Error while making Backup"); } @@ -221,59 +224,64 @@ public class AuthMe extends JavaPlugin { } // Setup API - api = new API(this, database); + api = new API(this, database); - // Setup Management - management = new Management(database, this); - management.start(); + // Setup Management + management = new Management(database, this); + management.start(); PluginManager pm = getServer().getPluginManager(); if (Settings.bungee) { - Bukkit.getMessenger().registerOutgoingPluginChannel(this, "BungeeCord"); - Bukkit.getMessenger().registerIncomingPluginChannel(this, "BungeeCord", new BungeeCordMessage(this)); + Bukkit.getMessenger().registerOutgoingPluginChannel(this, + "BungeeCord"); + Bukkit.getMessenger().registerIncomingPluginChannel(this, + "BungeeCord", new BungeeCordMessage(this)); } if (pm.isPluginEnabled("Spout")) { - pm.registerEvents(new AuthMeSpoutListener(database), this); - ConsoleLogger.info("Successfully hook with Spout!"); + pm.registerEvents(new AuthMeSpoutListener(database), this); + ConsoleLogger.info("Successfully hook with Spout!"); } - pm.registerEvents(new AuthMePlayerListener(this,database),this); - pm.registerEvents(new AuthMeBlockListener(database, this),this); - pm.registerEvents(new AuthMeEntityListener(database, this),this); + pm.registerEvents(new AuthMePlayerListener(this, database), this); + pm.registerEvents(new AuthMeBlockListener(database, this), this); + pm.registerEvents(new AuthMeEntityListener(database, this), this); pm.registerEvents(new AuthMeServerListener(this), this); if (ChestShop != 0) { - pm.registerEvents(new AuthMeChestShopListener(database, this), this); - ConsoleLogger.info("Successfully hook with ChestShop!"); + pm.registerEvents(new AuthMeChestShopListener(database, this), this); + ConsoleLogger.info("Successfully hook with ChestShop!"); } this.getCommand("authme").setExecutor(new AdminCommand(this, database)); this.getCommand("register").setExecutor(new RegisterCommand(this)); this.getCommand("login").setExecutor(new LoginCommand(this)); - this.getCommand("changepassword").setExecutor(new ChangePasswordCommand(database, this)); - this.getCommand("logout").setExecutor(new LogoutCommand(this,database)); - this.getCommand("unregister").setExecutor(new UnregisterCommand(this, database)); + this.getCommand("changepassword").setExecutor( + new ChangePasswordCommand(database, this)); + this.getCommand("logout") + .setExecutor(new LogoutCommand(this, database)); + this.getCommand("unregister").setExecutor( + new UnregisterCommand(this, database)); this.getCommand("passpartu").setExecutor(new PasspartuCommand(this)); this.getCommand("email").setExecutor(new EmailCommand(this, database)); this.getCommand("captcha").setExecutor(new CaptchaCommand(this)); - this.getCommand("converter").setExecutor(new ConverterCommand(this, database)); + this.getCommand("converter").setExecutor( + new ConverterCommand(this, database)); - if(!Settings.isForceSingleSessionEnabled) { - ConsoleLogger.showError("ATTENTION by disabling ForceSingleSession, your server protection is set to low"); + if (!Settings.isForceSingleSessionEnabled) { + ConsoleLogger + .showError("ATTENTION by disabling ForceSingleSession, your server protection is set to low"); } - if (Settings.reloadSupport) - try { - onReload(); - if (server.getOnlinePlayers().length < 1) { - try { - database.purgeLogged(); - } catch (NullPointerException npe) { - } + if (Settings.reloadSupport) try { + onReload(); + if (server.getOnlinePlayers().length < 1) { + try { + database.purgeLogged(); + } catch (NullPointerException npe) { } - } catch (NullPointerException ex) { - } + } + } catch (NullPointerException ex) { + } - if (Settings.usePurge) - autoPurge(); + if (Settings.usePurge) autoPurge(); // Download GeoIp.dat file downloadGeoIp(); @@ -284,347 +292,381 @@ public class AuthMe extends JavaPlugin { dataManager = new DataManager(this, database); dataManager.start(); - ConsoleLogger.info("Authme " + this.getDescription().getVersion() + " enabled"); + ConsoleLogger.info("Authme " + this.getDescription().getVersion() + + " enabled"); } - private void setLog4JFilter() { - Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() { - @Override - public void run() { - org.apache.logging.log4j.core.Logger coreLogger = (org.apache.logging.log4j.core.Logger) LogManager.getRootLogger(); - coreLogger.addFilter(new Log4JFilter()); - } - }); - } + private void setLog4JFilter() { + Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() { + @Override + public void run() { + org.apache.logging.log4j.core.Logger coreLogger = (org.apache.logging.log4j.core.Logger) LogManager + .getRootLogger(); + coreLogger.addFilter(new Log4JFilter()); + } + }); + } - public void checkVault() { - if (this.getServer().getPluginManager().getPlugin("Vault") != null && this.getServer().getPluginManager().getPlugin("Vault").isEnabled()) { - RegisteredServiceProvider permissionProvider = - getServer().getServicesManager().getRegistration(net.milkbowl.vault.permission.Permission.class); + public void checkVault() { + if (this.getServer().getPluginManager().getPlugin("Vault") != null + && this.getServer().getPluginManager().getPlugin("Vault") + .isEnabled()) { + RegisteredServiceProvider permissionProvider = getServer() + .getServicesManager().getRegistration( + net.milkbowl.vault.permission.Permission.class); if (permissionProvider != null) { - permission = permissionProvider.getProvider(); - ConsoleLogger.info("Vault plugin detected, hook with " + permission.getName() + " system"); + permission = permissionProvider.getProvider(); + ConsoleLogger.info("Vault plugin detected, hook with " + + permission.getName() + " system"); } else { - ConsoleLogger.showError("Vault plugin is detected but not the permissions plugin!"); + ConsoleLogger + .showError("Vault plugin is detected but not the permissions plugin!"); } } else { - permission = null; + permission = null; } - } + } - public void checkChestShop() { - if (!Settings.chestshop) { - this.ChestShop = 0; - return; - } - if (this.getServer().getPluginManager().getPlugin("ChestShop") != null && this.getServer().getPluginManager().getPlugin("ChestShop").isEnabled()) { - try { - String ver = com.Acrobot.ChestShop.ChestShop.getVersion(); - try { - double version = Double.valueOf(ver.split(" ")[0]); - if (version >= 3.50) { - this.ChestShop = version; - } else { - ConsoleLogger.showError("Please Update your ChestShop version!"); - } - } catch (NumberFormatException nfe) { - try { - double version = Double.valueOf(ver.split("t")[0]); - if (version >= 3.50) { - this.ChestShop = version; - } else { - ConsoleLogger.showError("Please Update your ChestShop version!"); - } - } catch (NumberFormatException nfee) { - } - } - } catch (Exception e) {} - } else { - this.ChestShop = 0; - } - } + public void checkChestShop() { + if (!Settings.chestshop) { + this.ChestShop = 0; + return; + } + if (this.getServer().getPluginManager().getPlugin("ChestShop") != null + && this.getServer().getPluginManager().getPlugin("ChestShop") + .isEnabled()) { + try { + String ver = com.Acrobot.ChestShop.ChestShop.getVersion(); + try { + double version = Double.valueOf(ver.split(" ")[0]); + if (version >= 3.50) { + this.ChestShop = version; + } else { + ConsoleLogger + .showError("Please Update your ChestShop version!"); + } + } catch (NumberFormatException nfe) { + try { + double version = Double.valueOf(ver.split("t")[0]); + if (version >= 3.50) { + this.ChestShop = version; + } else { + ConsoleLogger + .showError("Please Update your ChestShop version!"); + } + } catch (NumberFormatException nfee) { + } + } + } catch (Exception e) { + } + } else { + this.ChestShop = 0; + } + } - public void checkMultiverse() { - if(!Settings.multiverse) { - multiverse = null; - return; - } - if (this.getServer().getPluginManager().getPlugin("Multiverse-Core") != null && this.getServer().getPluginManager().getPlugin("Multiverse-Core").isEnabled()) { - try { - multiverse = (MultiverseCore) this.getServer().getPluginManager().getPlugin("Multiverse-Core"); - ConsoleLogger.info("Hook with Multiverse-Core for SpawnLocations"); - } catch (NullPointerException npe) { - multiverse = null; - } catch (ClassCastException cce) { - multiverse = null; - } catch (NoClassDefFoundError ncdfe) { - multiverse = null; - } - } else { - multiverse = null; - } - } + public void checkMultiverse() { + if (!Settings.multiverse) { + multiverse = null; + return; + } + if (this.getServer().getPluginManager().getPlugin("Multiverse-Core") != null + && this.getServer().getPluginManager() + .getPlugin("Multiverse-Core").isEnabled()) { + try { + multiverse = (MultiverseCore) this.getServer() + .getPluginManager().getPlugin("Multiverse-Core"); + ConsoleLogger + .info("Hook with Multiverse-Core for SpawnLocations"); + } catch (NullPointerException npe) { + multiverse = null; + } catch (ClassCastException cce) { + multiverse = null; + } catch (NoClassDefFoundError ncdfe) { + multiverse = null; + } + } else { + multiverse = null; + } + } - public void checkEssentials() { - if (this.getServer().getPluginManager().getPlugin("Essentials") != null && this.getServer().getPluginManager().getPlugin("Essentials").isEnabled()) { - try { - ess = (Essentials) this.getServer().getPluginManager().getPlugin("Essentials"); - ConsoleLogger.info("Hook with Essentials plugin"); - } catch (NullPointerException npe) { - ess = null; - } catch (ClassCastException cce) { - ess = null; - } catch (NoClassDefFoundError ncdfe) { - ess = null; - } - } else { - ess = null; - } - if (this.getServer().getPluginManager().getPlugin("EssentialsSpawn") != null && this.getServer().getPluginManager().getPlugin("EssentialsSpawn").isEnabled()) { - try { - essentialsSpawn = new EssSpawn().getLocation(); - ConsoleLogger.info("Hook with EssentialsSpawn plugin"); - } catch (Exception e) { - essentialsSpawn = null; - ConsoleLogger.showError("Error while reading /plugins/Essentials/spawn.yml file "); - } - } else { - ess = null; - } - } + public void checkEssentials() { + if (this.getServer().getPluginManager().getPlugin("Essentials") != null + && this.getServer().getPluginManager().getPlugin("Essentials") + .isEnabled()) { + try { + ess = (Essentials) this.getServer().getPluginManager() + .getPlugin("Essentials"); + ConsoleLogger.info("Hook with Essentials plugin"); + } catch (NullPointerException npe) { + ess = null; + } catch (ClassCastException cce) { + ess = null; + } catch (NoClassDefFoundError ncdfe) { + ess = null; + } + } else { + ess = null; + } + if (this.getServer().getPluginManager().getPlugin("EssentialsSpawn") != null + && this.getServer().getPluginManager() + .getPlugin("EssentialsSpawn").isEnabled()) { + try { + essentialsSpawn = new EssSpawn().getLocation(); + ConsoleLogger.info("Hook with EssentialsSpawn plugin"); + } catch (Exception e) { + essentialsSpawn = null; + ConsoleLogger + .showError("Error while reading /plugins/Essentials/spawn.yml file "); + } + } else { + ess = null; + } + } - public void checkNotifications() { - if (!Settings.notifications) { - this.notifications = null; - return; - } - if (this.getServer().getPluginManager().getPlugin("Notifications") != null && this.getServer().getPluginManager().getPlugin("Notifications").isEnabled()) { - this.notifications = (Notifications) this.getServer().getPluginManager().getPlugin("Notifications"); - ConsoleLogger.info("Successfully hook with Notifications"); - } else { - this.notifications = null; - } - } + public void checkNotifications() { + if (!Settings.notifications) { + this.notifications = null; + return; + } + if (this.getServer().getPluginManager().getPlugin("Notifications") != null + && this.getServer().getPluginManager() + .getPlugin("Notifications").isEnabled()) { + this.notifications = (Notifications) this.getServer() + .getPluginManager().getPlugin("Notifications"); + ConsoleLogger.info("Successfully hook with Notifications"); + } else { + this.notifications = null; + } + } - public void combatTag() { - if (this.getServer().getPluginManager().getPlugin("CombatTag") != null && this.getServer().getPluginManager().getPlugin("CombatTag").isEnabled()) { - this.CombatTag = 1; - } else { - this.CombatTag = 0; - } - } + public void combatTag() { + if (this.getServer().getPluginManager().getPlugin("CombatTag") != null + && this.getServer().getPluginManager().getPlugin("CombatTag") + .isEnabled()) { + this.CombatTag = 1; + } else { + this.CombatTag = 0; + } + } - public void citizensVersion() { - if (this.getServer().getPluginManager().getPlugin("Citizens") != null && this.getServer().getPluginManager().getPlugin("Citizens").isEnabled()) { - Citizens cit = (Citizens) this.getServer().getPluginManager().getPlugin("Citizens"); + public void citizensVersion() { + if (this.getServer().getPluginManager().getPlugin("Citizens") != null + && this.getServer().getPluginManager().getPlugin("Citizens") + .isEnabled()) { + Citizens cit = (Citizens) this.getServer().getPluginManager() + .getPlugin("Citizens"); String ver = cit.getDescription().getVersion(); String[] args = ver.split("\\."); if (args[0].contains("1")) { - this.CitizensVersion = 1; + this.CitizensVersion = 1; } else { - this.CitizensVersion = 2; + this.CitizensVersion = 2; } - } else { - this.CitizensVersion = 0; - } - } + } else { + this.CitizensVersion = 0; + } + } - @Override + @Override public void onDisable() { - if (Bukkit.getOnlinePlayers().length != 0) - for(Player player : Bukkit.getOnlinePlayers()) { - this.savePlayer(player); - } + if (Bukkit.getOnlinePlayers().length != 0) for (Player player : Bukkit + .getOnlinePlayers()) { + this.savePlayer(player); + } if (database != null) { database.close(); } if (databaseThread != null) { - if (databaseThread.isAlive()) - databaseThread.interrupt(); + if (databaseThread.isAlive()) databaseThread.interrupt(); } if (dataManager != null) { - if (dataManager.isAlive()) - dataManager.interrupt(); + if (dataManager.isAlive()) dataManager.interrupt(); } - if(Settings.isBackupActivated && Settings.isBackupOnStop) { - Boolean Backup = new PerformBackup(this).DoBackup(); - if(Backup) ConsoleLogger.info("Backup Complete"); - else ConsoleLogger.showError("Error while making Backup"); + 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"); + ConsoleLogger.info("Authme " + this.getDescription().getVersion() + + " disabled"); } - private void onReload() { - try { - if (Bukkit.getServer().getOnlinePlayers() != null) { - for (Player player : Bukkit.getServer().getOnlinePlayers()) { - if (database.isLogged(player.getName().toLowerCase())) { - String name = player.getName().toLowerCase(); - PlayerAuth pAuth = database.getAuth(name); - if(pAuth == null) - break; - PlayerAuth auth = new PlayerAuth(name, pAuth.getHash(), pAuth.getIp(), new Date().getTime(), pAuth.getEmail(), player.getName()); - database.updateSession(auth); - PlayerCache.getInstance().addPlayer(auth); - } - } - } - return; - } catch (NullPointerException ex) { - return; - } + private void onReload() { + try { + if (Bukkit.getServer().getOnlinePlayers() != null) { + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + if (database.isLogged(player.getName().toLowerCase())) { + String name = player.getName().toLowerCase(); + PlayerAuth pAuth = database.getAuth(name); + if (pAuth == null) break; + PlayerAuth auth = new PlayerAuth(name, pAuth.getHash(), + pAuth.getIp(), new Date().getTime(), + pAuth.getEmail(), player.getName()); + database.updateSession(auth); + PlayerCache.getInstance().addPlayer(auth); + } + } + } + return; + } catch (NullPointerException ex) { + return; + } } - public static AuthMe getInstance() { - return authme; - } + public static AuthMe getInstance() { + return authme; + } - 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() && Settings.isSaveQuitLocationEnabled) { - final PlayerAuth auth = new PlayerAuth(player.getName().toLowerCase(), player.getLocation().getX(), player.getLocation().getY(), player.getLocation().getZ(), player.getWorld().getName()); - database.updateQuitLoc(auth); - } - if (LimboCache.getInstance().hasLimboPlayer(name)) - { - LimboPlayer limbo = LimboCache.getInstance().getLimboPlayer(name); - if (Settings.protectInventoryBeforeLogInEnabled.booleanValue()) { - player.getInventory().setArmorContents(limbo.getArmour()); - player.getInventory().setContents(limbo.getInventory()); - } - if (!Settings.noTeleport) - 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); - database.setUnlogged(name); - player.saveData(); - } catch (Exception ex) { - } - } + 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() && Settings.isSaveQuitLocationEnabled) { + final PlayerAuth auth = new PlayerAuth(player.getName() + .toLowerCase(), player.getLocation().getX(), player + .getLocation().getY(), player.getLocation().getZ(), + player.getWorld().getName()); + database.updateQuitLoc(auth); + } + if (LimboCache.getInstance().hasLimboPlayer(name)) { + LimboPlayer limbo = LimboCache.getInstance().getLimboPlayer( + name); + if (Settings.protectInventoryBeforeLogInEnabled.booleanValue()) { + player.getInventory().setArmorContents(limbo.getArmour()); + player.getInventory().setContents(limbo.getInventory()); + } + if (!Settings.noTeleport) 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); + database.setUnlogged(name); + player.saveData(); + } catch (Exception ex) { + } + } - public CitizensCommunicator getCitizensCommunicator() { - return citizens; - } + public CitizensCommunicator getCitizensCommunicator() { + return citizens; + } - public void setMessages(Messages m) { - this.m = m; - } + public void setMessages(Messages m) { + this.m = m; + } - public Messages getMessages() { - return m; - } + public Messages getMessages() { + return m; + } - public Player generateKickPlayer(Player[] players) { - Player player = null; - int i; - for (i = 0 ; i <= players.length ; i++) { - Random rdm = new Random(); - int a = rdm.nextInt(players.length); - if (!(authmePermissible(players[a], "authme.vip"))) { - player = players[a]; - break; - } - } - if (player == null) { - for (Player p : players) { - if (!(authmePermissible(p, "authme.vip"))) { - player = p; - break; - } - } - } - return player; - } + public Player generateKickPlayer(Player[] players) { + Player player = null; + int i; + for (i = 0; i <= players.length; i++) { + Random rdm = new Random(); + int a = rdm.nextInt(players.length); + if (!(authmePermissible(players[a], "authme.vip"))) { + player = players[a]; + break; + } + } + if (player == null) { + for (Player p : players) { + if (!(authmePermissible(p, "authme.vip"))) { + player = p; + break; + } + } + } + return player; + } - public boolean authmePermissible(Player player, String perm) { - if (player.hasPermission(perm)) - return true; - else if (permission != null) { - return permission.playerHas(player, perm); - } - return false; - } + public boolean authmePermissible(Player player, String perm) { + if (player.hasPermission(perm)) return true; + else if (permission != null) { + return permission.playerHas(player, perm); + } + return false; + } - public boolean authmePermissible(CommandSender sender, String perm) { - if (sender.hasPermission(perm)) return true; - else if (permission != null) { - return permission.has(sender, perm); - } - return false; - } + public boolean authmePermissible(CommandSender sender, String perm) { + if (sender.hasPermission(perm)) return true; + else if (permission != null) { + return permission.has(sender, perm); + } + return false; + } - private void autoPurge() { - if (!Settings.usePurge) { - return; - } + private void autoPurge() { + if (!Settings.usePurge) { + return; + } Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DATE, -(Settings.purgeDelay)); long until = calendar.getTimeInMillis(); - List cleared = this.database.autoPurgeDatabase(until); - ConsoleLogger.info("AutoPurgeDatabase : " + cleared.size() + " accounts removed."); - if (cleared.isEmpty()) - return; - if (Settings.purgeEssentialsFile && this.ess != null) - dataManager.purgeEssentials(cleared); - if (Settings.purgePlayerDat) - dataManager.purgeDat(cleared); - if (Settings.purgeLimitedCreative) - dataManager.purgeLimitedCreative(cleared); - if (Settings.purgeAntiXray) - dataManager.purgeAntiXray(cleared); - } + List cleared = this.database.autoPurgeDatabase(until); + ConsoleLogger.info("AutoPurgeDatabase : " + cleared.size() + + " accounts removed."); + if (cleared.isEmpty()) return; + if (Settings.purgeEssentialsFile && this.ess != null) dataManager + .purgeEssentials(cleared); + if (Settings.purgePlayerDat) dataManager.purgeDat(cleared); + if (Settings.purgeLimitedCreative) dataManager + .purgeLimitedCreative(cleared); + if (Settings.purgeAntiXray) dataManager.purgeAntiXray(cleared); + } public Location getSpawnLocation(Player player) { - World world = player.getWorld(); - String[] spawnPriority = Settings.spawnPriority.split(","); - if (spawnPriority.length < 4) { - ConsoleLogger.showError("Check your config for spawnPriority, you need to put all of 4 spawn priorities"); - ConsoleLogger.showError("Defaulting Spawn to world's one"); - return world.getSpawnLocation(); - } + World world = player.getWorld(); + String[] spawnPriority = Settings.spawnPriority.split(","); + if (spawnPriority.length < 4) { + ConsoleLogger + .showError("Check your config for spawnPriority, you need to put all of 4 spawn priorities"); + ConsoleLogger.showError("Defaulting Spawn to world's one"); + return world.getSpawnLocation(); + } Location spawnLoc = world.getSpawnLocation(); int i = 3; - for (i = 3 ; i >= 0 ; i--) { - String s = spawnPriority[i]; - if (s.equalsIgnoreCase("default") && getDefaultSpawn(world) != null) - spawnLoc = getDefaultSpawn(world); - if (s.equalsIgnoreCase("multiverse") && getMultiverseSpawn(world) != null) - spawnLoc = getMultiverseSpawn(world); - if (s.equalsIgnoreCase("essentials") && getEssentialsSpawn() != null) - spawnLoc = getEssentialsSpawn(); - if (s.equalsIgnoreCase("authme") && getAuthMeSpawn(player) != null) - spawnLoc = getAuthMeSpawn(player); + for (i = 3; i >= 0; i--) { + String s = spawnPriority[i]; + if (s.equalsIgnoreCase("default") && getDefaultSpawn(world) != null) spawnLoc = getDefaultSpawn(world); + if (s.equalsIgnoreCase("multiverse") + && getMultiverseSpawn(world) != null) spawnLoc = getMultiverseSpawn(world); + if (s.equalsIgnoreCase("essentials") + && getEssentialsSpawn() != null) spawnLoc = getEssentialsSpawn(); + if (s.equalsIgnoreCase("authme") && getAuthMeSpawn(player) != null) spawnLoc = getAuthMeSpawn(player); } - if (spawnLoc == null) - spawnLoc = world.getSpawnLocation(); + if (spawnLoc == null) spawnLoc = world.getSpawnLocation(); return spawnLoc; } private Location getDefaultSpawn(World world) { - return world.getSpawnLocation(); + return world.getSpawnLocation(); } private Location getMultiverseSpawn(World world) { if (multiverse != null && Settings.multiverse) { try { - return multiverse.getMVWorldManager().getMVWorld(world).getSpawnLocation(); + return multiverse.getMVWorldManager().getMVWorld(world) + .getSpawnLocation(); } catch (NullPointerException npe) { } catch (ClassCastException cce) { } catch (NoClassDefFoundError ncdfe) { @@ -634,162 +676,173 @@ public class AuthMe extends JavaPlugin { } private Location getEssentialsSpawn() { - if (essentialsSpawn != null) - return essentialsSpawn; + if (essentialsSpawn != null) return essentialsSpawn; return null; } - + private Location getAuthMeSpawn(Player player) { - if ((!database.isAuthAvailable(player.getName().toLowerCase()) || !player.hasPlayedBefore()) && (Spawn.getInstance().getFirstSpawn() != null)) - return Spawn.getInstance().getFirstSpawn(); - if (Spawn.getInstance().getSpawn() != null) - return Spawn.getInstance().getSpawn(); + if ((!database.isAuthAvailable(player.getName().toLowerCase()) || !player + .hasPlayedBefore()) + && (Spawn.getInstance().getFirstSpawn() != null)) return Spawn + .getInstance().getFirstSpawn(); + if (Spawn.getInstance().getSpawn() != null) return Spawn.getInstance() + .getSpawn(); return null; } public void downloadGeoIp() { - ConsoleLogger.info("LICENSE : This product includes GeoLite data created by MaxMind, available from http://www.maxmind.com"); - File file = new File(getDataFolder(), "GeoIP.dat"); - if (!file.exists()) { - try { - String url = "http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz"; + ConsoleLogger + .info("LICENSE : This product includes GeoLite data created by MaxMind, available from http://www.maxmind.com"); + File file = new File(getDataFolder(), "GeoIP.dat"); + if (!file.exists()) { + try { + String url = "http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz"; URL downloadUrl = new URL(url); URLConnection conn = downloadUrl.openConnection(); conn.setConnectTimeout(10000); conn.connect(); InputStream input = conn.getInputStream(); - if (url.endsWith(".gz")) - input = new GZIPInputStream(input); + if (url.endsWith(".gz")) input = new GZIPInputStream(input); OutputStream output = new FileOutputStream(file); byte[] buffer = new byte[2048]; int length = input.read(buffer); while (length >= 0) { - output.write(buffer, 0, length); - length = input.read(buffer); + output.write(buffer, 0, length); + length = input.read(buffer); } output.close(); input.close(); - } catch (Exception e) {} - } + } catch (Exception e) { + } + } } - + public String getCountryCode(String ip) { - try { - if (ls == null) - ls = new LookupService(new File(getDataFolder(), "GeoIP.dat")); - String code = ls.getCountry(ip).getCode(); - if (code != null && !code.isEmpty()) - return code; - } catch (Exception e) {} - return null; + try { + if (ls == null) ls = new LookupService(new File(getDataFolder(), + "GeoIP.dat")); + String code = ls.getCountry(ip).getCode(); + if (code != null && !code.isEmpty()) return code; + } catch (Exception e) { + } + return null; } public String getCountryName(String ip) { - try { - if (ls == null) - ls = new LookupService(new File(getDataFolder(), "GeoIP.dat")); - String code = ls.getCountry(ip).getName(); - if (code != null && !code.isEmpty()) - return code; - } catch (Exception e) {} - return null; + try { + if (ls == null) ls = new LookupService(new File(getDataFolder(), + "GeoIP.dat")); + String code = ls.getCountry(ip).getName(); + if (code != null && !code.isEmpty()) return code; + } catch (Exception e) { + } + return null; } public void switchAntiBotMod(boolean mode) { - this.antibotMod = mode; - Settings.switchAntiBotMod(mode); + this.antibotMod = mode; + Settings.switchAntiBotMod(mode); } private void recallEmail() { - if (!Settings.recallEmail) - return; - Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable(){ - @Override - public void run() { - for (Player player : Bukkit.getOnlinePlayers()) { - if (player.isOnline()) { - String name = player.getName().toLowerCase(); - if (database.isAuthAvailable(name)) - if (PlayerCache.getInstance().isAuthenticated(name)) { - String email = database.getAuth(name).getEmail(); - if (email == null || email.isEmpty() || email.equalsIgnoreCase("your@email.com")) - m._(player, "add_email"); - } - } - } - } - }, 1, 1200 * Settings.delayRecall); + if (!Settings.recallEmail) return; + Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() { + @Override + public void run() { + for (Player player : Bukkit.getOnlinePlayers()) { + if (player.isOnline()) { + String name = player.getName().toLowerCase(); + if (database.isAuthAvailable(name)) if (PlayerCache + .getInstance().isAuthenticated(name)) { + String email = database.getAuth(name).getEmail(); + if (email == null || email.isEmpty() + || email.equalsIgnoreCase("your@email.com")) m + ._(player, "add_email"); + } + } + } + } + }, 1, 1200 * Settings.delayRecall); } public String replaceAllInfos(String message, Player player) { - try { - message = message.replace("&", "\u00a7"); - message = message.replace("{PLAYER}", player.getName()); - message = message.replace("{ONLINE}", ""+this.getServer().getOnlinePlayers().length); - message = message.replace("{MAXPLAYERS}", ""+this.getServer().getMaxPlayers()); - message = message.replace("{IP}", getIP(player)); - message = message.replace("{LOGINS}", ""+PlayerCache.getInstance().getLogged()); - message = message.replace("{WORLD}", player.getWorld().getName()); - message = message.replace("{SERVER}", this.getServer().getServerName()); - message = message.replace("{VERSION}", this.getServer().getBukkitVersion()); - message = message.replace("{COUNTRY}", this.getCountryName(getIP(player))); - } catch (Exception e) {} - return message; + try { + message = message.replace("&", "\u00a7"); + message = message.replace("{PLAYER}", player.getName()); + message = message.replace("{ONLINE}", "" + + this.getServer().getOnlinePlayers().length); + message = message.replace("{MAXPLAYERS}", "" + + this.getServer().getMaxPlayers()); + message = message.replace("{IP}", getIP(player)); + message = message.replace("{LOGINS}", "" + + PlayerCache.getInstance().getLogged()); + message = message.replace("{WORLD}", player.getWorld().getName()); + message = message.replace("{SERVER}", this.getServer() + .getServerName()); + message = message.replace("{VERSION}", this.getServer() + .getBukkitVersion()); + message = message.replace("{COUNTRY}", + this.getCountryName(getIP(player))); + } catch (Exception e) { + } + return message; } - + public String getIP(Player player) { - String name = player.getName().toLowerCase(); + String name = player.getName().toLowerCase(); String ip = player.getAddress().getAddress().getHostAddress(); if (Settings.bungee) { - if (realIp.containsKey(name)) - ip = realIp.get(name); + if (realIp.containsKey(name)) ip = realIp.get(name); } - if (Settings.checkVeryGames) - if (getVeryGamesIP(player) != null) - ip = getVeryGamesIP(player); + if (Settings.checkVeryGames) if (getVeryGamesIP(player) != null) ip = getVeryGamesIP(player); return ip; } - public boolean isLoggedIp(String name, String ip) { - int count = 0; - for (Player player : this.getServer().getOnlinePlayers()) { - if(ip.equalsIgnoreCase(getIP(player)) && database.isLogged(player.getName().toLowerCase()) && !player.getName().equalsIgnoreCase(name)) - count++; - } - if (count >= Settings.getMaxLoginPerIp) - return true; - return false; - } + public boolean isLoggedIp(String name, String ip) { + int count = 0; + for (Player player : this.getServer().getOnlinePlayers()) { + if (ip.equalsIgnoreCase(getIP(player)) + && database.isLogged(player.getName().toLowerCase()) + && !player.getName().equalsIgnoreCase(name)) count++; + } + if (count >= Settings.getMaxLoginPerIp) return true; + return false; + } + + public boolean hasJoinedIp(String name, String ip) { + int count = 0; + for (Player player : this.getServer().getOnlinePlayers()) { + if (ip.equalsIgnoreCase(getIP(player)) + && !player.getName().equalsIgnoreCase(name)) count++; + } + if (count >= Settings.getMaxJoinPerIp) return true; + return false; + } - public boolean hasJoinedIp(String name, String ip) { - int count = 0; - for (Player player : this.getServer().getOnlinePlayers()) { - if(ip.equalsIgnoreCase(getIP(player)) && !player.getName().equalsIgnoreCase(name)) - count++; - } - if (count >= Settings.getMaxJoinPerIp) - return true; - return false; - } - /** * Get Player real IP through VeryGames method - * @param Player player + * + * @param Player + * player */ - public String getVeryGamesIP(Player player) { - String realIP = null; - String sUrl = vgUrl; - sUrl = sUrl.replace("%IP%", player.getAddress().getAddress().getHostAddress()).replace("%PORT%", ""+player.getAddress().getPort()); - try { - URL url = new URL(sUrl); - URLConnection urlc = url.openConnection(); - BufferedReader in = new BufferedReader(new InputStreamReader(urlc.getInputStream())); - String inputLine = in.readLine(); - if (inputLine != null && !inputLine.isEmpty() && !inputLine.equalsIgnoreCase("error")) { - realIP = inputLine; - } - } catch (Exception e) { - } - return realIP; - } + public String getVeryGamesIP(Player player) { + String realIP = null; + String sUrl = vgUrl; + sUrl = sUrl.replace("%IP%", + player.getAddress().getAddress().getHostAddress()).replace( + "%PORT%", "" + player.getAddress().getPort()); + try { + URL url = new URL(sUrl); + URLConnection urlc = url.openConnection(); + BufferedReader in = new BufferedReader(new InputStreamReader( + urlc.getInputStream())); + String inputLine = in.readLine(); + if (inputLine != null && !inputLine.isEmpty() + && !inputLine.equalsIgnoreCase("error")) { + realIP = inputLine; + } + } catch (Exception e) { + } + return realIP; + } } diff --git a/src/main/java/fr/xephi/authme/ConsoleFilter.java b/src/main/java/fr/xephi/authme/ConsoleFilter.java index 689bc5f6..dccad577 100644 --- a/src/main/java/fr/xephi/authme/ConsoleFilter.java +++ b/src/main/java/fr/xephi/authme/ConsoleFilter.java @@ -4,27 +4,35 @@ import java.util.logging.Filter; import java.util.logging.LogRecord; /** -* -* @author Xephi59 -*/ + * + * @author Xephi59 + */ public class ConsoleFilter implements Filter { - public ConsoleFilter() {} + public ConsoleFilter() { + } @Override public boolean isLoggable(LogRecord record) { - try { - if (record == null || record.getMessage() == null) return true; + try { + if (record == null || record.getMessage() == null) return true; String logM = record.getMessage().toLowerCase(); if (!logM.contains("issued server command:")) return true; - if (!logM.contains("/login ") && !logM.contains("/l ") && !logM.contains("/reg ") && !logM.contains("/changepassword ") && !logM.contains("/unregister ") - && !logM.contains("/authme register ") && !logM.contains("/authme changepassword ")&& !logM.contains("/authme reg ")&& !logM.contains("/authme cp ") && !logM.contains("/register ")) return true; + if (!logM.contains("/login ") && !logM.contains("/l ") + && !logM.contains("/reg ") + && !logM.contains("/changepassword ") + && !logM.contains("/unregister ") + && !logM.contains("/authme register ") + && !logM.contains("/authme changepassword ") + && !logM.contains("/authme reg ") + && !logM.contains("/authme cp ") + && !logM.contains("/register ")) return true; String playername = record.getMessage().split(" ")[0]; record.setMessage(playername + " issued an AuthMe command!"); return true; - } catch (NullPointerException npe) { - return true; - } + } catch (NullPointerException npe) { + return true; + } } } diff --git a/src/main/java/fr/xephi/authme/ConsoleLogger.java b/src/main/java/fr/xephi/authme/ConsoleLogger.java index 89b866fa..80d48a8d 100644 --- a/src/main/java/fr/xephi/authme/ConsoleLogger.java +++ b/src/main/java/fr/xephi/authme/ConsoleLogger.java @@ -12,53 +12,63 @@ import org.bukkit.Bukkit; import fr.xephi.authme.settings.Settings; - public class ConsoleLogger { private static final Logger log = Logger.getLogger("AuthMe"); public static void info(String 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); - } - }); - } - } + 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) { - if (AuthMe.getInstance().isEnabled()) { + if (AuthMe.getInstance().isEnabled()) { log.warning("[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); - } - }); + 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) { + public static void writeLog(String string) { try { - FileWriter fw = new FileWriter(AuthMe.getInstance().getDataFolder() + File.separator + "authme.log", true); - BufferedWriter w = new BufferedWriter(fw); - w.write(string); - w.newLine(); - w.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } + FileWriter fw = new FileWriter(AuthMe.getInstance().getDataFolder() + + File.separator + "authme.log", true); + BufferedWriter w = new BufferedWriter(fw); + w.write(string); + w.newLine(); + w.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } } diff --git a/src/main/java/fr/xephi/authme/DataManager.java b/src/main/java/fr/xephi/authme/DataManager.java index 535f36a0..b595812e 100644 --- a/src/main/java/fr/xephi/authme/DataManager.java +++ b/src/main/java/fr/xephi/authme/DataManager.java @@ -19,12 +19,15 @@ public class DataManager extends Thread { this.database = database; } - public void run() {} + public void run() { + } public OfflinePlayer getOfflinePlayer(String name) { OfflinePlayer result = null; try { - if (org.bukkit.Bukkit.class.getMethod("getOfflinePlayer", new Class[]{String.class}).isAnnotationPresent(Deprecated.class)) { + if (org.bukkit.Bukkit.class.getMethod("getOfflinePlayer", + new Class[] { String.class }).isAnnotationPresent( + Deprecated.class)) { for (OfflinePlayer op : Bukkit.getOfflinePlayers()) if (op.getName().equalsIgnoreCase(name)) { result = op; @@ -38,20 +41,23 @@ public class DataManager extends Thread { } return result; } - + public void purgeAntiXray(List cleared) { int i = 0; for (String name : cleared) { org.bukkit.OfflinePlayer player = getOfflinePlayer(name); if (player == null) continue; String playerName = player.getName(); - File playerFile = new File("." + File.separator + "plugins" + File.separator + "AntiXRayData" + File.separator + "PlayerData" + File.separator + playerName); + File playerFile = new File("." + File.separator + "plugins" + + File.separator + "AntiXRayData" + File.separator + + "PlayerData" + File.separator + playerName); if (playerFile.exists()) { playerFile.delete(); i++; } } - ConsoleLogger.info("AutoPurgeDatabase : Remove " + i + " AntiXRayData Files"); + ConsoleLogger.info("AutoPurgeDatabase : Remove " + i + + " AntiXRayData Files"); } public void purgeLimitedCreative(List cleared) { @@ -60,23 +66,32 @@ public class DataManager extends Thread { org.bukkit.OfflinePlayer player = getOfflinePlayer(name); if (player == null) continue; String playerName = player.getName(); - File playerFile = new File("." + File.separator + "plugins" + File.separator + "LimitedCreative" + File.separator + "inventories" + File.separator + playerName + ".yml"); + File playerFile = new File("." + File.separator + "plugins" + + File.separator + "LimitedCreative" + File.separator + + "inventories" + File.separator + playerName + ".yml"); if (playerFile.exists()) { playerFile.delete(); i++; } - playerFile = new File("." + File.separator + "plugins" + File.separator + "LimitedCreative" + File.separator + "inventories" + File.separator + playerName + "_creative.yml"); + playerFile = new File("." + File.separator + "plugins" + + File.separator + "LimitedCreative" + File.separator + + "inventories" + File.separator + playerName + + "_creative.yml"); if (playerFile.exists()) { playerFile.delete(); i++; } - playerFile = new File("." + File.separator + "plugins" + File.separator + "LimitedCreative" + File.separator + "inventories" + File.separator + playerName + "_adventure.yml"); + playerFile = new File("." + File.separator + "plugins" + + File.separator + "LimitedCreative" + File.separator + + "inventories" + File.separator + playerName + + "_adventure.yml"); if (playerFile.exists()) { playerFile.delete(); i++; } } - ConsoleLogger.info("AutoPurgeDatabase : Remove " + i + " LimitedCreative Survival, Creative and Adventure files"); + ConsoleLogger.info("AutoPurgeDatabase : Remove " + i + + " LimitedCreative Survival, Creative and Adventure files"); } public void purgeDat(List cleared) { @@ -85,7 +100,9 @@ public class DataManager extends Thread { org.bukkit.OfflinePlayer player = getOfflinePlayer(name); if (player == null) continue; String playerName = player.getName(); - File playerFile = new File (plugin.getServer().getWorldContainer() + File.separator + Settings.defaultWorld + File.separator + "players" + File.separator + playerName + ".dat"); + File playerFile = new File(plugin.getServer().getWorldContainer() + + File.separator + Settings.defaultWorld + File.separator + + "players" + File.separator + playerName + ".dat"); if (playerFile.exists()) { playerFile.delete(); i++; @@ -97,12 +114,15 @@ public class DataManager extends Thread { public void purgeEssentials(List cleared) { int i = 0; for (String name : cleared) { - File playerFile = new File(plugin.ess.getDataFolder() + File.separator + "userdata" + File.separator + name + ".yml"); + File playerFile = new File(plugin.ess.getDataFolder() + + File.separator + "userdata" + File.separator + name + + ".yml"); if (playerFile.exists()) { playerFile.delete(); i++; } } - ConsoleLogger.info("AutoPurgeDatabase : Remove " + i + " EssentialsFiles"); + ConsoleLogger.info("AutoPurgeDatabase : Remove " + i + + " EssentialsFiles"); } } diff --git a/src/main/java/fr/xephi/authme/Log4JFilter.java b/src/main/java/fr/xephi/authme/Log4JFilter.java index 53a7f173..58587521 100644 --- a/src/main/java/fr/xephi/authme/Log4JFilter.java +++ b/src/main/java/fr/xephi/authme/Log4JFilter.java @@ -7,80 +7,110 @@ import org.apache.logging.log4j.core.Logger; import org.apache.logging.log4j.message.Message; /** -* -* @author Xephi59 -*/ + * + * @author Xephi59 + */ public class Log4JFilter implements org.apache.logging.log4j.core.Filter { - public Log4JFilter() {} + public Log4JFilter() { + } - @Override - public Result filter(LogEvent record) { - try { - if (record == null || record.getMessage() == null) return Result.NEUTRAL; - String logM = record.getMessage().getFormattedMessage().toLowerCase(); + @Override + public Result filter(LogEvent record) { + try { + if (record == null || record.getMessage() == null) return Result.NEUTRAL; + String logM = record.getMessage().getFormattedMessage() + .toLowerCase(); if (!logM.contains("issued server command:")) return Result.NEUTRAL; - if (!logM.contains("/login ") && !logM.contains("/l ") && !logM.contains("/reg ") && !logM.contains("/changepassword ") && !logM.contains("/unregister ") - && !logM.contains("/authme register ") && !logM.contains("/authme changepassword ")&& !logM.contains("/authme reg ")&& !logM.contains("/authme cp ") && !logM.contains("/register ")) return Result.NEUTRAL; + if (!logM.contains("/login ") && !logM.contains("/l ") + && !logM.contains("/reg ") + && !logM.contains("/changepassword ") + && !logM.contains("/unregister ") + && !logM.contains("/authme register ") + && !logM.contains("/authme changepassword ") + && !logM.contains("/authme reg ") + && !logM.contains("/authme cp ") + && !logM.contains("/register ")) return Result.NEUTRAL; return Result.DENY; - } catch (NullPointerException npe) { - return Result.NEUTRAL; - } - } + } catch (NullPointerException npe) { + return Result.NEUTRAL; + } + } - @Override - public Result filter(Logger arg0, Level arg1, Marker arg2, String message, - Object... arg4) { - try { - if (message == null) return Result.NEUTRAL; + @Override + public Result filter(Logger arg0, Level arg1, Marker arg2, String message, + Object... arg4) { + try { + if (message == null) return Result.NEUTRAL; String logM = message.toLowerCase(); if (!logM.contains("issued server command:")) return Result.NEUTRAL; - if (!logM.contains("/login ") && !logM.contains("/l ") && !logM.contains("/reg ") && !logM.contains("/changepassword ") && !logM.contains("/unregister ") - && !logM.contains("/authme register ") && !logM.contains("/authme changepassword ")&& !logM.contains("/authme reg ")&& !logM.contains("/authme cp ") && !logM.contains("/register ")) return Result.NEUTRAL; + if (!logM.contains("/login ") && !logM.contains("/l ") + && !logM.contains("/reg ") + && !logM.contains("/changepassword ") + && !logM.contains("/unregister ") + && !logM.contains("/authme register ") + && !logM.contains("/authme changepassword ") + && !logM.contains("/authme reg ") + && !logM.contains("/authme cp ") + && !logM.contains("/register ")) return Result.NEUTRAL; return Result.DENY; - } catch (NullPointerException npe) { - return Result.NEUTRAL; - } - } + } catch (NullPointerException npe) { + return Result.NEUTRAL; + } + } - @Override - public Result filter(Logger arg0, Level arg1, Marker arg2, Object message, - Throwable arg4) { - try { - if (message == null) return Result.NEUTRAL; + @Override + public Result filter(Logger arg0, Level arg1, Marker arg2, Object message, + Throwable arg4) { + try { + if (message == null) return Result.NEUTRAL; String logM = message.toString().toLowerCase(); if (!logM.contains("issued server command:")) return Result.NEUTRAL; - if (!logM.contains("/login ") && !logM.contains("/l ") && !logM.contains("/reg ") && !logM.contains("/changepassword ") && !logM.contains("/unregister ") - && !logM.contains("/authme register ") && !logM.contains("/authme changepassword ")&& !logM.contains("/authme reg ")&& !logM.contains("/authme cp ") && !logM.contains("/register ")) return Result.NEUTRAL; + if (!logM.contains("/login ") && !logM.contains("/l ") + && !logM.contains("/reg ") + && !logM.contains("/changepassword ") + && !logM.contains("/unregister ") + && !logM.contains("/authme register ") + && !logM.contains("/authme changepassword ") + && !logM.contains("/authme reg ") + && !logM.contains("/authme cp ") + && !logM.contains("/register ")) return Result.NEUTRAL; return Result.DENY; - } catch (NullPointerException npe) { - return Result.NEUTRAL; - } - } + } catch (NullPointerException npe) { + return Result.NEUTRAL; + } + } - @Override - public Result filter(Logger arg0, Level arg1, Marker arg2, Message message, - Throwable arg4) { - try { - if (message == null) return Result.NEUTRAL; + @Override + public Result filter(Logger arg0, Level arg1, Marker arg2, Message message, + Throwable arg4) { + try { + if (message == null) return Result.NEUTRAL; String logM = message.getFormattedMessage().toLowerCase(); if (!logM.contains("issued server command:")) return Result.NEUTRAL; - if (!logM.contains("/login ") && !logM.contains("/l ") && !logM.contains("/reg ") && !logM.contains("/changepassword ") && !logM.contains("/unregister ") - && !logM.contains("/authme register ") && !logM.contains("/authme changepassword ")&& !logM.contains("/authme reg ")&& !logM.contains("/authme cp ") && !logM.contains("/register ")) return Result.NEUTRAL; + if (!logM.contains("/login ") && !logM.contains("/l ") + && !logM.contains("/reg ") + && !logM.contains("/changepassword ") + && !logM.contains("/unregister ") + && !logM.contains("/authme register ") + && !logM.contains("/authme changepassword ") + && !logM.contains("/authme reg ") + && !logM.contains("/authme cp ") + && !logM.contains("/register ")) return Result.NEUTRAL; return Result.DENY; - } catch (NullPointerException npe) { - return Result.NEUTRAL; - } - } + } catch (NullPointerException npe) { + return Result.NEUTRAL; + } + } - @Override - public Result getOnMatch() { - return Result.NEUTRAL; - } + @Override + public Result getOnMatch() { + return Result.NEUTRAL; + } - @Override - public Result getOnMismatch() { - return Result.NEUTRAL; - } + @Override + public Result getOnMismatch() { + return Result.NEUTRAL; + } -} \ No newline at end of file +} diff --git a/src/main/java/fr/xephi/authme/PerformBackup.java b/src/main/java/fr/xephi/authme/PerformBackup.java index 8f3ecfc0..c5840075 100644 --- a/src/main/java/fr/xephi/authme/PerformBackup.java +++ b/src/main/java/fr/xephi/authme/PerformBackup.java @@ -17,127 +17,137 @@ import fr.xephi.authme.settings.Settings; */ public class PerformBackup { - private String dbName = Settings.getMySQLDatabase; - private String dbUserName = Settings.getMySQLUsername; - private String dbPassword = Settings.getMySQLPassword; - private String tblname = Settings.getMySQLTablename; - SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd_HH-mm"); - String dateString = format.format( new Date() ); - private String path = AuthMe.getInstance().getDataFolder()+"/backups/backup"+dateString; - private AuthMe instance; + private String dbName = Settings.getMySQLDatabase; + private String dbUserName = Settings.getMySQLUsername; + private String dbPassword = Settings.getMySQLPassword; + private String tblname = Settings.getMySQLTablename; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd_HH-mm"); + 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 PerformBackup(AuthMe instance) { + this.setInstance(instance); + } - public boolean DoBackup() { + public boolean DoBackup() { - switch(Settings.getDataSource) { - case FILE: return FileBackup("auths.db"); + switch (Settings.getDataSource) { + case FILE: + return FileBackup("auths.db"); - case MYSQL: return MySqlBackup(); + case MYSQL: + return MySqlBackup(); - case SQLITE: return FileBackup(Settings.getMySQLDatabase+".db"); + 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"; - Process runtimeProcess; - try { - runtimeProcess = Runtime.getRuntime().exec(executeCmd); - int processComplete = runtimeProcess.waitFor(); - if (processComplete == 0) { - ConsoleLogger.info("Backup created successfully"); - return true; - } else { - ConsoleLogger.info("Could not create the backup"); - } - } catch (Exception ex) { - ex.printStackTrace(); - } - } else { - String executeCmd = "mysqldump -u " + dbUserName + " -p" + dbPassword + " " + dbName + " --tables " + tblname + " -r " + path+".sql"; - Process runtimeProcess; - try { - runtimeProcess = Runtime.getRuntime().exec(executeCmd); - int processComplete = runtimeProcess.waitFor(); - if (processComplete == 0) { - ConsoleLogger.info("Backup created successfully"); - return true; - } else { - ConsoleLogger.info("Could not create the backup"); - } - } catch (Exception ex) { - ex.printStackTrace(); } - } + return false; } - private boolean FileBackup(String backend) { - File dirBackup = new File(AuthMe.getInstance().getDataFolder()+"/backups"); + private boolean MySqlBackup() { + 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) { - if(new File(windowsPath+"\\bin\\mysqldump.exe").exists()) { - return true; - } else { - ConsoleLogger.showError("Mysql Windows Path is incorrect please check it"); - return true; - } - } else return false; - } - - /* - * Copyr src bytefile into dst file - */ - void copy(File src, File dst) throws IOException { - InputStream in = new FileInputStream(src); - OutputStream out = new FileOutputStream(dst); - - // Transfer bytes from in to out - byte[] buf = new byte[1024]; - int len; - while ((len = in.read(buf)) > 0) { - out.write(buf, 0, len); - } - in.close(); - out.close(); + 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"; + Process runtimeProcess; + try { + runtimeProcess = Runtime.getRuntime().exec(executeCmd); + int processComplete = runtimeProcess.waitFor(); + if (processComplete == 0) { + ConsoleLogger.info("Backup created successfully"); + return true; + } else { + ConsoleLogger.info("Could not create the backup"); + } + } catch (Exception ex) { + ex.printStackTrace(); + } + } else { + String executeCmd = "mysqldump -u " + dbUserName + " -p" + + dbPassword + " " + dbName + " --tables " + tblname + + " -r " + path + ".sql"; + Process runtimeProcess; + try { + runtimeProcess = Runtime.getRuntime().exec(executeCmd); + int processComplete = runtimeProcess.waitFor(); + if (processComplete == 0) { + ConsoleLogger.info("Backup created successfully"); + return true; + } else { + ConsoleLogger.info("Could not create the backup"); + } + } catch (Exception ex) { + ex.printStackTrace(); + } + } + return false; } -public void setInstance(AuthMe instance) { - this.instance = instance; -} + private boolean FileBackup(String backend) { + File dirBackup = new File(AuthMe.getInstance().getDataFolder() + + "/backups"); -public AuthMe getInstance() { - return instance; -} + 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) { + if (new File(windowsPath + "\\bin\\mysqldump.exe").exists()) { + return true; + } else { + ConsoleLogger + .showError("Mysql Windows Path is incorrect please check it"); + return true; + } + } else return false; + } + + /* + * Copyr src bytefile into dst file + */ + void copy(File src, File dst) throws IOException { + InputStream in = new FileInputStream(src); + OutputStream out = new FileOutputStream(dst); + + // Transfer bytes from in to out + byte[] buf = new byte[1024]; + int len; + while ((len = in.read(buf)) > 0) { + out.write(buf, 0, len); + } + in.close(); + out.close(); + } + + public void setInstance(AuthMe instance) { + this.instance = instance; + } + + public AuthMe getInstance() { + return instance; + } } diff --git a/src/main/java/fr/xephi/authme/SendMailSSL.java b/src/main/java/fr/xephi/authme/SendMailSSL.java index 20dfd8e8..28d005bd 100644 --- a/src/main/java/fr/xephi/authme/SendMailSSL.java +++ b/src/main/java/fr/xephi/authme/SendMailSSL.java @@ -17,73 +17,79 @@ import fr.xephi.authme.cache.auth.PlayerAuth; import fr.xephi.authme.settings.Settings; /** -* -* @author Xephi59 -*/ + * + * @author Xephi59 + */ public class SendMailSSL { - public AuthMe plugin; + public AuthMe plugin; - public SendMailSSL(AuthMe plugin) { - this.plugin = plugin; - } + public SendMailSSL(AuthMe plugin) { + this.plugin = plugin; + } - public void main(final PlayerAuth auth, final String newPass) { - String sendername; + 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; - } + 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)); - props.put("mail.smtp.socketFactory.class", - "javax.net.ssl.SSLSocketFactory"); - props.put("mail.smtp.auth", "true"); - props.put("mail.smtp.port", String.valueOf(Settings.getMailPort)); + Properties props = new Properties(); + props.put("mail.smtp.host", Settings.getmailSMTP); + props.put("mail.smtp.socketFactory.port", + String.valueOf(Settings.getMailPort)); + props.put("mail.smtp.socketFactory.class", + "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() { - return new PasswordAuthentication(Settings.getmailAccount,Settings.getmailPassword); - } - }); + Session session = Session.getInstance(props, + new javax.mail.Authenticator() { + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication( + Settings.getmailAccount, + Settings.getmailPassword); + } + }); - try { + try { - final Message message = new MimeMessage(session); - try { - message.setFrom(new InternetAddress(Settings.getmailAccount, sendername)); - } catch (UnsupportedEncodingException uee) { - message.setFrom(new InternetAddress(Settings.getmailAccount)); - } - message.setRecipients(Message.RecipientType.TO, - InternetAddress.parse(auth.getEmail())); - message.setSubject(Settings.getMailSubject); - message.setSentDate(new Date()); - String text = Settings.getMailText; - text = text.replace("", auth.getNickname()); - text = text.replace("", plugin.getServer().getServerName()); - text = text.replace("", newPass); - message.setContent(text, "text/html"); - Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { - @Override - public void run() { - try { - Transport.send(message); - } catch (MessagingException e) { - e.printStackTrace(); - } - } - }); - if(!Settings.noConsoleSpam) - ConsoleLogger.info("Email sent to : " + auth.getNickname()); - } catch (MessagingException e) { - throw new RuntimeException(e); - } - } + final Message message = new MimeMessage(session); + try { + message.setFrom(new InternetAddress(Settings.getmailAccount, + sendername)); + } catch (UnsupportedEncodingException uee) { + message.setFrom(new InternetAddress(Settings.getmailAccount)); + } + message.setRecipients(Message.RecipientType.TO, + InternetAddress.parse(auth.getEmail())); + message.setSubject(Settings.getMailSubject); + message.setSentDate(new Date()); + String text = Settings.getMailText; + text = text.replace("", auth.getNickname()); + text = text.replace("", plugin.getServer() + .getServerName()); + text = text.replace("", newPass); + message.setContent(text, "text/html"); + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { + @Override + public void run() { + try { + Transport.send(message); + } catch (MessagingException e) { + e.printStackTrace(); + } + } + }); + if (!Settings.noConsoleSpam) ConsoleLogger.info("Email sent to : " + + auth.getNickname()); + } catch (MessagingException e) { + throw new RuntimeException(e); + } + } } diff --git a/src/main/java/fr/xephi/authme/Utils.java b/src/main/java/fr/xephi/authme/Utils.java index 10fb612e..9b6fb97c 100644 --- a/src/main/java/fr/xephi/authme/Utils.java +++ b/src/main/java/fr/xephi/authme/Utils.java @@ -25,157 +25,164 @@ public class Utils { public AuthMe plugin; public Utils(AuthMe plugin) { - this.plugin = plugin; + this.plugin = plugin; } public void setGroup(Player player, groupType group) { - setGroup(player.getName(), group); - } - - public void setGroup(String player, groupType group) { - if(!Settings.isPermissionCheckEnabled) - return; - if(plugin.permission == null) - return; - try { - World world = null; - currentGroup = plugin.permission.getPrimaryGroup(world, player); - } catch (UnsupportedOperationException e) { - ConsoleLogger.showError("Your permission system (" + plugin.permission.getName() + ") do not support Group system with that config... unhook!"); - plugin.permission = null; - return; - } - World world = null; - String name = player; - switch(group) { - case UNREGISTERED: { - plugin.permission.playerRemoveGroup(world, name, currentGroup); - plugin.permission.playerAddGroup(world, name, Settings.unRegisteredGroup); - break; - } - case REGISTERED: { - plugin.permission.playerRemoveGroup(world, name, currentGroup); - plugin.permission.playerAddGroup(world, name, Settings.getRegisteredGroup); - break; - } - case NOTLOGGEDIN: { - if(!useGroupSystem()) break; - plugin.permission.playerRemoveGroup(world, name, currentGroup); - plugin.permission.playerAddGroup(world, name, Settings.getUnloggedinGroup); - break; - } - case LOGGEDIN: { - if(!useGroupSystem()) break; - LimboPlayer limbo = LimboCache.getInstance().getLimboPlayer(name.toLowerCase()); - if (limbo == null) break; - String realGroup = limbo.getGroup(); - plugin.permission.playerRemoveGroup(world, name, currentGroup); - plugin.permission.playerAddGroup(world, name, realGroup); - break; - } - } - return; - } - - public boolean addNormal(Player player, String group) { - if(!useGroupSystem()){ - return false; - } - if(plugin.permission == null) return false; - World world = null; - try { - if(plugin.permission.playerRemoveGroup(world,player.getName().toString(),Settings.getUnloggedinGroup) && plugin.permission.playerAddGroup(world,player.getName().toString(),group)) { - return true; - } - } catch (UnsupportedOperationException e) { - ConsoleLogger.showError("Your permission system (" + plugin.permission.getName() + ") do not support Group system with that config... unhook!"); - plugin.permission = null; - return false; - } - return false; - } - - public void hasPermOnJoin(Player player) { - if (plugin.permission == null) return; - Iterator iter = Settings.getJoinPermissions.iterator(); - while (iter.hasNext()) { - String permission = iter.next(); - if(plugin.permission.playerHas(player, permission)){ - plugin.permission.playerAddTransient(player, permission); - } - } - } - - public boolean isUnrestricted(Player player) { - if(!Settings.isAllowRestrictedIp) - return false; - if(Settings.getUnrestrictedName.isEmpty() || Settings.getUnrestrictedName == null) - return false; - if(Settings.getUnrestrictedName.contains(player.getName())) - return true; - return false; + setGroup(player.getName(), group); } - public static Utils getInstance() { - singleton = new Utils(AuthMe.getInstance()); - return singleton; + public void setGroup(String player, groupType group) { + if (!Settings.isPermissionCheckEnabled) return; + if (plugin.permission == null) return; + try { + World world = null; + currentGroup = plugin.permission.getPrimaryGroup(world, player); + } catch (UnsupportedOperationException e) { + ConsoleLogger + .showError("Your permission system (" + + plugin.permission.getName() + + ") do not support Group system with that config... unhook!"); + plugin.permission = null; + return; + } + World world = null; + String name = player; + switch (group) { + case UNREGISTERED: { + plugin.permission.playerRemoveGroup(world, name, currentGroup); + plugin.permission.playerAddGroup(world, name, + Settings.unRegisteredGroup); + break; + } + case REGISTERED: { + plugin.permission.playerRemoveGroup(world, name, currentGroup); + plugin.permission.playerAddGroup(world, name, + Settings.getRegisteredGroup); + break; + } + case NOTLOGGEDIN: { + if (!useGroupSystem()) break; + plugin.permission.playerRemoveGroup(world, name, currentGroup); + plugin.permission.playerAddGroup(world, name, + Settings.getUnloggedinGroup); + break; + } + case LOGGEDIN: { + if (!useGroupSystem()) break; + LimboPlayer limbo = LimboCache.getInstance().getLimboPlayer( + name.toLowerCase()); + if (limbo == null) break; + String realGroup = limbo.getGroup(); + plugin.permission.playerRemoveGroup(world, name, currentGroup); + plugin.permission.playerAddGroup(world, name, realGroup); + break; + } + } + return; } - private boolean useGroupSystem() { - if(Settings.isPermissionCheckEnabled && !Settings.getUnloggedinGroup.isEmpty()) - return true; + public boolean addNormal(Player player, String group) { + if (!useGroupSystem()) { + return false; + } + if (plugin.permission == null) return false; + World world = null; + try { + if (plugin.permission.playerRemoveGroup(world, player.getName() + .toString(), Settings.getUnloggedinGroup) + && plugin.permission.playerAddGroup(world, player.getName() + .toString(), group)) { + return true; + } + } catch (UnsupportedOperationException e) { + ConsoleLogger + .showError("Your permission system (" + + plugin.permission.getName() + + ") do not support Group system with that config... unhook!"); + plugin.permission = null; + return false; + } return false; } - public void packCoords(double x, double y, double z, String w, final Player pl) - { - World theWorld; - if (w.equals("unavailableworld")) { - theWorld = pl.getWorld(); - } else { - theWorld = Bukkit.getWorld(w); - } - if (theWorld == null) - theWorld = pl.getWorld(); - final World world = theWorld; - final Location locat = new Location(world, x, y, z); + public void hasPermOnJoin(Player player) { + if (plugin.permission == null) return; + Iterator iter = Settings.getJoinPermissions.iterator(); + while (iter.hasNext()) { + String permission = iter.next(); + if (plugin.permission.playerHas(player, permission)) { + plugin.permission.playerAddTransient(player, permission); + } + } + } - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(pl, locat); - plugin.getServer().getPluginManager().callEvent(tpEvent); - if(!tpEvent.isCancelled()) { - if (!tpEvent.getTo().getChunk().isLoaded()) - tpEvent.getTo().getChunk().load(); - pl.teleport(tpEvent.getTo()); - } - } - }); - } + public boolean isUnrestricted(Player player) { + if (!Settings.isAllowRestrictedIp) return false; + if (Settings.getUnrestrictedName.isEmpty() + || Settings.getUnrestrictedName == null) return false; + if (Settings.getUnrestrictedName.contains(player.getName())) return true; + return false; + } - /* + public static Utils getInstance() { + singleton = new Utils(AuthMe.getInstance()); + return singleton; + } + + private boolean useGroupSystem() { + if (Settings.isPermissionCheckEnabled + && !Settings.getUnloggedinGroup.isEmpty()) return true; + return false; + } + + public void packCoords(double x, double y, double z, String w, + final Player pl) { + World theWorld; + if (w.equals("unavailableworld")) { + theWorld = pl.getWorld(); + } else { + theWorld = Bukkit.getWorld(w); + } + if (theWorld == null) theWorld = pl.getWorld(); + final World world = theWorld; + final Location locat = new Location(world, x, y, z); + + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(pl, locat); + plugin.getServer().getPluginManager().callEvent(tpEvent); + if (!tpEvent.isCancelled()) { + if (!tpEvent.getTo().getChunk().isLoaded()) tpEvent.getTo() + .getChunk().load(); + pl.teleport(tpEvent.getTo()); + } + } + }); + } + + /* * Random Token for passpartu - * */ public boolean obtainToken() { - File file = new File("plugins/AuthMe/passpartu.token"); - if (file.exists()) - file.delete(); + File file = new File("plugins/AuthMe/passpartu.token"); + if (file.exists()) file.delete(); - FileWriter writer = null; - try { - file.createNewFile(); - writer = new FileWriter(file); - String token = generateToken(); - writer.write(token + ":" + System.currentTimeMillis() / 1000 + API.newline); - writer.flush(); - ConsoleLogger.info("[AuthMe] Security passpartu token: "+ token); - writer.close(); - return true; - } catch(Exception e) { - e.printStackTrace(); - } + FileWriter writer = null; + try { + file.createNewFile(); + writer = new FileWriter(file); + String token = generateToken(); + writer.write(token + ":" + System.currentTimeMillis() / 1000 + + API.newline); + writer.flush(); + ConsoleLogger.info("[AuthMe] Security passpartu token: " + token); + writer.close(); + return true; + } catch (Exception e) { + e.printStackTrace(); + } return false; } @@ -185,52 +192,53 @@ public class Utils { public boolean readToken(String inputToken) { File file = new File("plugins/AuthMe/passpartu.token"); - if (!file.exists()) - return false; + 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(":"); - if(tokenInfo[0].equals(inputToken) && System.currentTimeMillis()/1000-30 <= Integer.parseInt(tokenInfo[1]) ) { - file.delete(); - reader.close(); - return true; - } - } - } - } catch(Exception e) { - e.printStackTrace(); - } - reader.close(); - 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(":"); + if (tokenInfo[0].equals(inputToken) + && System.currentTimeMillis() / 1000 - 30 <= Integer + .parseInt(tokenInfo[1])) { + file.delete(); + reader.close(); + return true; + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + reader.close(); + return false; } /* * Generate Random Token */ private String generateToken() { - // 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); - } + // 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); + } /* * Used for force player GameMode */ public static void forceGM(Player player) { - if (!AuthMe.getInstance().authmePermissible(player, "authme.bypassforcesurvival")) - player.setGameMode(GameMode.SURVIVAL); + if (!AuthMe.getInstance().authmePermissible(player, + "authme.bypassforcesurvival")) player + .setGameMode(GameMode.SURVIVAL); } public enum groupType { diff --git a/src/main/java/fr/xephi/authme/api/API.java b/src/main/java/fr/xephi/authme/api/API.java index 050b34f0..9917e0da 100644 --- a/src/main/java/fr/xephi/authme/api/API.java +++ b/src/main/java/fr/xephi/authme/api/API.java @@ -15,31 +15,33 @@ import fr.xephi.authme.plugin.manager.CombatTagComunicator; import fr.xephi.authme.security.PasswordSecurity; import fr.xephi.authme.settings.Settings; - public class API { - public static final String newline = System.getProperty("line.separator"); - public static AuthMe instance; - public static DataSource database; + public static final String newline = System.getProperty("line.separator"); + public static AuthMe instance; + public static DataSource database; - public API(AuthMe instance, DataSource database) { - API.instance = instance; - API.database = database; - } - /** - * Hook into AuthMe - * @return AuthMe instance - */ + public API(AuthMe instance, DataSource database) { + API.instance = instance; + API.database = database; + } + + /** + * Hook into AuthMe + * + * @return AuthMe instance + */ public static AuthMe hookAuthMe() { - Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin("AuthMe"); + Plugin plugin = Bukkit.getServer().getPluginManager() + .getPlugin("AuthMe"); if (plugin == null || !(plugin instanceof AuthMe)) { - return null; - } - return (AuthMe) plugin; + return null; + } + return (AuthMe) plugin; } public AuthMe getPlugin() { - return instance; + return instance; } /** @@ -48,7 +50,8 @@ public class API { * @return true if player is authenticate */ public static boolean isAuthenticated(Player player) { - return PlayerCache.getInstance().isAuthenticated(player.getName().toLowerCase()); + return PlayerCache.getInstance().isAuthenticated( + player.getName().toLowerCase()); } /** @@ -58,9 +61,8 @@ public class API { */ @Deprecated public boolean isaNPC(Player player) { - if (instance.getCitizensCommunicator().isNPC(player, instance)) - return true; - return CombatTagComunicator.isNPC(player); + if (instance.getCitizensCommunicator().isNPC(player, instance)) return true; + return CombatTagComunicator.isNPC(player); } /** @@ -69,9 +71,8 @@ public class API { * @return true if player is a npc */ public boolean isNPC(Player player) { - if (instance.getCitizensCommunicator().isNPC(player, instance)) - return true; - return CombatTagComunicator.isNPC(player); + if (instance.getCitizensCommunicator().isNPC(player, instance)) return true; + return CombatTagComunicator.isNPC(player); } /** @@ -80,31 +81,35 @@ public class API { * @return true if the player is unrestricted */ public static boolean isUnrestricted(Player player) { - return Utils.getInstance().isUnrestricted(player); + return Utils.getInstance().isUnrestricted(player); } public static Location getLastLocation(Player player) { - try { - PlayerAuth auth = PlayerCache.getInstance().getAuth(player.getName().toLowerCase()); - - if (auth != null) { - Location loc = new Location(Bukkit.getWorld(auth.getWorld()), auth.getQuitLocX(), auth.getQuitLocY() , auth.getQuitLocZ()); - return loc; - } else { - return null; - } - - } catch (NullPointerException ex) { - return null; - } + try { + PlayerAuth auth = PlayerCache.getInstance().getAuth( + player.getName().toLowerCase()); + + if (auth != null) { + Location loc = new Location(Bukkit.getWorld(auth.getWorld()), + auth.getQuitLocX(), auth.getQuitLocY(), + auth.getQuitLocZ()); + return loc; + } else { + return null; + } + + } catch (NullPointerException ex) { + return null; + } } - public static void setPlayerInventory(Player player, ItemStack[] content, ItemStack[] armor) { - try { - player.getInventory().setContents(content); - player.getInventory().setArmorContents(armor); - } catch (NullPointerException npe) { - } + public static void setPlayerInventory(Player player, ItemStack[] content, + ItemStack[] armor) { + try { + player.getInventory().setContents(content); + player.getInventory().setArmorContents(armor); + } catch (NullPointerException npe) { + } } /** @@ -113,67 +118,78 @@ public class API { * @return true if player is registered */ public static boolean isRegistered(String playerName) { - String player = playerName.toLowerCase(); - return database.isAuthAvailable(player); + String player = playerName.toLowerCase(); + return database.isAuthAvailable(player); } /** - * @param String playerName, String passwordToCheck + * @param String + * playerName, String passwordToCheck * @return true if the password is correct , false else */ - public static boolean checkPassword(String playerName, String passwordToCheck) { - if (!isRegistered(playerName)) return false; - String player = playerName.toLowerCase(); - PlayerAuth auth = database.getAuth(player); - try { - return PasswordSecurity.comparePasswordWithHash(passwordToCheck, auth.getHash(), playerName); - } catch (NoSuchAlgorithmException e) { - return false; - } + public static boolean checkPassword(String playerName, + String passwordToCheck) { + if (!isRegistered(playerName)) return false; + String player = playerName.toLowerCase(); + PlayerAuth auth = database.getAuth(player); + try { + return PasswordSecurity.comparePasswordWithHash(passwordToCheck, + auth.getHash(), playerName); + } catch (NoSuchAlgorithmException e) { + return false; + } } /** * Register a player - * @param String playerName, String password + * + * @param String + * playerName, String password * @return true if the player is register correctly */ public static boolean registerPlayer(String playerName, String password) { try { String name = playerName.toLowerCase(); - String hash = PasswordSecurity.getHash(Settings.getPasswordHash, password, name); + String hash = PasswordSecurity.getHash(Settings.getPasswordHash, + password, name); if (isRegistered(name)) { return false; } - PlayerAuth auth = new PlayerAuth(name, hash, "198.18.0.1", 0, "your@email.com", getPlayerRealName(name)); + PlayerAuth auth = new PlayerAuth(name, hash, "198.18.0.1", 0, + "your@email.com", getPlayerRealName(name)); if (!database.saveAuth(auth)) { - return false; + return false; } return true; } catch (NoSuchAlgorithmException ex) { - return false; + return false; } } /** * Get Player realName from lowerCase nickname - * @param String playerName - * return String player real name + * + * @param String + * playerName return String player real name */ public static String getPlayerRealName(String nickname) { - try { - String realName = instance.dataManager.getOfflinePlayer(nickname).getName(); - if (realName != null && !realName.isEmpty()) - return realName; - } catch (NullPointerException npe) {} - return nickname; + try { + String realName = instance.dataManager.getOfflinePlayer(nickname) + .getName(); + if (realName != null && !realName.isEmpty()) return realName; + } catch (NullPointerException npe) { + } + return nickname; } /** * Force a player to login - * @param Player player + * + * @param Player + * player */ public static void forceLogin(Player player) { - instance.management.performLogin(player, "dontneed", true); + instance.management.performLogin(player, "dontneed", true); } } diff --git a/src/main/java/fr/xephi/authme/cache/auth/PlayerAuth.java b/src/main/java/fr/xephi/authme/cache/auth/PlayerAuth.java index e9292750..729cc2db 100644 --- a/src/main/java/fr/xephi/authme/cache/auth/PlayerAuth.java +++ b/src/main/java/fr/xephi/authme/cache/auth/PlayerAuth.java @@ -19,7 +19,8 @@ public class PlayerAuth { private String email = "your@email.com"; private String realName = ""; - public PlayerAuth(String nickname, String hash, String ip, long lastLogin, String email, String realName) { + public PlayerAuth(String nickname, String hash, String ip, long lastLogin, + String email, String realName) { this.nickname = nickname; this.hash = hash; this.ip = ip; @@ -29,7 +30,8 @@ public class PlayerAuth { } - public PlayerAuth(String nickname, double x, double y, double z, String world) { + public PlayerAuth(String nickname, double x, double y, double z, + String world) { this.nickname = nickname; this.x = x; this.y = y; @@ -39,7 +41,9 @@ public class PlayerAuth { } - public PlayerAuth(String nickname, String hash, String ip, long lastLogin, double x, double y, double z, String world, String email, String realName) { + public PlayerAuth(String nickname, String hash, String ip, long lastLogin, + double x, double y, double z, String world, String email, + String realName) { this.nickname = nickname; this.hash = hash; this.ip = ip; @@ -53,7 +57,9 @@ public class PlayerAuth { } - public PlayerAuth(String nickname, String hash, String salt, int groupId, String ip, long lastLogin, double x, double y, double z, String world, String email, String realName) { + public PlayerAuth(String nickname, String hash, String salt, int groupId, + String ip, long lastLogin, double x, double y, double z, + String world, String email, String realName) { this.nickname = nickname; this.hash = hash; this.ip = ip; @@ -69,28 +75,32 @@ public class PlayerAuth { } - public PlayerAuth(String nickname, String hash, String salt, int groupId , String ip, long lastLogin, String realName) { + public PlayerAuth(String nickname, String hash, String salt, int groupId, + String ip, long lastLogin, String realName) { this.nickname = nickname; this.hash = hash; this.ip = ip; - this.lastLogin = lastLogin; + this.lastLogin = lastLogin; this.salt = salt; this.groupId = groupId; this.realName = realName; } - public PlayerAuth(String nickname, String hash, String salt, String ip, long lastLogin, String realName) { + public PlayerAuth(String nickname, String hash, String salt, String ip, + long lastLogin, String realName) { this.nickname = nickname; this.hash = hash; this.ip = ip; - this.lastLogin = lastLogin; + this.lastLogin = lastLogin; this.salt = salt; this.realName = realName; } - public PlayerAuth(String nickname, String hash, String salt, String ip, long lastLogin, double x, double y, double z, String world, String email, String realName) { + public PlayerAuth(String nickname, String hash, String salt, String ip, + long lastLogin, double x, double y, double z, String world, + String email, String realName) { this.nickname = nickname; this.hash = hash; this.ip = ip; @@ -105,23 +115,22 @@ public class PlayerAuth { } public PlayerAuth(String nickname, String ip, long lastLogin) { - this.nickname = nickname; - this.ip = ip; - this.lastLogin = lastLogin; + this.nickname = nickname; + this.ip = ip; + this.lastLogin = lastLogin; } public PlayerAuth(String nickname, String hash, String ip, long lastLogin) { - this.nickname = nickname; - this.ip = ip; - this.lastLogin = lastLogin; - this.hash = hash; + this.nickname = nickname; + this.ip = ip; + this.lastLogin = lastLogin; + this.hash = hash; } - public String getIp() { - if (ip == null || ip.isEmpty()) - ip = "127.0.0.1"; - return ip; + public String getIp() { + if (ip == null || ip.isEmpty()) ip = "127.0.0.1"; + return ip; } public String getNickname() { @@ -129,17 +138,18 @@ public class PlayerAuth { } public String getHash() { - if (Settings.getPasswordHash == HashAlgorithm.MD5VB) { - if(salt != null && !salt.isEmpty() && Settings.getPasswordHash == HashAlgorithm.MD5VB) { - vBhash = "$MD5vb$"+salt+"$"+hash; + if (Settings.getPasswordHash == HashAlgorithm.MD5VB) { + if (salt != null && !salt.isEmpty() + && Settings.getPasswordHash == HashAlgorithm.MD5VB) { + vBhash = "$MD5vb$" + salt + "$" + hash; return vBhash; } - } + } return hash; } public String getSalt() { - return this.salt; + return this.salt; } public int getGroupId() { @@ -149,31 +159,37 @@ public class PlayerAuth { public double getQuitLocX() { return x; } + public double getQuitLocY() { return y; } + public double getQuitLocZ() { return z; } + public String getEmail() { - return email; + return email; } + public void setQuitLocX(double d) { this.x = d; } + public void setQuitLocY(double d) { this.y = d; } + public void setQuitLocZ(double d) { this.z = d; - } + } + public long getLastLogin() { - try { - if (Long.valueOf(lastLogin) == null) - lastLogin = 0L; - } catch (NullPointerException e) { - lastLogin = 0L; - } + try { + if (Long.valueOf(lastLogin) == null) lastLogin = 0L; + } catch (NullPointerException e) { + lastLogin = 0L; + } return lastLogin; } @@ -190,11 +206,11 @@ public class PlayerAuth { } public void setEmail(String email) { - this.email = email; + this.email = email; } public void setSalt(String salt) { - this.salt = salt; + this.salt = salt; } @Override @@ -203,34 +219,38 @@ public class PlayerAuth { return false; } PlayerAuth other = (PlayerAuth) obj; - return other.getIp().equals(this.ip) && other.getNickname().equals(this.nickname); + return other.getIp().equals(this.ip) + && other.getNickname().equals(this.nickname); } @Override public int hashCode() { int hashCode = 7; - hashCode = 71 * hashCode + (this.nickname != null ? this.nickname.hashCode() : 0); + hashCode = 71 * hashCode + + (this.nickname != null ? this.nickname.hashCode() : 0); hashCode = 71 * hashCode + (this.ip != null ? this.ip.hashCode() : 0); return hashCode; } - public void setWorld(String world) { - this.world = world; - } + public void setWorld(String world) { + this.world = world; + } - public String getWorld() { - return world; - } + public String getWorld() { + return world; + } - @Override - public String toString() { - String s = "Player : " + nickname + " ! IP : " + ip + " ! LastLogin : " + lastLogin + " ! LastPosition : " + x + "," + y + "," + z + "," + world - + " ! Email : " + email + " ! Hash : " + hash + " ! Salt : " + salt + " ! RealName : " + realName; - return s; - - } + @Override + public String toString() { + String s = "Player : " + nickname + " ! IP : " + ip + " ! LastLogin : " + + lastLogin + " ! LastPosition : " + x + "," + y + "," + z + + "," + world + " ! Email : " + email + " ! Hash : " + hash + + " ! Salt : " + salt + " ! RealName : " + realName; + return s; - public String getRealname() { - return realName; - } + } + + public String getRealname() { + return realName; + } } diff --git a/src/main/java/fr/xephi/authme/cache/auth/PlayerCache.java b/src/main/java/fr/xephi/authme/cache/auth/PlayerCache.java index 58129ed6..5908b5d9 100644 --- a/src/main/java/fr/xephi/authme/cache/auth/PlayerCache.java +++ b/src/main/java/fr/xephi/authme/cache/auth/PlayerCache.java @@ -40,7 +40,7 @@ public class PlayerCache { } public int getLogged() { - return cache.size(); + return cache.size(); } } diff --git a/src/main/java/fr/xephi/authme/cache/backup/DataFileCache.java b/src/main/java/fr/xephi/authme/cache/backup/DataFileCache.java index f2f20b6b..ef5ab501 100644 --- a/src/main/java/fr/xephi/authme/cache/backup/DataFileCache.java +++ b/src/main/java/fr/xephi/authme/cache/backup/DataFileCache.java @@ -4,42 +4,43 @@ import org.bukkit.inventory.ItemStack; public class DataFileCache { - private ItemStack[] inventory; - private ItemStack[] armor; - private String group; - private boolean operator; - private boolean flying; + private ItemStack[] inventory; + private ItemStack[] armor; + private String group; + private boolean operator; + private boolean flying; - public DataFileCache(ItemStack[] inventory, ItemStack[] armor){ - this.inventory = inventory; - this.armor = armor; - } + public DataFileCache(ItemStack[] inventory, ItemStack[] armor) { + this.inventory = inventory; + this.armor = armor; + } - public DataFileCache(ItemStack[] inventory, ItemStack[] armor, String group, boolean operator, boolean flying){ - this.inventory = inventory; - this.armor = armor; - this.group = group; - this.operator = operator; - this.flying = flying; - } + public DataFileCache(ItemStack[] inventory, ItemStack[] armor, + String group, boolean operator, boolean flying) { + this.inventory = inventory; + this.armor = armor; + this.group = group; + this.operator = operator; + this.flying = flying; + } - public ItemStack[] getInventory(){ - return inventory; - } + public ItemStack[] getInventory() { + return inventory; + } - public ItemStack[] getArmour(){ - return armor; - } + public ItemStack[] getArmour() { + return armor; + } - public String getGroup(){ - return group; - } + public String getGroup() { + return group; + } - public boolean getOperator(){ - return operator; - } + public boolean getOperator() { + return operator; + } - public boolean isFlying(){ - return flying; - } + public boolean isFlying() { + return flying; + } } diff --git a/src/main/java/fr/xephi/authme/cache/backup/FileCache.java b/src/main/java/fr/xephi/authme/cache/backup/FileCache.java index 75b77805..72e225af 100644 --- a/src/main/java/fr/xephi/authme/cache/backup/FileCache.java +++ b/src/main/java/fr/xephi/authme/cache/backup/FileCache.java @@ -18,117 +18,122 @@ import fr.xephi.authme.api.API; public class FileCache { private AuthMe plugin = AuthMe.getInstance(); - public FileCache() { - final File folder = new File("cache"); - if (!folder.exists()) { - folder.mkdirs(); - } - } - public void createCache(String playername, DataFileCache playerData, String group, boolean operator, boolean flying) { - final File file = new File("cache/" + playername - + ".cache"); + public FileCache() { + final File folder = new File("cache"); + if (!folder.exists()) { + folder.mkdirs(); + } + } - if (file.exists()) { - return; - } + public void createCache(String playername, DataFileCache playerData, + String group, boolean operator, boolean flying) { + final File file = new File("cache/" + playername + ".cache"); - FileWriter writer = null; - try { - file.createNewFile(); + if (file.exists()) { + return; + } - writer = new FileWriter(file); + FileWriter writer = null; + try { + file.createNewFile(); - String s = group+";"; - if (operator) - s = s + "1"; - else s = s + "0"; + writer = new FileWriter(file); - // line format Group|OperatorStatus|isFlying - if(flying) - writer.write(s+";1" + API.newline); - else writer.write(s+";0" + API.newline); - writer.flush(); + String s = group + ";"; + if (operator) s = s + "1"; + else s = s + "0"; - ItemStack[] invstack = playerData.getInventory(); + // line format Group|OperatorStatus|isFlying + if (flying) writer.write(s + ";1" + API.newline); + else writer.write(s + ";0" + API.newline); + writer.flush(); - for (int i = 0; i < invstack.length; i++) { + ItemStack[] invstack = playerData.getInventory(); - String itemid = "AIR"; - int amount = 0; - int durability = 0; - String enchList = ""; - String name = ""; - String lores = ""; - if (invstack[i] != null) { - itemid = invstack[i].getType().name(); - amount = invstack[i].getAmount(); - durability = invstack[i].getDurability(); - for(Enchantment e : invstack[i].getEnchantments().keySet()) { - enchList = enchList.concat(e.getName()+":"+invstack[i].getEnchantmentLevel(e)+":"); - } - if (enchList.length() > 1) - enchList = enchList.substring(0, enchList.length() - 1); - if (invstack[i].hasItemMeta()) { - if (invstack[i].getItemMeta().hasDisplayName()) { - name = invstack[i].getItemMeta().getDisplayName(); - } - if (invstack[i].getItemMeta().hasLore()) { - for (String lore : invstack[i].getItemMeta().getLore()) { - lores = lore + "%newline%"; - } - } - } - } - String writeItem = "i" + ":" + itemid + ":" + amount + ":" - + durability + ":"+ enchList + ";" + name + "\\*" + lores + "\r\n"; - writer.write(writeItem); - writer.flush(); - } + for (int i = 0; i < invstack.length; i++) { - ItemStack[] armorstack = playerData.getArmour(); + String itemid = "AIR"; + int amount = 0; + int durability = 0; + String enchList = ""; + String name = ""; + String lores = ""; + if (invstack[i] != null) { + itemid = invstack[i].getType().name(); + amount = invstack[i].getAmount(); + durability = invstack[i].getDurability(); + for (Enchantment e : invstack[i].getEnchantments().keySet()) { + enchList = enchList.concat(e.getName() + ":" + + invstack[i].getEnchantmentLevel(e) + ":"); + } + if (enchList.length() > 1) enchList = enchList.substring(0, + enchList.length() - 1); + if (invstack[i].hasItemMeta()) { + if (invstack[i].getItemMeta().hasDisplayName()) { + name = invstack[i].getItemMeta().getDisplayName(); + } + if (invstack[i].getItemMeta().hasLore()) { + for (String lore : invstack[i].getItemMeta() + .getLore()) { + lores = lore + "%newline%"; + } + } + } + } + String writeItem = "i" + ":" + itemid + ":" + amount + ":" + + durability + ":" + enchList + ";" + name + "\\*" + + lores + "\r\n"; + writer.write(writeItem); + writer.flush(); + } - for (int i = 0; i < armorstack.length; i++) { - String itemid = "AIR"; - int amount = 0; - int durability = 0; - String enchList = ""; - String name = ""; - String lores = ""; - if (armorstack[i] != null) { - itemid = armorstack[i].getType().name(); - amount = armorstack[i].getAmount(); - durability = armorstack[i].getDurability(); - for(Enchantment e : armorstack[i].getEnchantments().keySet()) { - enchList = enchList.concat(e.getName()+":"+armorstack[i].getEnchantmentLevel(e)+":"); - } - if (enchList.length() > 1) - enchList = enchList.substring(0, enchList.length() - 1); - if (armorstack[i].hasItemMeta()) { - if (armorstack[i].getItemMeta().hasDisplayName()) { - name = armorstack[i].getItemMeta().getDisplayName(); - } - if (armorstack[i].getItemMeta().hasLore()) { - for (String lore : armorstack[i].getItemMeta().getLore()) { - lores = lore + "%newline%"; - } - } - } - } - String writeItem = "w" + ":" + itemid + ":" + amount + ":" - + durability + ":"+ enchList + ";" + name + "\\*" + lores + "\r\n"; - writer.write(writeItem); - writer.flush(); - } - writer.close(); - } catch (final Exception e) { - e.printStackTrace(); - } - } + ItemStack[] armorstack = playerData.getArmour(); - public DataFileCache readCache(String playername) { - final File file = new File("cache/" + playername - + ".cache"); + for (int i = 0; i < armorstack.length; i++) { + String itemid = "AIR"; + int amount = 0; + int durability = 0; + String enchList = ""; + String name = ""; + String lores = ""; + if (armorstack[i] != null) { + itemid = armorstack[i].getType().name(); + amount = armorstack[i].getAmount(); + durability = armorstack[i].getDurability(); + for (Enchantment e : armorstack[i].getEnchantments() + .keySet()) { + enchList = enchList.concat(e.getName() + ":" + + armorstack[i].getEnchantmentLevel(e) + ":"); + } + if (enchList.length() > 1) enchList = enchList.substring(0, + enchList.length() - 1); + if (armorstack[i].hasItemMeta()) { + if (armorstack[i].getItemMeta().hasDisplayName()) { + name = armorstack[i].getItemMeta().getDisplayName(); + } + if (armorstack[i].getItemMeta().hasLore()) { + for (String lore : armorstack[i].getItemMeta() + .getLore()) { + lores = lore + "%newline%"; + } + } + } + } + String writeItem = "w" + ":" + itemid + ":" + amount + ":" + + durability + ":" + enchList + ";" + name + "\\*" + + lores + "\r\n"; + writer.write(writeItem); + writer.flush(); + } + writer.close(); + } catch (final Exception e) { + e.printStackTrace(); + } + } + + public DataFileCache readCache(String playername) { + final File file = new File("cache/" + playername + ".cache"); ItemStack[] stacki = new ItemStack[36]; ItemStack[] stacka = new ItemStack[4]; @@ -149,20 +154,20 @@ public class FileCache { String line = reader.nextLine(); if (!line.contains(":")) { - // the fist line represent the player group, operator status and flying status - final String[] playerInfo = line.split(";"); - group = playerInfo[0]; + // the fist line represent the player group, operator status + // and flying status + final String[] playerInfo = line.split(";"); + group = playerInfo[0]; - if (Integer.parseInt(playerInfo[1]) == 1) { - op = true; - } else op = false; - if (playerInfo.length > 2) { - if (Integer.parseInt(playerInfo[2]) == 1) - flying = true; - else flying = false; - } + if (Integer.parseInt(playerInfo[1]) == 1) { + op = true; + } else op = false; + if (playerInfo.length > 2) { + if (Integer.parseInt(playerInfo[2]) == 1) flying = true; + else flying = false; + } - continue; + continue; } if (!line.startsWith("i") && !line.startsWith("w")) { @@ -179,18 +184,22 @@ public class FileCache { line = line.split(";")[0]; } final String[] in = line.split(":"); - // can enchant item? size ofstring in file - 4 all / 2 = number of enchant + // can enchant item? size ofstring in file - 4 all / 2 = number + // of enchant if (in[0].equals("i")) { stacki[i] = new ItemStack(Material.getMaterial(in[1]), - Integer.parseInt(in[2]), Short.parseShort((in[3]))); - if(in.length > 4 && !in[4].isEmpty()) { - for(int k=4;k 4 && !in[4].isEmpty()) { + for (int k = 4; k < in.length - 1; k++) { + stacki[i].addUnsafeEnchantment( + Enchantment.getByName(in[k]), + Integer.parseInt(in[k + 1])); k++; } } try { - ItemMeta meta = plugin.getServer().getItemFactory().getItemMeta(stacki[i].getType()); + ItemMeta meta = plugin.getServer().getItemFactory() + .getItemMeta(stacki[i].getType()); if (!name.isEmpty()) { meta.setDisplayName(name); } @@ -201,23 +210,25 @@ public class FileCache { } meta.setLore(loreList); } - if (meta != null) - stacki[i].setItemMeta(meta); - } catch (Exception e) {} + if (meta != null) stacki[i].setItemMeta(meta); + } catch (Exception e) { + } i++; } else { stacka[a] = new ItemStack(Material.getMaterial(in[1]), Integer.parseInt(in[2]), Short.parseShort((in[3]))); - if(in.length > 4 && !in[4].isEmpty()) { - for(int k=4;k 4 && !in[4].isEmpty()) { + for (int k = 4; k < in.length - 1; k++) { + stacka[a].addUnsafeEnchantment( + Enchantment.getByName(in[k]), + Integer.parseInt(in[k + 1])); k++; } } try { - ItemMeta meta = plugin.getServer().getItemFactory().getItemMeta(stacka[a].getType()); - if (!name.isEmpty()) - meta.setDisplayName(name); + ItemMeta meta = plugin.getServer().getItemFactory() + .getItemMeta(stacka[a].getType()); + if (!name.isEmpty()) meta.setDisplayName(name); if (!lores.isEmpty()) { List loreList = new ArrayList(); for (String s : lores.split("%newline%")) { @@ -225,9 +236,9 @@ public class FileCache { } meta.setLore(loreList); } - if (meta != null) - stacki[i].setItemMeta(meta); - } catch (Exception e) {} + if (meta != null) stacki[i].setItemMeta(meta); + } catch (Exception e) { + } a++; } } @@ -239,25 +250,23 @@ public class FileCache { } } return new DataFileCache(stacki, stacka, group, op, flying); - } + } - public void removeCache(String playername) { - final File file = new File("cache/" + playername - + ".cache"); + public void removeCache(String playername) { + final File file = new File("cache/" + playername + ".cache"); - if (file.exists()) { - file.delete(); - } - } + if (file.exists()) { + file.delete(); + } + } - public boolean doesCacheExist(String playername) { - final File file = new File("cache/" + playername - + ".cache"); + public boolean doesCacheExist(String playername) { + final File file = new File("cache/" + playername + ".cache"); - if (file.exists()) { - return true; - } - return false; - } + if (file.exists()) { + return true; + } + return false; + } } diff --git a/src/main/java/fr/xephi/authme/cache/limbo/LimboCache.java b/src/main/java/fr/xephi/authme/cache/limbo/LimboCache.java index 87f4aa6b..e099c31a 100644 --- a/src/main/java/fr/xephi/authme/cache/limbo/LimboCache.java +++ b/src/main/java/fr/xephi/authme/cache/limbo/LimboCache.java @@ -15,7 +15,6 @@ import fr.xephi.authme.events.ResetInventoryEvent; import fr.xephi.authme.events.StoreInventoryEvent; import fr.xephi.authme.settings.Settings; - public class LimboCache { private static LimboCache singleton = null; @@ -24,7 +23,7 @@ public class LimboCache { public AuthMe plugin; private LimboCache(AuthMe plugin) { - this.plugin = plugin; + this.plugin = plugin; this.cache = new HashMap(); } @@ -39,63 +38,70 @@ public class LimboCache { boolean flying; if (playerData.doesCacheExist(name)) { - StoreInventoryEvent event = new StoreInventoryEvent(player, playerData); - Bukkit.getServer().getPluginManager().callEvent(event); - if (!event.isCancelled() && event.getInventory() != null && event.getArmor() != null) { - inv = event.getInventory(); - arm = event.getArmor(); - } else { - inv = null; - arm = null; - } - playerGroup = playerData.readCache(name).getGroup(); - operator = playerData.readCache(name).getOperator(); - flying = playerData.readCache(name).isFlying(); + StoreInventoryEvent event = new StoreInventoryEvent(player, + playerData); + Bukkit.getServer().getPluginManager().callEvent(event); + if (!event.isCancelled() && event.getInventory() != null + && event.getArmor() != null) { + inv = event.getInventory(); + arm = event.getArmor(); + } else { + inv = null; + arm = null; + } + playerGroup = playerData.readCache(name).getGroup(); + operator = playerData.readCache(name).getOperator(); + flying = playerData.readCache(name).isFlying(); } else { - StoreInventoryEvent event = new StoreInventoryEvent(player); - Bukkit.getServer().getPluginManager().callEvent(event); - if (!event.isCancelled() && event.getInventory() != null && event.getArmor() != null) { - inv = event.getInventory(); - arm = event.getArmor(); - } else { - inv = null; - arm = null; - } - if(player.isOp()) - operator = true; + StoreInventoryEvent event = new StoreInventoryEvent(player); + Bukkit.getServer().getPluginManager().callEvent(event); + if (!event.isCancelled() && event.getInventory() != null + && event.getArmor() != null) { + inv = event.getInventory(); + arm = event.getArmor(); + } else { + inv = null; + arm = null; + } + if (player.isOp()) operator = true; else operator = false; - if(player.isFlying()) - flying = true; + if (player.isFlying()) flying = true; else flying = false; if (plugin.permission != null) { - try { - playerGroup = plugin.permission.getPrimaryGroup(player); - } catch (UnsupportedOperationException e) { - ConsoleLogger.showError("Your permission system (" + plugin.permission.getName() + ") do not support Group system with that config... unhook!"); - plugin.permission = null; - } + try { + playerGroup = plugin.permission.getPrimaryGroup(player); + } catch (UnsupportedOperationException e) { + ConsoleLogger + .showError("Your permission system (" + + plugin.permission.getName() + + ") do not support Group system with that config... unhook!"); + plugin.permission = null; + } } } - if(Settings.isForceSurvivalModeEnabled) { - if(Settings.isResetInventoryIfCreative && player.getGameMode() == GameMode.CREATIVE ) { - ResetInventoryEvent event = new ResetInventoryEvent(player); - Bukkit.getServer().getPluginManager().callEvent(event); - if (!event.isCancelled()) { - player.getInventory().clear(); - player.sendMessage("Your inventory has been cleaned!"); - } + if (Settings.isForceSurvivalModeEnabled) { + if (Settings.isResetInventoryIfCreative + && player.getGameMode() == GameMode.CREATIVE) { + ResetInventoryEvent event = new ResetInventoryEvent(player); + Bukkit.getServer().getPluginManager().callEvent(event); + if (!event.isCancelled()) { + player.getInventory().clear(); + player.sendMessage("Your inventory has been cleaned!"); + } } gameMode = GameMode.SURVIVAL; } - if(player.isDead()) { - loc = plugin.getSpawnLocation(player); + if (player.isDead()) { + loc = plugin.getSpawnLocation(player); } - cache.put(player.getName().toLowerCase(), new LimboPlayer(name, loc, inv, arm, gameMode, operator, playerGroup, flying)); + cache.put(player.getName().toLowerCase(), new LimboPlayer(name, loc, + inv, arm, gameMode, operator, playerGroup, flying)); } public void addLimboPlayer(Player player, String group) { - cache.put(player.getName().toLowerCase(), new LimboPlayer(player.getName().toLowerCase(), group)); + cache.put(player.getName().toLowerCase(), new LimboPlayer(player + .getName().toLowerCase(), group)); } public void deleteLimboPlayer(String name) { @@ -117,11 +123,11 @@ public class LimboCache { return singleton; } - public void updateLimboPlayer(Player player) { - if (this.hasLimboPlayer(player.getName().toLowerCase())) { - this.deleteLimboPlayer(player.getName().toLowerCase()); - } - this.addLimboPlayer(player); - } + public void updateLimboPlayer(Player player) { + if (this.hasLimboPlayer(player.getName().toLowerCase())) { + this.deleteLimboPlayer(player.getName().toLowerCase()); + } + this.addLimboPlayer(player); + } } diff --git a/src/main/java/fr/xephi/authme/cache/limbo/LimboPlayer.java b/src/main/java/fr/xephi/authme/cache/limbo/LimboPlayer.java index 4910533a..46344878 100644 --- a/src/main/java/fr/xephi/authme/cache/limbo/LimboPlayer.java +++ b/src/main/java/fr/xephi/authme/cache/limbo/LimboPlayer.java @@ -17,7 +17,9 @@ public class LimboPlayer { private String group = ""; private boolean flying = false; - public LimboPlayer(String name, Location loc, ItemStack[] inventory, ItemStack[] armour, GameMode gameMode, boolean operator, String group, boolean flying) { + public LimboPlayer(String name, Location loc, ItemStack[] inventory, + ItemStack[] armour, GameMode gameMode, boolean operator, + String group, boolean flying) { this.name = name; this.loc = loc; this.inventory = inventory; @@ -28,7 +30,8 @@ public class LimboPlayer { this.flying = flying; } - public LimboPlayer(String name, Location loc, GameMode gameMode, boolean operator, String group, boolean flying) { + public LimboPlayer(String name, Location loc, GameMode gameMode, + boolean operator, String group, boolean flying) { this.name = name; this.loc = loc; this.gameMode = gameMode; @@ -59,11 +62,11 @@ public class LimboPlayer { } public void setArmour(ItemStack[] armour) { - this.armour = armour; + this.armour = armour; } public void setInventory(ItemStack[] inventory) { - this.inventory = inventory; + this.inventory = inventory; } public GameMode getGameMode() { @@ -78,24 +81,24 @@ public class LimboPlayer { return group; } - public void setTimeoutTaskId(int i) { - this.timeoutTaskId = i; - } + public void setTimeoutTaskId(int i) { + this.timeoutTaskId = i; + } - public int getTimeoutTaskId() { - return timeoutTaskId; - } + public int getTimeoutTaskId() { + return timeoutTaskId; + } - public void setMessageTaskId(int messageTaskId) { - this.messageTaskId = messageTaskId; - } + public void setMessageTaskId(int messageTaskId) { + this.messageTaskId = messageTaskId; + } - public int getMessageTaskId() { - return messageTaskId; - } + public int getMessageTaskId() { + return messageTaskId; + } - public boolean isFlying() { - return flying; - } + public boolean isFlying() { + return flying; + } } diff --git a/src/main/java/fr/xephi/authme/commands/AdminCommand.java b/src/main/java/fr/xephi/authme/commands/AdminCommand.java index 781739bf..eef5c9f6 100644 --- a/src/main/java/fr/xephi/authme/commands/AdminCommand.java +++ b/src/main/java/fr/xephi/authme/commands/AdminCommand.java @@ -43,10 +43,9 @@ import fr.xephi.authme.settings.SpoutCfg; import fr.xephi.authme.task.MessageTask; import fr.xephi.authme.task.TimeoutTask; - public class AdminCommand implements CommandExecutor { - public AuthMe plugin; + public AuthMe plugin; private Messages m = Messages.getInstance(); private SpoutCfg s = SpoutCfg.getInstance(); public DataSource database; @@ -57,7 +56,8 @@ public class AdminCommand implements CommandExecutor { } @Override - public boolean onCommand(CommandSender sender, Command cmnd, String label, String[] args) { + public boolean onCommand(CommandSender sender, Command cmnd, String label, + String[] args) { if (args.length == 0) { sender.sendMessage("Usage: /authme reload - Reload the config"); sender.sendMessage("/authme register - Register a player"); @@ -75,27 +75,33 @@ public class AdminCommand implements CommandExecutor { sender.sendMessage("/authme switchantibot on/off - Enable/Disable antibot method"); return true; } - - if (!plugin.authmePermissible(sender, "authme.admin." + args[0].toLowerCase())) { - m._(sender, "no_perm"); - 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]"); + if (!plugin.authmePermissible(sender, + "authme.admin." + args[0].toLowerCase())) { + m._(sender, "no_perm"); + 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 { - System.out.println("[AuthMe] Security error on passpartu token, redo it. "); + System.out + .println("[AuthMe] Security error on passpartu token, redo it. "); } return true; - } + } if (args[0].equalsIgnoreCase("version")) { - sender.sendMessage("AuthMe Version: "+AuthMe.getInstance().getDescription().getVersion()); + sender.sendMessage("AuthMe Version: " + + AuthMe.getInstance().getDescription().getVersion()); return true; } @@ -109,15 +115,16 @@ public class AdminCommand implements CommandExecutor { calendar.add(Calendar.DATE, -(Integer.parseInt(args[1]))); long until = calendar.getTimeInMillis(); List purged = database.autoPurgeDatabase(until); - sender.sendMessage("Deleted " + purged.size() + " user accounts"); - if (Settings.purgeEssentialsFile && plugin.ess != null) - plugin.dataManager.purgeEssentials(purged); - if (Settings.purgePlayerDat) - plugin.dataManager.purgeDat(purged); - if (Settings.purgeLimitedCreative) - plugin.dataManager.purgeLimitedCreative(purged); - if (Settings.purgeAntiXray) - plugin.dataManager.purgeAntiXray(purged); + sender.sendMessage("Deleted " + purged.size() + + " user accounts"); + if (Settings.purgeEssentialsFile && plugin.ess != null) plugin.dataManager + .purgeEssentials(purged); + if (Settings.purgePlayerDat) plugin.dataManager + .purgeDat(purged); + if (Settings.purgeLimitedCreative) plugin.dataManager + .purgeLimitedCreative(purged); + if (Settings.purgeAntiXray) plugin.dataManager + .purgeAntiXray(purged); return true; } catch (NumberFormatException e) { sender.sendMessage("Usage: /authme purge "); @@ -125,148 +132,176 @@ public class AdminCommand implements CommandExecutor { } } else if (args[0].equalsIgnoreCase("reload")) { database.reload(); - File newConfigFile = new File("plugins/AuthMe","config.yml"); + File newConfigFile = new File("plugins/AuthMe", "config.yml"); if (!newConfigFile.exists()) { - InputStream fis = getClass().getResourceAsStream("/config.yml"); - FileOutputStream fos = null; - try { - fos = new FileOutputStream(newConfigFile); - byte[] buf = new byte[1024]; - int i = 0; - - while ((i = fis.read(buf)) != -1) { - fos.write(buf, 0, i); - } - } catch (Exception e) { - Logger.getLogger(JavaPlugin.class.getName()).log(Level.SEVERE, "Failed to load config from JAR"); - } finally { - try { - if (fis != null) { - fis.close(); - } - if (fos != null) { - fos.close(); - } - } catch (Exception e) { - } - } + InputStream fis = getClass().getResourceAsStream("/config.yml"); + FileOutputStream fos = null; + try { + fos = new FileOutputStream(newConfigFile); + byte[] buf = new byte[1024]; + int i = 0; + + while ((i = fis.read(buf)) != -1) { + fos.write(buf, 0, i); + } + } catch (Exception e) { + Logger.getLogger(JavaPlugin.class.getName()).log( + Level.SEVERE, "Failed to load config from JAR"); + } finally { + try { + if (fis != null) { + fis.close(); + } + if (fos != null) { + fos.close(); + } + } catch (Exception e) { + } + } } - YamlConfiguration newConfig = YamlConfiguration.loadConfiguration(newConfigFile); + YamlConfiguration newConfig = YamlConfiguration + .loadConfiguration(newConfigFile); Settings.reloadConfigOptions(newConfig); m.reLoad(); s.reLoad(); m._(sender, "reload"); } else if (args[0].equalsIgnoreCase("lastlogin")) { - if (args.length != 2) { - sender.sendMessage("Usage: /authme lastlogin "); - return true; - } - try { - if (database.getAuth(args[1].toLowerCase()) != null) { + if (args.length != 2) { + sender.sendMessage("Usage: /authme lastlogin "); + return true; + } + try { + if (database.getAuth(args[1].toLowerCase()) != null) { PlayerAuth player = database.getAuth(args[1].toLowerCase()); long lastLogin = player.getLastLogin(); Date d = new Date(lastLogin); final long diff = System.currentTimeMillis() - lastLogin; - final String msg = (int)(diff / 86400000) + " days " + (int)(diff / 3600000 % 24) + " hours " + (int)(diff / 60000 % 60) + " mins " + (int)(diff / 1000 % 60) + " secs."; + final String msg = (int) (diff / 86400000) + " days " + + (int) (diff / 3600000 % 24) + " hours " + + (int) (diff / 60000 % 60) + " mins " + + (int) (diff / 1000 % 60) + " secs."; String lastIP = player.getIp(); - sender.sendMessage("[AuthMe] " + args[1].toLowerCase() + " lastlogin : " + d.toString()); - sender.sendMessage("[AuthMe] The player : " + player.getNickname() + " is unlogged since " + msg); + sender.sendMessage("[AuthMe] " + args[1].toLowerCase() + + " lastlogin : " + d.toString()); + sender.sendMessage("[AuthMe] The player : " + + player.getNickname() + " is unlogged since " + + msg); sender.sendMessage("[AuthMe] LastPlayer IP : " + lastIP); - } else { - m._(sender, "unknown_user"); - return true; - } - } catch (NullPointerException e) { - m._(sender, "unknown_user"); - return true; - } + } else { + m._(sender, "unknown_user"); + return true; + } + } catch (NullPointerException e) { + m._(sender, "unknown_user"); + return true; + } } else if (args[0].equalsIgnoreCase("accounts")) { - if (args.length != 2) { - sender.sendMessage("Usage: /authme accounts "); - sender.sendMessage("Or: /authme accounts "); - return true; - } - if (!args[1].contains(".")) { - final CommandSender fSender = sender; - final String[] arguments = args; - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - PlayerAuth pAuth = null; - String message = "[AuthMe] "; - try { - pAuth = database.getAuth(arguments[1].toLowerCase()); - } catch (NullPointerException npe){ - fSender.sendMessage("[AuthMe] This player is unknown"); - return; - } - if (pAuth != null) { - List accountList = database.getAllAuthsByName(pAuth); - if (accountList.isEmpty() || accountList == null) { - fSender.sendMessage("[AuthMe] This player is unknown"); - return; - } - if (accountList.size() == 1) { - fSender.sendMessage("[AuthMe] " + arguments[1] + " is a single account player"); - return; - } - int i = 0; - for (String account : accountList) { - i++; - message = message + account; - if (i != accountList.size()) { - message = message + ", "; - } else { - message = message + "."; - } - } - fSender.sendMessage("[AuthMe] " + arguments[1] + " has " + String.valueOf(accountList.size()) + " accounts"); - fSender.sendMessage(message); - } else { - fSender.sendMessage("[AuthMe] This player is unknown"); - return; - } - } - }); - return true; - } else { - final CommandSender fSender = sender; - final String[] arguments = args; - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - String message = "[AuthMe] "; - if (arguments[1] != null) { - List accountList = database.getAllAuthsByIp(arguments[1]); - if (accountList.isEmpty() || accountList == null) { - fSender.sendMessage("[AuthMe] Please put a valid IP"); - return; - } - if (accountList.size() == 1) { - fSender.sendMessage("[AuthMe] " + arguments[1] + " is a single account player"); - return; - } - int i = 0; - for (String account : accountList) { - i++; - message = message + account; - if (i != accountList.size()) { - message = message + ", "; - } else { - message = message + "."; - } - } - fSender.sendMessage("[AuthMe] " + arguments[1] + " has " + String.valueOf(accountList.size()) + " accounts"); - fSender.sendMessage(message); - } else { - fSender.sendMessage("[AuthMe] Please put a valid IP"); - return; - } - } - }); - return true; - } - } else if (args[0].equalsIgnoreCase("register") || args[0].equalsIgnoreCase("reg")) { + if (args.length != 2) { + sender.sendMessage("Usage: /authme accounts "); + sender.sendMessage("Or: /authme accounts "); + return true; + } + if (!args[1].contains(".")) { + final CommandSender fSender = sender; + final String[] arguments = args; + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, + new Runnable() { + @Override + public void run() { + PlayerAuth pAuth = null; + String message = "[AuthMe] "; + try { + pAuth = database.getAuth(arguments[1] + .toLowerCase()); + } catch (NullPointerException npe) { + fSender.sendMessage("[AuthMe] This player is unknown"); + return; + } + if (pAuth != null) { + List accountList = database + .getAllAuthsByName(pAuth); + if (accountList.isEmpty() + || accountList == null) { + fSender.sendMessage("[AuthMe] This player is unknown"); + return; + } + if (accountList.size() == 1) { + fSender.sendMessage("[AuthMe] " + + arguments[1] + + " is a single account player"); + return; + } + int i = 0; + for (String account : accountList) { + i++; + message = message + account; + if (i != accountList.size()) { + message = message + ", "; + } else { + message = message + "."; + } + } + fSender.sendMessage("[AuthMe] " + + arguments[1] + + " has " + + String.valueOf(accountList.size()) + + " accounts"); + fSender.sendMessage(message); + } else { + fSender.sendMessage("[AuthMe] This player is unknown"); + return; + } + } + }); + return true; + } else { + final CommandSender fSender = sender; + final String[] arguments = args; + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, + new Runnable() { + @Override + public void run() { + String message = "[AuthMe] "; + if (arguments[1] != null) { + List accountList = database + .getAllAuthsByIp(arguments[1]); + if (accountList.isEmpty() + || accountList == null) { + fSender.sendMessage("[AuthMe] Please put a valid IP"); + return; + } + if (accountList.size() == 1) { + fSender.sendMessage("[AuthMe] " + + arguments[1] + + " is a single account player"); + return; + } + int i = 0; + for (String account : accountList) { + i++; + message = message + account; + if (i != accountList.size()) { + message = message + ", "; + } else { + message = message + "."; + } + } + fSender.sendMessage("[AuthMe] " + + arguments[1] + + " has " + + String.valueOf(accountList.size()) + + " accounts"); + fSender.sendMessage(message); + } else { + fSender.sendMessage("[AuthMe] Please put a valid IP"); + return; + } + } + }); + return true; + } + } else if (args[0].equalsIgnoreCase("register") + || args[0].equalsIgnoreCase("reg")) { if (args.length != 3) { sender.sendMessage("Usage: /authme register playername password"); return true; @@ -274,17 +309,19 @@ public class AdminCommand implements CommandExecutor { try { String name = args[1].toLowerCase(); if (database.isAuthAvailable(name)) { - m._(sender, "user_regged"); + m._(sender, "user_regged"); return true; } - String hash = PasswordSecurity.getHash(Settings.getPasswordHash, args[2], name); - PlayerAuth auth = new PlayerAuth(name, hash, "198.18.0.1", 0L, "your@email.com", API.getPlayerRealName(name)); - if (PasswordSecurity.userSalt.containsKey(name) && PasswordSecurity.userSalt.get(name) != null) - auth.setSalt(PasswordSecurity.userSalt.get(name)); - else - auth.setSalt(""); + String hash = PasswordSecurity.getHash( + Settings.getPasswordHash, args[2], name); + PlayerAuth auth = new PlayerAuth(name, hash, "198.18.0.1", 0L, + "your@email.com", API.getPlayerRealName(name)); + if (PasswordSecurity.userSalt.containsKey(name) + && PasswordSecurity.userSalt.get(name) != null) auth + .setSalt(PasswordSecurity.userSalt.get(name)); + else auth.setSalt(""); if (!database.saveAuth(auth)) { - m._(sender, "error"); + m._(sender, "error"); return true; } m._(sender, "registered"); @@ -299,118 +336,128 @@ public class AdminCommand implements CommandExecutor { sender.sendMessage("Usage: /authme getemail playername"); return true; } - String playername = args[1].toLowerCase(); - PlayerAuth getAuth = database.getAuth(playername); - if (getAuth == null) { - m._(sender, "unknown_user"); - return true; - } - sender.sendMessage("[AuthMe] " + args[1] + " email : " + getAuth.getEmail()); - return true; + String playername = args[1].toLowerCase(); + PlayerAuth getAuth = database.getAuth(playername); + if (getAuth == null) { + m._(sender, "unknown_user"); + return true; + } + 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"); return true; } - String playername = args[1].toLowerCase(); - PlayerAuth getAuth = database.getAuth(playername); - if (getAuth == null) { - m._(sender, "unknown_user"); - return true; - } - getAuth.setEmail(args[2]); - if (!database.updateEmail(getAuth)) { - m._(sender, "error"); + String playername = args[1].toLowerCase(); + PlayerAuth getAuth = database.getAuth(playername); + if (getAuth == null) { + m._(sender, "unknown_user"); return true; } - if (PlayerCache.getInstance().getAuth(playername) != null) - PlayerCache.getInstance().updatePlayer(getAuth); - return true; + getAuth.setEmail(args[2]); + if (!database.updateEmail(getAuth)) { + m._(sender, "error"); + return true; + } + if (PlayerCache.getInstance().getAuth(playername) != null) PlayerCache + .getInstance().updatePlayer(getAuth); + return true; } else if (args[0].equalsIgnoreCase("setspawn")) { - try { - if (sender instanceof Player) { - if (Spawn.getInstance().setSpawn(((Player) sender).getLocation())) - sender.sendMessage("[AuthMe] Correctly define new spawn"); - else sender.sendMessage("[AuthMe] SetSpawn fail , please retry"); - } else { - sender.sendMessage("[AuthMe] Please use that command in game"); - } - } catch (NullPointerException ex) { - ConsoleLogger.showError(ex.getMessage()); - } - return true; + try { + if (sender instanceof Player) { + if (Spawn.getInstance().setSpawn( + ((Player) sender).getLocation())) sender + .sendMessage("[AuthMe] Correctly define new spawn"); + else sender + .sendMessage("[AuthMe] SetSpawn fail , please retry"); + } else { + sender.sendMessage("[AuthMe] Please use that command in game"); + } + } catch (NullPointerException ex) { + ConsoleLogger.showError(ex.getMessage()); + } + return true; } else if (args[0].equalsIgnoreCase("setfirstspawn")) { - try { - if (sender instanceof Player) { - if (Spawn.getInstance().setFirstSpawn(((Player) sender).getLocation())) - sender.sendMessage("[AuthMe] Correctly define new first spawn"); - else sender.sendMessage("[AuthMe] SetFirstSpawn fail , please retry"); - } else { - sender.sendMessage("[AuthMe] Please use that command in game"); - } - } catch (NullPointerException ex) { - ConsoleLogger.showError(ex.getMessage()); - } - return true; + try { + if (sender instanceof Player) { + if (Spawn.getInstance().setFirstSpawn( + ((Player) sender).getLocation())) sender + .sendMessage("[AuthMe] Correctly define new first spawn"); + else sender + .sendMessage("[AuthMe] SetFirstSpawn fail , please retry"); + } else { + sender.sendMessage("[AuthMe] Please use that command in game"); + } + } catch (NullPointerException ex) { + ConsoleLogger.showError(ex.getMessage()); + } + return true; } 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; - if (database instanceof Thread) { - database.purgeBanned(bP); - } else { - Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { - @Override - public void run() { - database.purgeBanned(bP); - } - }); - } - if (Settings.purgeEssentialsFile && plugin.ess != null) - plugin.dataManager.purgeEssentials(bannedPlayers); - if (Settings.purgePlayerDat) - plugin.dataManager.purgeDat(bannedPlayers); - if (Settings.purgeLimitedCreative) - plugin.dataManager.purgeLimitedCreative(bannedPlayers); - if (Settings.purgeAntiXray) - plugin.dataManager.purgeAntiXray(bannedPlayers); - return true; + List bannedPlayers = new ArrayList(); + for (OfflinePlayer off : plugin.getServer().getBannedPlayers()) { + bannedPlayers.add(off.getName().toLowerCase()); + } + final List bP = bannedPlayers; + if (database instanceof Thread) { + database.purgeBanned(bP); + } else { + Bukkit.getScheduler().runTaskAsynchronously(plugin, + new Runnable() { + @Override + public void run() { + database.purgeBanned(bP); + } + }); + } + if (Settings.purgeEssentialsFile && plugin.ess != null) plugin.dataManager + .purgeEssentials(bannedPlayers); + if (Settings.purgePlayerDat) plugin.dataManager + .purgeDat(bannedPlayers); + if (Settings.purgeLimitedCreative) plugin.dataManager + .purgeLimitedCreative(bannedPlayers); + if (Settings.purgeAntiXray) plugin.dataManager + .purgeAntiXray(bannedPlayers); + return true; } else if (args[0].equalsIgnoreCase("spawn")) { - try { - if (sender instanceof Player) { - if (Spawn.getInstance().getSpawn() != null) - ((Player) sender).teleport(Spawn.getInstance().getSpawn()); - else sender.sendMessage("[AuthMe] Spawn fail , please try to define the spawn"); - } else { - sender.sendMessage("[AuthMe] Please use that command in game"); - } - } catch (NullPointerException ex) { - ConsoleLogger.showError(ex.getMessage()); - } - return true; + try { + if (sender instanceof Player) { + if (Spawn.getInstance().getSpawn() != null) ((Player) sender) + .teleport(Spawn.getInstance().getSpawn()); + else sender + .sendMessage("[AuthMe] Spawn fail , please try to define the spawn"); + } else { + sender.sendMessage("[AuthMe] Please use that command in game"); + } + } catch (NullPointerException ex) { + ConsoleLogger.showError(ex.getMessage()); + } + return true; } else if (args[0].equalsIgnoreCase("firstspawn")) { - try { - if (sender instanceof Player) { - if (Spawn.getInstance().getFirstSpawn() != null) - ((Player) sender).teleport(Spawn.getInstance().getFirstSpawn()); - else sender.sendMessage("[AuthMe] Spawn fail , please try to define the first spawn"); - } else { - sender.sendMessage("[AuthMe] Please use that command in game"); - } - } catch (NullPointerException ex) { - ConsoleLogger.showError(ex.getMessage()); - } - return true; - } else if (args[0].equalsIgnoreCase("changepassword") || args[0].equalsIgnoreCase("cp")) { + try { + if (sender instanceof Player) { + if (Spawn.getInstance().getFirstSpawn() != null) ((Player) sender) + .teleport(Spawn.getInstance().getFirstSpawn()); + else sender + .sendMessage("[AuthMe] Spawn fail , please try to define the first spawn"); + } else { + sender.sendMessage("[AuthMe] Please use that command in game"); + } + } catch (NullPointerException ex) { + ConsoleLogger.showError(ex.getMessage()); + } + return true; + } 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); + String hash = PasswordSecurity.getHash( + Settings.getPasswordHash, args[2], name); PlayerAuth auth = null; if (PlayerCache.getInstance().isAuthenticated(name)) { auth = PlayerCache.getInstance().getAuth(name); @@ -418,16 +465,16 @@ public class AdminCommand implements CommandExecutor { auth = database.getAuth(name); } if (auth == null) { - m._(sender, "unknown_user"); + m._(sender, "unknown_user"); return true; } auth.setHash(hash); if (PasswordSecurity.userSalt.containsKey(name)) { - auth.setSalt(PasswordSecurity.userSalt.get(name)); + auth.setSalt(PasswordSecurity.userSalt.get(name)); database.updateSalt(auth); } if (!database.updatePassword(auth)) { - m._(sender, "error"); + m._(sender, "error"); return true; } sender.sendMessage("pwd_changed"); @@ -437,51 +484,67 @@ public class AdminCommand implements CommandExecutor { m._(sender, "error"); } return true; - } else if (args[0].equalsIgnoreCase("unregister") || args[0].equalsIgnoreCase("unreg") || args[0].equalsIgnoreCase("del") ) { + } else if (args[0].equalsIgnoreCase("unregister") + || args[0].equalsIgnoreCase("unreg") + || args[0].equalsIgnoreCase("del")) { if (args.length != 2) { sender.sendMessage("Usage: /authme unregister playername"); return true; } String name = args[1].toLowerCase(); if (!database.removeAuth(name)) { - m._(sender, "error"); + m._(sender, "error"); return true; } Player target = Bukkit.getPlayer(name); PlayerCache.getInstance().removePlayer(name); Utils.getInstance().setGroup(name, groupType.UNREGISTERED); if (target != null) { - if (target.isOnline()) { - if (Settings.isTeleportToSpawnEnabled && !Settings.noTeleport) { - Location spawn = plugin.getSpawnLocation(target); - SpawnTeleportEvent tpEvent = new SpawnTeleportEvent(target, target.getLocation(), spawn, false); - plugin.getServer().getPluginManager().callEvent(tpEvent); - if(!tpEvent.isCancelled()) { - target.teleport(tpEvent.getTo()); - } + if (target.isOnline()) { + if (Settings.isTeleportToSpawnEnabled + && !Settings.noTeleport) { + Location spawn = plugin.getSpawnLocation(target); + SpawnTeleportEvent tpEvent = new SpawnTeleportEvent( + target, target.getLocation(), spawn, false); + plugin.getServer().getPluginManager() + .callEvent(tpEvent); + if (!tpEvent.isCancelled()) { + target.teleport(tpEvent.getTo()); + } } LimboCache.getInstance().addLimboPlayer(target); int delay = Settings.getRegistrationTimeout * 20; int interval = Settings.getWarnMessageInterval; BukkitScheduler sched = sender.getServer().getScheduler(); if (delay != 0) { - int id = sched.scheduleSyncDelayedTask(plugin, new TimeoutTask(plugin, name), delay); - LimboCache.getInstance().getLimboPlayer(name).setTimeoutTaskId(id); + int id = sched.scheduleSyncDelayedTask(plugin, + new TimeoutTask(plugin, name), delay); + LimboCache.getInstance().getLimboPlayer(name) + .setTimeoutTaskId(id); } - LimboCache.getInstance().getLimboPlayer(name).setMessageTaskId(sched.scheduleSyncDelayedTask(plugin, new MessageTask(plugin, name, m._("reg_msg"), interval))); - if (Settings.applyBlindEffect) - target.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, Settings.getRegistrationTimeout * 20, 2)); + LimboCache + .getInstance() + .getLimboPlayer(name) + .setMessageTaskId( + sched.scheduleSyncDelayedTask( + plugin, + new MessageTask(plugin, name, m + ._("reg_msg"), interval))); + if (Settings.applyBlindEffect) target + .addPotionEffect(new PotionEffect( + PotionEffectType.BLINDNESS, + Settings.getRegistrationTimeout * 20, 2)); m._(target, "unregistered"); - } else { - // Player isn't online, do nothing else - } + } else { + // Player isn't online, do nothing else + } } else { - // Player does not exist, do nothing else + // Player does not exist, do nothing else } m._(sender, "unregistered"); ConsoleLogger.info(args[1] + " unregistered"); return true; - } else if (args[0].equalsIgnoreCase("purgelastpos")){ + } else if (args[0].equalsIgnoreCase("purgelastpos")) { if (args.length != 2) { sender.sendMessage("Usage: /authme purgelastpos playername"); return true; @@ -490,8 +553,9 @@ public class AdminCommand implements CommandExecutor { String name = args[1].toLowerCase(); PlayerAuth auth = database.getAuth(name); if (auth == null) { - sender.sendMessage("The player " + name + " is not registered "); - return true; + sender.sendMessage("The player " + name + + " is not registered "); + return true; } auth.setQuitLocX(0); auth.setQuitLocY(0); @@ -500,44 +564,48 @@ public class AdminCommand implements CommandExecutor { database.updateQuitLoc(auth); sender.sendMessage(name + " 's last pos location is now reset"); } catch (Exception e) { - ConsoleLogger.showError("An error occured while trying to reset location or player do not exist, please see below: "); - ConsoleLogger.showError(e.getMessage()); - if (sender instanceof Player) - sender.sendMessage("An error occured while trying to reset location or player do not exist, please see logs"); + ConsoleLogger + .showError("An error occured while trying to reset location or player do not exist, please see below: "); + ConsoleLogger.showError(e.getMessage()); + if (sender instanceof Player) sender + .sendMessage("An error occured while trying to reset location or player do not exist, please see logs"); } return true; } else if (args[0].equalsIgnoreCase("switchantibot")) { - if (args.length != 2) { - sender.sendMessage("Usage : /authme switchantibot on/off"); - return true; - } - if (args[1].equalsIgnoreCase("on")) { - plugin.switchAntiBotMod(true); - sender.sendMessage("[AuthMe] AntiBotMod enabled"); - return true; - } - if (args[1].equalsIgnoreCase("off")) { - plugin.switchAntiBotMod(false); - sender.sendMessage("[AuthMe] AntiBotMod disabled"); - return true; - } - sender.sendMessage("Usage : /authme switchantibot on/off"); - return true; + if (args.length != 2) { + sender.sendMessage("Usage : /authme switchantibot on/off"); + return true; + } + if (args[1].equalsIgnoreCase("on")) { + plugin.switchAntiBotMod(true); + sender.sendMessage("[AuthMe] AntiBotMod enabled"); + return true; + } + if (args[1].equalsIgnoreCase("off")) { + plugin.switchAntiBotMod(false); + sender.sendMessage("[AuthMe] AntiBotMod disabled"); + return true; + } + sender.sendMessage("Usage : /authme switchantibot on/off"); + return true; } else if (args[0].equalsIgnoreCase("getip")) { - if (args.length < 2) { - sender.sendMessage("Usage : /authme getip onlinePlayerName"); - return true; - } - if (Bukkit.getPlayer(args[1]) != null) { - Player player = Bukkit.getPlayer(args[1]); - sender.sendMessage(player.getName() + " actual ip is : " + player.getAddress().getAddress().getHostAddress() + ":" + player.getAddress().getPort()); - sender.sendMessage(player.getName() + " real ip is : " + plugin.getIP(player)); - return true; - } else { - sender.sendMessage("This player is not actually online"); - sender.sendMessage("Usage : /authme getip onlinePlayerName"); - return true; - } + if (args.length < 2) { + sender.sendMessage("Usage : /authme getip onlinePlayerName"); + return true; + } + if (Bukkit.getPlayer(args[1]) != null) { + Player player = Bukkit.getPlayer(args[1]); + sender.sendMessage(player.getName() + " actual ip is : " + + player.getAddress().getAddress().getHostAddress() + + ":" + player.getAddress().getPort()); + sender.sendMessage(player.getName() + " real ip is : " + + plugin.getIP(player)); + return true; + } else { + sender.sendMessage("This player is not actually online"); + sender.sendMessage("Usage : /authme getip onlinePlayerName"); + return true; + } } else if (args[0].equalsIgnoreCase("resetposition")) { if (args.length < 2) { sender.sendMessage("Usage : /authme resetPosition "); @@ -553,7 +621,8 @@ public class AdminCommand implements CommandExecutor { auth.setQuitLocZ(0D); auth.setWorld("world"); database.updateQuitLoc(auth); - sender.sendMessage("[AuthMe] Successfully reset position for " + auth.getNickname()); + sender.sendMessage("[AuthMe] Successfully reset position for " + + auth.getNickname()); return true; } else { sender.sendMessage("Usage: /authme reload|register playername password|changepassword playername password|unregister playername"); diff --git a/src/main/java/fr/xephi/authme/commands/CaptchaCommand.java b/src/main/java/fr/xephi/authme/commands/CaptchaCommand.java index e3ae28c9..c8fc8dd3 100644 --- a/src/main/java/fr/xephi/authme/commands/CaptchaCommand.java +++ b/src/main/java/fr/xephi/authme/commands/CaptchaCommand.java @@ -11,20 +11,19 @@ import fr.xephi.authme.security.RandomString; import fr.xephi.authme.settings.Messages; import fr.xephi.authme.settings.Settings; - public class CaptchaCommand implements CommandExecutor { - public AuthMe plugin; + public AuthMe plugin; private Messages m = Messages.getInstance(); public static RandomString rdm = new RandomString(Settings.captchaLength); public CaptchaCommand(AuthMe plugin) { - this.plugin = plugin; + this.plugin = plugin; } - @Override - public boolean onCommand(CommandSender sender, Command cmnd, - String label, String[] args) { + @Override + public boolean onCommand(CommandSender sender, Command cmnd, String label, + String[] args) { if (!(sender instanceof Player)) { return true; @@ -34,37 +33,38 @@ public class CaptchaCommand implements CommandExecutor { String name = player.getName().toLowerCase(); if (args.length == 0) { - m._(player, "usage_captcha"); + m._(player, "usage_captcha"); return true; } if (PlayerCache.getInstance().isAuthenticated(name)) { - m._(player, "logged_in"); + m._(player, "logged_in"); return true; } if (!plugin.authmePermissible(player, "authme." + label.toLowerCase())) { - m._(player, "no_perm"); + m._(player, "no_perm"); return true; } if (!Settings.useCaptcha) { - m._(player, "usage_log"); - return true; + m._(player, "usage_log"); + return true; } - if(!plugin.cap.containsKey(name)) { - m._(player, "usage_log"); - return true; - } + if (!plugin.cap.containsKey(name)) { + m._(player, "usage_log"); + return true; + } - if(Settings.useCaptcha && !args[0].equals(plugin.cap.get(name))) { - plugin.cap.remove(name); - plugin.cap.put(name, rdm.nextString()); - for (String s : m._("wrong_captcha")) { - player.sendMessage(s.replace("THE_CAPTCHA", plugin.cap.get(name))); - } - return true; + if (Settings.useCaptcha && !args[0].equals(plugin.cap.get(name))) { + plugin.cap.remove(name); + plugin.cap.put(name, rdm.nextString()); + for (String s : m._("wrong_captcha")) { + player.sendMessage(s.replace("THE_CAPTCHA", + plugin.cap.get(name))); + } + return true; } try { plugin.captcha.remove(name); @@ -74,6 +74,6 @@ public class CaptchaCommand implements CommandExecutor { m._(player, "valid_captcha"); m._(player, "login_msg"); return true; - } + } } diff --git a/src/main/java/fr/xephi/authme/commands/ChangePasswordCommand.java b/src/main/java/fr/xephi/authme/commands/ChangePasswordCommand.java index 28dee6fc..1cc7175b 100644 --- a/src/main/java/fr/xephi/authme/commands/ChangePasswordCommand.java +++ b/src/main/java/fr/xephi/authme/commands/ChangePasswordCommand.java @@ -18,7 +18,6 @@ import fr.xephi.authme.security.PasswordSecurity; import fr.xephi.authme.settings.Messages; import fr.xephi.authme.settings.Settings; - public class ChangePasswordCommand implements CommandExecutor { private Messages m = Messages.getInstance(); @@ -31,51 +30,56 @@ public class ChangePasswordCommand implements CommandExecutor { } @Override - public boolean onCommand(CommandSender sender, Command cmnd, String label, String[] args) { + public boolean onCommand(CommandSender sender, Command cmnd, String label, + String[] args) { if (!(sender instanceof Player)) { return true; } if (!plugin.authmePermissible(sender, "authme." + label.toLowerCase())) { - m._(sender, "no_perm"); + m._(sender, "no_perm"); return true; } Player player = (Player) sender; String name = player.getName().toLowerCase(); if (!PlayerCache.getInstance().isAuthenticated(name)) { - m._(player, "not_logged_in"); + m._(player, "not_logged_in"); return true; } if (args.length != 2) { - m._(player, "usage_changepassword"); + m._(player, "usage_changepassword"); return true; } try { - String hashnew = PasswordSecurity.getHash(Settings.getPasswordHash, args[1], name); + String hashnew = PasswordSecurity.getHash(Settings.getPasswordHash, + args[1], name); - if (PasswordSecurity.comparePasswordWithHash(args[0], PlayerCache.getInstance().getAuth(name).getHash(), player.getName())) { + if (PasswordSecurity.comparePasswordWithHash(args[0], PlayerCache + .getInstance().getAuth(name).getHash(), player.getName())) { PlayerAuth auth = PlayerCache.getInstance().getAuth(name); auth.setHash(hashnew); - if (PasswordSecurity.userSalt.containsKey(name) && PasswordSecurity.userSalt.get(name) != null) - auth.setSalt(PasswordSecurity.userSalt.get(name)); - else - auth.setSalt(""); + if (PasswordSecurity.userSalt.containsKey(name) + && PasswordSecurity.userSalt.get(name) != null) auth + .setSalt(PasswordSecurity.userSalt.get(name)); + else auth.setSalt(""); if (!database.updatePassword(auth)) { - m._(player, "error"); + m._(player, "error"); return true; } database.updateSalt(auth); PlayerCache.getInstance().updatePlayer(auth); m._(player, "pwd_changed"); ConsoleLogger.info(player.getName() + " changed his password"); - if(plugin.notifications != null) { - plugin.notifications.showNotification(new Notification("[AuthMe] " + player.getName() + " change his password!")); + if (plugin.notifications != null) { + plugin.notifications.showNotification(new Notification( + "[AuthMe] " + player.getName() + + " change his password!")); } } else { - m._(player, "wrong_pwd"); + m._(player, "wrong_pwd"); } } catch (NoSuchAlgorithmException ex) { ConsoleLogger.showError(ex.getMessage()); diff --git a/src/main/java/fr/xephi/authme/commands/ConverterCommand.java b/src/main/java/fr/xephi/authme/commands/ConverterCommand.java index 26b5f26c..bdd93d86 100644 --- a/src/main/java/fr/xephi/authme/commands/ConverterCommand.java +++ b/src/main/java/fr/xephi/authme/commands/ConverterCommand.java @@ -18,7 +18,6 @@ import fr.xephi.authme.converter.xAuthConverter; import fr.xephi.authme.datasource.DataSource; import fr.xephi.authme.settings.Messages; - public class ConverterCommand implements CommandExecutor { private AuthMe plugin; @@ -26,12 +25,13 @@ public class ConverterCommand implements CommandExecutor { private DataSource database; public ConverterCommand(AuthMe plugin, DataSource database) { - this.plugin = plugin; - this.database = database; + this.plugin = plugin; + this.database = database; } @Override - public boolean onCommand(CommandSender sender, Command cmnd, String label, final String[] args) { + public boolean onCommand(CommandSender sender, Command cmnd, String label, + final String[] args) { if (!(sender instanceof Player)) { return true; } @@ -45,7 +45,7 @@ public class ConverterCommand implements CommandExecutor { sender.sendMessage("Usage : /converter flattosql | flattosqlite | xauth | crazylogin | rakamak | royalauth | vauth"); return true; } - + ConvertType type = ConvertType.valueOf(args[0]); if (type == null) { m._(sender, "error"); @@ -53,7 +53,7 @@ public class ConverterCommand implements CommandExecutor { } Converter converter = null; switch (type) { - case ftsql: + case ftsql: converter = new FlatToSql(); break; case ftsqlite: @@ -74,7 +74,8 @@ public class ConverterCommand implements CommandExecutor { case vauth: converter = new vAuthConverter(plugin, database, sender); break; - default: break; + default: + break; } if (converter == null) { m._(sender, "error"); @@ -84,27 +85,23 @@ public class ConverterCommand implements CommandExecutor { sender.sendMessage("[AuthMe] Successfully converted from " + args[0]); return true; } - + public enum ConvertType { - ftsql("flattosql"), - ftsqlite("flattosqlite"), - xauth("xauth"), - crazylogin("crazylogin"), - rakamak("rakamak"), - royalauth("royalauth"), - vauth("vauth"); - + ftsql("flattosql"), ftsqlite("flattosqlite"), xauth("xauth"), crazylogin( + "crazylogin"), rakamak("rakamak"), royalauth("royalauth"), vauth( + "vauth"); + String name; - + ConvertType(String name) { this.name = name; } - + String getName() { return this.name; } - + ConvertType fromName(String name) { return ConvertType.valueOf(name); } diff --git a/src/main/java/fr/xephi/authme/commands/EmailCommand.java b/src/main/java/fr/xephi/authme/commands/EmailCommand.java index cd2e9a81..998952af 100644 --- a/src/main/java/fr/xephi/authme/commands/EmailCommand.java +++ b/src/main/java/fr/xephi/authme/commands/EmailCommand.java @@ -24,8 +24,8 @@ import fr.xephi.authme.settings.Settings; */ public class EmailCommand implements CommandExecutor { - public AuthMe plugin; - private DataSource data; + public AuthMe plugin; + private DataSource data; private Messages m = Messages.getInstance(); public EmailCommand(AuthMe plugin, DataSource data) { @@ -34,44 +34,49 @@ public class EmailCommand implements CommandExecutor { } @Override - public boolean onCommand(CommandSender sender, Command cmnd, String label, String[] args) { + public boolean onCommand(CommandSender sender, Command cmnd, String label, + String[] args) { if (!(sender instanceof Player)) { return true; - } - - if (!plugin.authmePermissible(sender, "authme." + label.toLowerCase())) { - m._(sender, "no_perm"); - return true; } - Player player = (Player) sender; - String name = player.getName().toLowerCase(); + if (!plugin.authmePermissible(sender, "authme." + label.toLowerCase())) { + m._(sender, "no_perm"); + return true; + } - if (args.length == 0) { - m._(player, "usage_email_add"); - m._(player, "usage_email_change"); - m._(player, "usage_email_recovery"); - return true; - } + Player player = (Player) sender; + String name = player.getName().toLowerCase(); - if(args[0].equalsIgnoreCase("add")) { - if (args.length != 3) { - m._(player, "usage_email_add"); - return true; - } - if(Settings.getmaxRegPerEmail > 0) { - if (!plugin.authmePermissible(sender, "authme.allow2accounts") && data.getAllAuthsByEmail(args[1]).size() >= Settings.getmaxRegPerEmail) { - m._(player, "max_reg"); - return true; - } - } - if(args[1].equals(args[2]) && PlayerCache.getInstance().isAuthenticated(name)) { - PlayerAuth auth = PlayerCache.getInstance().getAuth(name); - if (auth.getEmail() == null || (!auth.getEmail().equals("your@email.com") && !auth.getEmail().isEmpty())) { - m._(player, "usage_email_change"); - return true; + if (args.length == 0) { + m._(player, "usage_email_add"); + m._(player, "usage_email_change"); + m._(player, "usage_email_recovery"); + return true; + } + + if (args[0].equalsIgnoreCase("add")) { + if (args.length != 3) { + m._(player, "usage_email_add"); + return true; + } + if (Settings.getmaxRegPerEmail > 0) { + if (!plugin.authmePermissible(sender, "authme.allow2accounts") + && data.getAllAuthsByEmail(args[1]).size() >= Settings.getmaxRegPerEmail) { + m._(player, "max_reg"); + return true; } - if(!Settings.isEmailCorrect(args[1])) { + } + if (args[1].equals(args[2]) + && PlayerCache.getInstance().isAuthenticated(name)) { + PlayerAuth auth = PlayerCache.getInstance().getAuth(name); + if (auth.getEmail() == null + || (!auth.getEmail().equals("your@email.com") && !auth + .getEmail().isEmpty())) { + m._(player, "usage_email_change"); + return true; + } + if (!Settings.isEmailCorrect(args[1])) { m._(player, "email_invalid"); return true; } @@ -83,37 +88,40 @@ public class EmailCommand implements CommandExecutor { PlayerCache.getInstance().updatePlayer(auth); m._(player, "email_added"); player.sendMessage(auth.getEmail()); - } else if (PlayerCache.getInstance().isAuthenticated(name)){ + } else if (PlayerCache.getInstance().isAuthenticated(name)) { m._(player, "email_confirm"); } else { - if (!data.isAuthAvailable(name)) { - m._(player, "login_msg"); - } else { - m._(player, "reg_email_msg"); - } + if (!data.isAuthAvailable(name)) { + m._(player, "login_msg"); + } else { + m._(player, "reg_email_msg"); + } } - } else if(args[0].equalsIgnoreCase("change")) { + } else if (args[0].equalsIgnoreCase("change")) { if (args.length != 3) { m._(player, "usage_email_change"); return true; + } + if (Settings.getmaxRegPerEmail > 0) { + if (!plugin.authmePermissible(sender, "authme.allow2accounts") + && data.getAllAuthsByEmail(args[2]).size() >= Settings.getmaxRegPerEmail) { + m._(player, "max_reg"); + return true; } - if(Settings.getmaxRegPerEmail > 0) { - if (!plugin.authmePermissible(sender, "authme.allow2accounts") && data.getAllAuthsByEmail(args[2]).size() >= Settings.getmaxRegPerEmail) { - m._(player, "max_reg"); - return true; - } - } - if(PlayerCache.getInstance().isAuthenticated(name)) { + } + if (PlayerCache.getInstance().isAuthenticated(name)) { PlayerAuth auth = PlayerCache.getInstance().getAuth(name); - if (auth.getEmail() == null || auth.getEmail().equals("your@email.com") || auth.getEmail().isEmpty()) { - m._(player, "usage_email_add"); - return true; + if (auth.getEmail() == null + || auth.getEmail().equals("your@email.com") + || auth.getEmail().isEmpty()) { + m._(player, "usage_email_add"); + return true; } - if (!args[1].equals(auth.getEmail())) { - m._(player, "old_email_invalid"); - return true; + if (!args[1].equals(auth.getEmail())) { + m._(player, "old_email_invalid"); + return true; } - if(!Settings.isEmailCorrect(args[2])) { + if (!Settings.isEmailCorrect(args[2])) { m._(player, "new_email_invalid"); return true; } @@ -125,78 +133,85 @@ public class EmailCommand implements CommandExecutor { PlayerCache.getInstance().updatePlayer(auth); m._(player, "email_changed"); player.sendMessage(m._("email_defined") + auth.getEmail()); - } else if (PlayerCache.getInstance().isAuthenticated(name)){ + } else if (PlayerCache.getInstance().isAuthenticated(name)) { m._(player, "email_confirm"); } else { - if (!data.isAuthAvailable(name)) { - m._(player, "login_msg"); - } else { - m._(player, "reg_email_msg"); - } + if (!data.isAuthAvailable(name)) { + m._(player, "login_msg"); + } else { + m._(player, "reg_email_msg"); + } } } - if(args[0].equalsIgnoreCase("recovery")) { - if (args.length != 2) { - m._(player, "usage_email_recovery"); - return true; - } - if (plugin.mail == null) { - m._(player, "error"); - return true; - } - if (data.isAuthAvailable(name)) { - if (PlayerCache.getInstance().isAuthenticated(name)) { - m._(player, "logged_in"); - return true; - } - try { - RandomString rand = new RandomString(Settings.getRecoveryPassLength); - String thePass = rand.nextString(); - String hashnew = PasswordSecurity.getHash(Settings.getPasswordHash, thePass, name); - PlayerAuth auth = null; - if (PlayerCache.getInstance().isAuthenticated(name)) { - auth = PlayerCache.getInstance().getAuth(name); - } else if (data.isAuthAvailable(name)) { - auth = data.getAuth(name); - } else { - m._(player, "unknown_user"); - return true; - } - if (Settings.getmailAccount.equals("") || Settings.getmailAccount.isEmpty()) { - m._(player, "error"); - return true; - } - - if (!args[1].equalsIgnoreCase(auth.getEmail()) || args[1].equalsIgnoreCase("your@email.com") || auth.getEmail().equalsIgnoreCase("your@email.com")) { - m._(player, "email_invalid"); - return true; - } - final String finalhashnew = hashnew; - final PlayerAuth finalauth = auth; - if (data instanceof Thread) { - finalauth.setHash(hashnew); - data.updatePassword(auth); - } else { - Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { - @Override - public void run() { - finalauth.setHash(finalhashnew); - data.updatePassword(finalauth); - } - }); - } - plugin.mail.main(auth, thePass); - m._(player, "email_send"); - } catch (NoSuchAlgorithmException ex) { - ConsoleLogger.showError(ex.getMessage()); - m._(sender, "error"); - } catch (NoClassDefFoundError ncdfe) { - ConsoleLogger.showError(ncdfe.getMessage()); - m._(sender, "error"); - } - } else { - m._(player, "reg_email_msg"); - } + if (args[0].equalsIgnoreCase("recovery")) { + if (args.length != 2) { + m._(player, "usage_email_recovery"); + return true; + } + if (plugin.mail == null) { + m._(player, "error"); + return true; + } + if (data.isAuthAvailable(name)) { + if (PlayerCache.getInstance().isAuthenticated(name)) { + m._(player, "logged_in"); + return true; + } + try { + RandomString rand = new RandomString( + Settings.getRecoveryPassLength); + String thePass = rand.nextString(); + String hashnew = PasswordSecurity.getHash( + Settings.getPasswordHash, thePass, name); + PlayerAuth auth = null; + if (PlayerCache.getInstance().isAuthenticated(name)) { + auth = PlayerCache.getInstance().getAuth(name); + } else if (data.isAuthAvailable(name)) { + auth = data.getAuth(name); + } else { + m._(player, "unknown_user"); + return true; + } + if (Settings.getmailAccount.equals("") + || Settings.getmailAccount.isEmpty()) { + m._(player, "error"); + return true; + } + + if (!args[1].equalsIgnoreCase(auth.getEmail()) + || args[1].equalsIgnoreCase("your@email.com") + || auth.getEmail().equalsIgnoreCase( + "your@email.com")) { + m._(player, "email_invalid"); + return true; + } + final String finalhashnew = hashnew; + final PlayerAuth finalauth = auth; + if (data instanceof Thread) { + finalauth.setHash(hashnew); + data.updatePassword(auth); + } else { + Bukkit.getScheduler().runTaskAsynchronously(plugin, + new Runnable() { + @Override + public void run() { + finalauth.setHash(finalhashnew); + data.updatePassword(finalauth); + } + }); + } + plugin.mail.main(auth, thePass); + m._(player, "email_send"); + } catch (NoSuchAlgorithmException ex) { + ConsoleLogger.showError(ex.getMessage()); + m._(sender, "error"); + } catch (NoClassDefFoundError ncdfe) { + ConsoleLogger.showError(ncdfe.getMessage()); + m._(sender, "error"); + } + } else { + m._(player, "reg_email_msg"); + } } return true; } diff --git a/src/main/java/fr/xephi/authme/commands/LoginCommand.java b/src/main/java/fr/xephi/authme/commands/LoginCommand.java index fdfa5f86..1563ebf0 100644 --- a/src/main/java/fr/xephi/authme/commands/LoginCommand.java +++ b/src/main/java/fr/xephi/authme/commands/LoginCommand.java @@ -8,18 +8,18 @@ import org.bukkit.entity.Player; import fr.xephi.authme.AuthMe; import fr.xephi.authme.settings.Messages; - public class LoginCommand implements CommandExecutor { private AuthMe plugin; private Messages m = Messages.getInstance(); public LoginCommand(AuthMe plugin) { - this.plugin = plugin; + this.plugin = plugin; } @Override - public boolean onCommand(CommandSender sender, Command cmnd, String label, final String[] args) { + public boolean onCommand(CommandSender sender, Command cmnd, String label, + final String[] args) { if (!(sender instanceof Player)) { return true; } @@ -27,15 +27,15 @@ public class LoginCommand implements CommandExecutor { final Player player = (Player) sender; if (args.length == 0) { - m._(player, "usage_log"); + m._(player, "usage_log"); return true; } if (!plugin.authmePermissible(player, "authme." + label.toLowerCase())) { - m._(player, "no_perm"); + m._(player, "no_perm"); return true; } - plugin.management.performLogin(player, args[0], false); + plugin.management.performLogin(player, args[0], false); return true; } } diff --git a/src/main/java/fr/xephi/authme/commands/LogoutCommand.java b/src/main/java/fr/xephi/authme/commands/LogoutCommand.java index 98c56abd..b0435701 100644 --- a/src/main/java/fr/xephi/authme/commands/LogoutCommand.java +++ b/src/main/java/fr/xephi/authme/commands/LogoutCommand.java @@ -27,7 +27,6 @@ import fr.xephi.authme.settings.Settings; import fr.xephi.authme.task.MessageTask; import fr.xephi.authme.task.TimeoutTask; - public class LogoutCommand implements CommandExecutor { private Messages m = Messages.getInstance(); @@ -42,13 +41,14 @@ public class LogoutCommand implements CommandExecutor { } @Override - public boolean onCommand(CommandSender sender, Command cmnd, String label, String[] args) { + public boolean onCommand(CommandSender sender, Command cmnd, String label, + String[] args) { if (!(sender instanceof Player)) { return true; } if (!plugin.authmePermissible(sender, "authme." + label.toLowerCase())) { - m._(sender, "no_perm"); + m._(sender, "no_perm"); return true; } @@ -56,7 +56,7 @@ public class LogoutCommand implements CommandExecutor { String name = player.getName().toLowerCase(); if (!PlayerCache.getInstance().isAuthenticated(name)) { - m._(player, "not_logged_in"); + m._(player, "not_logged_in"); return true; } @@ -72,46 +72,55 @@ public class LogoutCommand implements CommandExecutor { database.setUnlogged(name); if (Settings.isTeleportToSpawnEnabled && !Settings.noTeleport) { - Location spawnLoc = plugin.getSpawnLocation(player); - AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(player, spawnLoc); + Location spawnLoc = plugin.getSpawnLocation(player); + AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(player, + spawnLoc); plugin.getServer().getPluginManager().callEvent(tpEvent); - if(!tpEvent.isCancelled()) { - if (tpEvent.getTo() != null) - player.teleport(tpEvent.getTo()); + if (!tpEvent.isCancelled()) { + if (tpEvent.getTo() != null) player.teleport(tpEvent.getTo()); } } - if (LimboCache.getInstance().hasLimboPlayer(name)) - LimboCache.getInstance().deleteLimboPlayer(name); + if (LimboCache.getInstance().hasLimboPlayer(name)) LimboCache + .getInstance().deleteLimboPlayer(name); LimboCache.getInstance().addLimboPlayer(player); utils.setGroup(player, groupType.NOTLOGGEDIN); - if(Settings.protectInventoryBeforeLogInEnabled) { - player.getInventory().clear(); - // create cache file for handling lost of inventories on unlogged in status - DataFileCache playerData = new DataFileCache(LimboCache.getInstance().getLimboPlayer(name).getInventory(),LimboCache.getInstance().getLimboPlayer(name).getArmour()); - playerBackup.createCache(name, playerData, LimboCache.getInstance().getLimboPlayer(name).getGroup(),LimboCache.getInstance().getLimboPlayer(name).getOperator(),LimboCache.getInstance().getLimboPlayer(name).isFlying()); + if (Settings.protectInventoryBeforeLogInEnabled) { + player.getInventory().clear(); + // create cache file for handling lost of inventories on unlogged in + // status + DataFileCache playerData = new DataFileCache(LimboCache + .getInstance().getLimboPlayer(name).getInventory(), + LimboCache.getInstance().getLimboPlayer(name).getArmour()); + playerBackup.createCache(name, playerData, LimboCache.getInstance() + .getLimboPlayer(name).getGroup(), LimboCache.getInstance() + .getLimboPlayer(name).getOperator(), LimboCache + .getInstance().getLimboPlayer(name).isFlying()); } int delay = Settings.getRegistrationTimeout * 20; int interval = Settings.getWarnMessageInterval; BukkitScheduler sched = sender.getServer().getScheduler(); if (delay != 0) { - int id = sched.scheduleSyncDelayedTask(plugin, new TimeoutTask(plugin, name), delay); + int id = sched.scheduleSyncDelayedTask(plugin, new TimeoutTask( + plugin, name), delay); LimboCache.getInstance().getLimboPlayer(name).setTimeoutTaskId(id); } - int msgT = sched.scheduleSyncDelayedTask(plugin, new MessageTask(plugin, name, m._("login_msg"), interval)); + int msgT = sched.scheduleSyncDelayedTask(plugin, new MessageTask( + plugin, name, m._("login_msg"), interval)); LimboCache.getInstance().getLimboPlayer(name).setMessageTaskId(msgT); try { - if (player.isInsideVehicle()) - player.getVehicle().eject(); + if (player.isInsideVehicle()) player.getVehicle().eject(); } catch (NullPointerException npe) { } - if (Settings.applyBlindEffect) - player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, Settings.getRegistrationTimeout * 20, 2)); + if (Settings.applyBlindEffect) player.addPotionEffect(new PotionEffect( + PotionEffectType.BLINDNESS, + Settings.getRegistrationTimeout * 20, 2)); m._(player, "logout"); ConsoleLogger.info(player.getDisplayName() + " logged out"); - if(plugin.notifications != null) { - plugin.notifications.showNotification(new Notification("[AuthMe] " + player.getName() + " logged out!")); + if (plugin.notifications != null) { + plugin.notifications.showNotification(new Notification("[AuthMe] " + + player.getName() + " logged out!")); } return true; } diff --git a/src/main/java/fr/xephi/authme/commands/PasspartuCommand.java b/src/main/java/fr/xephi/authme/commands/PasspartuCommand.java index a434ca1a..2b634dbd 100644 --- a/src/main/java/fr/xephi/authme/commands/PasspartuCommand.java +++ b/src/main/java/fr/xephi/authme/commands/PasspartuCommand.java @@ -10,7 +10,6 @@ import fr.xephi.authme.Utils; import fr.xephi.authme.cache.auth.PlayerCache; import fr.xephi.authme.settings.Messages; - /** * * @author stefano @@ -18,34 +17,37 @@ import fr.xephi.authme.settings.Messages; public class PasspartuCommand implements CommandExecutor { private Utils utils = Utils.getInstance(); public AuthMe plugin; - private Messages m = Messages.getInstance(); + private Messages m = Messages.getInstance(); public PasspartuCommand(AuthMe plugin) { this.plugin = plugin; } @Override - public boolean onCommand(CommandSender sender, Command cmnd, String label, String[] args) { + public boolean onCommand(CommandSender sender, Command cmnd, String label, + String[] args) { if (!plugin.authmePermissible(sender, "authme." + label.toLowerCase())) { - m._(sender, "no_perm"); + m._(sender, "no_perm"); return true; } - if (PlayerCache.getInstance().isAuthenticated(sender.getName().toLowerCase())) { + if (PlayerCache.getInstance().isAuthenticated( + sender.getName().toLowerCase())) { return true; } - if ((sender instanceof Player) && args.length == 1) { - if(utils.readToken(args[0])) { - //bypass login! - plugin.management.performLogin((Player) sender, "dontneed", true); - return true; - } - sender.sendMessage("Time is expired or Token is Wrong!"); - return true; - } - sender.sendMessage("usage: /passpartu token"); - return true; + if ((sender instanceof Player) && args.length == 1) { + if (utils.readToken(args[0])) { + // bypass login! + plugin.management.performLogin((Player) sender, "dontneed", + true); + return true; + } + sender.sendMessage("Time is expired or Token is Wrong!"); + return true; + } + sender.sendMessage("usage: /passpartu token"); + return true; } } diff --git a/src/main/java/fr/xephi/authme/commands/RegisterCommand.java b/src/main/java/fr/xephi/authme/commands/RegisterCommand.java index 033abb90..0c4e8480 100644 --- a/src/main/java/fr/xephi/authme/commands/RegisterCommand.java +++ b/src/main/java/fr/xephi/authme/commands/RegisterCommand.java @@ -11,61 +11,62 @@ import fr.xephi.authme.security.RandomString; import fr.xephi.authme.settings.Messages; import fr.xephi.authme.settings.Settings; - public class RegisterCommand implements CommandExecutor { private Messages m = Messages.getInstance(); - public PlayerAuth auth; - public AuthMe plugin; + public PlayerAuth auth; + public AuthMe plugin; public RegisterCommand(AuthMe plugin) { this.plugin = plugin; } @Override - public boolean onCommand(CommandSender sender, Command cmnd, String label, String[] args) { + public boolean onCommand(CommandSender sender, Command cmnd, String label, + String[] args) { if (!(sender instanceof Player)) { - sender.sendMessage("Player Only! Use 'authme register ' instead"); - return true; + sender.sendMessage("Player Only! Use 'authme register ' instead"); + return true; } if (args.length == 0) { m._(sender, "usage_reg"); } if (!plugin.authmePermissible(sender, "authme." + label.toLowerCase())) { - m._(sender, "no_perm"); + m._(sender, "no_perm"); return true; } final Player player = (Player) sender; - if(Settings.emailRegistration && !Settings.getmailAccount.isEmpty()) { - if(Settings.doubleEmailCheck) { - if(args.length < 2) { + if (Settings.emailRegistration && !Settings.getmailAccount.isEmpty()) { + if (Settings.doubleEmailCheck) { + if (args.length < 2) { m._(player, "usage_reg"); return true; - } - if(!args[0].equals(args[1])) { + } + if (!args[0].equals(args[1])) { m._(player, "usage_reg"); return true; - } - } + } + } final String email = args[0]; - if(!Settings.isEmailCorrect(email)) { + if (!Settings.isEmailCorrect(email)) { m._(player, "email_invalid"); return true; - } - RandomString rand = new RandomString(Settings.getRecoveryPassLength); - final String thePass = rand.nextString(); + } + RandomString rand = new RandomString(Settings.getRecoveryPassLength); + final String thePass = rand.nextString(); plugin.management.performRegister(player, thePass, email); return true; } - if (args.length == 0 || (Settings.getEnablePasswordVerifier && args.length < 2)) { + if (args.length == 0 + || (Settings.getEnablePasswordVerifier && args.length < 2)) { m._(player, "usage_reg"); return true; } - if (args.length > 1 && Settings.getEnablePasswordVerifier) - if(!args[0].equals(args[1])) { - m._(player, "password_error"); - return true; - } + if (args.length > 1 && Settings.getEnablePasswordVerifier) if (!args[0] + .equals(args[1])) { + m._(player, "password_error"); + return true; + } plugin.management.performRegister(player, args[0], ""); return true; } diff --git a/src/main/java/fr/xephi/authme/commands/UnregisterCommand.java b/src/main/java/fr/xephi/authme/commands/UnregisterCommand.java index fea1a6fb..a2d561f2 100644 --- a/src/main/java/fr/xephi/authme/commands/UnregisterCommand.java +++ b/src/main/java/fr/xephi/authme/commands/UnregisterCommand.java @@ -29,7 +29,6 @@ import fr.xephi.authme.settings.Settings; import fr.xephi.authme.task.MessageTask; import fr.xephi.authme.task.TimeoutTask; - public class UnregisterCommand implements CommandExecutor { private Messages m = Messages.getInstance(); @@ -43,13 +42,14 @@ public class UnregisterCommand implements CommandExecutor { } @Override - public boolean onCommand(CommandSender sender, Command cmnd, String label, String[] args) { + public boolean onCommand(CommandSender sender, Command cmnd, String label, + String[] args) { if (!(sender instanceof Player)) { return true; } if (!plugin.authmePermissible(sender, "authme." + label.toLowerCase())) { - m._(sender, "no_perm"); + m._(sender, "no_perm"); return true; } @@ -57,80 +57,109 @@ public class UnregisterCommand implements CommandExecutor { String name = player.getName().toLowerCase(); if (!PlayerCache.getInstance().isAuthenticated(name)) { - m._(player, "not_logged_in"); + m._(player, "not_logged_in"); return true; } if (args.length != 1) { - m._(player, "usage_unreg"); + m._(player, "usage_unreg"); return true; } try { - if (PasswordSecurity.comparePasswordWithHash(args[0], PlayerCache.getInstance().getAuth(name).getHash(), player.getName())) { + if (PasswordSecurity.comparePasswordWithHash(args[0], PlayerCache + .getInstance().getAuth(name).getHash(), player.getName())) { if (!database.removeAuth(name)) { player.sendMessage("error"); return true; } - if(Settings.isForcedRegistrationEnabled) { - if (Settings.isTeleportToSpawnEnabled && !Settings.noTeleport) { - Location spawn = plugin.getSpawnLocation(player); - SpawnTeleportEvent tpEvent = new SpawnTeleportEvent(player, player.getLocation(), spawn, false); - plugin.getServer().getPluginManager().callEvent(tpEvent); - if(!tpEvent.isCancelled()) { - player.teleport(tpEvent.getTo()); + if (Settings.isForcedRegistrationEnabled) { + if (Settings.isTeleportToSpawnEnabled + && !Settings.noTeleport) { + Location spawn = plugin.getSpawnLocation(player); + SpawnTeleportEvent tpEvent = new SpawnTeleportEvent( + player, player.getLocation(), spawn, false); + plugin.getServer().getPluginManager() + .callEvent(tpEvent); + if (!tpEvent.isCancelled()) { + player.teleport(tpEvent.getTo()); } } - player.getInventory().setContents(new ItemStack[36]); - player.getInventory().setArmorContents(new ItemStack[4]); - player.saveData(); - PlayerCache.getInstance().removePlayer(player.getName().toLowerCase()); - if (!Settings.getRegisteredGroup.isEmpty()) - Utils.getInstance().setGroup(player, groupType.UNREGISTERED); + player.getInventory().setContents(new ItemStack[36]); + player.getInventory().setArmorContents(new ItemStack[4]); + player.saveData(); + PlayerCache.getInstance().removePlayer( + player.getName().toLowerCase()); + if (!Settings.getRegisteredGroup.isEmpty()) Utils + .getInstance().setGroup(player, + groupType.UNREGISTERED); LimboCache.getInstance().addLimboPlayer(player); int delay = Settings.getRegistrationTimeout * 20; int interval = Settings.getWarnMessageInterval; BukkitScheduler sched = sender.getServer().getScheduler(); if (delay != 0) { - int id = sched.scheduleSyncDelayedTask(plugin, new TimeoutTask(plugin, name), delay); - LimboCache.getInstance().getLimboPlayer(name).setTimeoutTaskId(id); + int id = sched.scheduleSyncDelayedTask(plugin, + new TimeoutTask(plugin, name), delay); + LimboCache.getInstance().getLimboPlayer(name) + .setTimeoutTaskId(id); } - LimboCache.getInstance().getLimboPlayer(name).setMessageTaskId(sched.scheduleSyncDelayedTask(plugin, new MessageTask(plugin, name, m._("reg_msg"), interval))); + LimboCache + .getInstance() + .getLimboPlayer(name) + .setMessageTaskId( + sched.scheduleSyncDelayedTask( + plugin, + new MessageTask(plugin, name, m + ._("reg_msg"), interval))); m._(player, "unregistered"); - ConsoleLogger.info(player.getDisplayName() + " unregistered himself"); - if(plugin.notifications != null) { - plugin.notifications.showNotification(new Notification("[AuthMe] " + player.getName() + " unregistered himself!")); + ConsoleLogger.info(player.getDisplayName() + + " unregistered himself"); + if (plugin.notifications != null) { + plugin.notifications.showNotification(new Notification( + "[AuthMe] " + player.getName() + + " unregistered himself!")); } return true; } - if(!Settings.unRegisteredGroup.isEmpty()){ - Utils.getInstance().setGroup(player, Utils.groupType.UNREGISTERED); - } - PlayerCache.getInstance().removePlayer(player.getName().toLowerCase()); - // check if Player cache File Exist and delete it, preventing duplication of items - if(playerCache.doesCacheExist(name)) { - playerCache.removeCache(name); - } - if (Settings.applyBlindEffect) - player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, Settings.getRegistrationTimeout * 20, 2)); - m._(player, "unregistered"); - ConsoleLogger.info(player.getDisplayName() + " unregistered himself"); - if(plugin.notifications != null) { - plugin.notifications.showNotification(new Notification("[AuthMe] " + player.getName() + " unregistered himself!")); - } - if (Settings.isTeleportToSpawnEnabled && !Settings.noTeleport) { - Location spawn = plugin.getSpawnLocation(player); - SpawnTeleportEvent tpEvent = new SpawnTeleportEvent(player, player.getLocation(), spawn, false); - plugin.getServer().getPluginManager().callEvent(tpEvent); - if(!tpEvent.isCancelled()) { - if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).isLoaded()) { - tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load(); - } - player.teleport(tpEvent.getTo()); - } - } + if (!Settings.unRegisteredGroup.isEmpty()) { + Utils.getInstance().setGroup(player, + Utils.groupType.UNREGISTERED); + } + PlayerCache.getInstance().removePlayer( + player.getName().toLowerCase()); + // check if Player cache File Exist and delete it, preventing + // duplication of items + if (playerCache.doesCacheExist(name)) { + playerCache.removeCache(name); + } + if (Settings.applyBlindEffect) player + .addPotionEffect(new PotionEffect( + PotionEffectType.BLINDNESS, + Settings.getRegistrationTimeout * 20, 2)); + m._(player, "unregistered"); + ConsoleLogger.info(player.getDisplayName() + + " unregistered himself"); + if (plugin.notifications != null) { + plugin.notifications.showNotification(new Notification( + "[AuthMe] " + player.getName() + + " unregistered himself!")); + } + if (Settings.isTeleportToSpawnEnabled && !Settings.noTeleport) { + Location spawn = plugin.getSpawnLocation(player); + SpawnTeleportEvent tpEvent = new SpawnTeleportEvent(player, + player.getLocation(), spawn, false); + plugin.getServer().getPluginManager().callEvent(tpEvent); + if (!tpEvent.isCancelled()) { + if (!tpEvent.getTo().getWorld() + .getChunkAt(tpEvent.getTo()).isLoaded()) { + tpEvent.getTo().getWorld() + .getChunkAt(tpEvent.getTo()).load(); + } + player.teleport(tpEvent.getTo()); + } + } return true; } else { - m._(player, "wrong_pwd"); + m._(player, "wrong_pwd"); } } catch (NoSuchAlgorithmException ex) { ConsoleLogger.showError(ex.getMessage()); diff --git a/src/main/java/fr/xephi/authme/converter/CrazyLoginConverter.java b/src/main/java/fr/xephi/authme/converter/CrazyLoginConverter.java index 04b505f7..2d0ebd37 100644 --- a/src/main/java/fr/xephi/authme/converter/CrazyLoginConverter.java +++ b/src/main/java/fr/xephi/authme/converter/CrazyLoginConverter.java @@ -14,65 +14,69 @@ import fr.xephi.authme.datasource.DataSource; import fr.xephi.authme.settings.Settings; /** -* -* @author Xephi59 -*/ + * + * @author Xephi59 + */ public class CrazyLoginConverter implements Converter { - public AuthMe instance; - public DataSource database; - public CommandSender sender; + public AuthMe instance; + public DataSource database; + public CommandSender sender; - public CrazyLoginConverter (AuthMe instance, DataSource database, CommandSender sender) { - this.instance = instance; - this.database = database; - this.sender = sender; - } + public CrazyLoginConverter(AuthMe instance, DataSource database, + CommandSender sender) { + this.instance = instance; + this.database = database; + this.sender = sender; + } - public CrazyLoginConverter getInstance() { - return this; - } + public CrazyLoginConverter getInstance() { + return this; + } - private static String fileName; - private static File source; + private static String fileName; + private static File source; - @Override - public void run() { - fileName = Settings.crazyloginFileName; + @Override + public void run() { + fileName = Settings.crazyloginFileName; try { - source = new File(AuthMe.getInstance().getDataFolder() + File.separator + fileName); + source = new File(AuthMe.getInstance().getDataFolder() + + File.separator + fileName); if (!source.exists()) { - sender.sendMessage("Error while trying to import datas, please put " + fileName + " in AuthMe folder!"); + sender.sendMessage("Error while trying to import datas, please put " + + fileName + " in AuthMe folder!"); return; } source.createNewFile(); - BufferedReader users = null; - String line; + BufferedReader users = null; + String line; users = new BufferedReader(new FileReader(source)); while ((line = users.readLine()) != null) { - if (line.contains("|")) { - String[] args = line.split("\\|"); - if (args.length < 2) - continue; - if (args[0].equalsIgnoreCase("name")) - continue; + if (line.contains("|")) { + String[] args = line.split("\\|"); + if (args.length < 2) continue; + if (args[0].equalsIgnoreCase("name")) continue; String player = args[0].toLowerCase(); String psw = args[1]; try { if (player != null && psw != null) { - PlayerAuth auth = new PlayerAuth(player, psw, "127.0.0.1", System.currentTimeMillis()); + PlayerAuth auth = new PlayerAuth(player, psw, + "127.0.0.1", System.currentTimeMillis()); database.saveAuth(auth); } - } catch (Exception e) {} - } + } catch (Exception e) { + } + } } users.close(); - ConsoleLogger.info("CrazyLogin database has been imported correctly"); + ConsoleLogger + .info("CrazyLogin database has been imported correctly"); } catch (FileNotFoundException ex) { ConsoleLogger.showError(ex.getMessage()); } catch (IOException ex) { ConsoleLogger.showError(ex.getMessage()); } - } + } } diff --git a/src/main/java/fr/xephi/authme/converter/FlatToSql.java b/src/main/java/fr/xephi/authme/converter/FlatToSql.java index 13aa8e3a..6dc78b43 100644 --- a/src/main/java/fr/xephi/authme/converter/FlatToSql.java +++ b/src/main/java/fr/xephi/authme/converter/FlatToSql.java @@ -12,11 +12,10 @@ import fr.xephi.authme.AuthMe; import fr.xephi.authme.ConsoleLogger; import fr.xephi.authme.settings.Settings; - /** -* -* @author Xephi59 -*/ + * + * @author Xephi59 + */ public class FlatToSql implements Converter { private static String tableName; @@ -31,73 +30,103 @@ public class FlatToSql implements Converter { private static String columnEmail; private static String columnLogged; private static String columnID; - private static File source; - private static File output; + private static File source; + private static File output; - public FlatToSql() { - tableName = Settings.getMySQLTablename; - columnName = Settings.getMySQLColumnName; - columnPassword = Settings.getMySQLColumnPassword; - columnIp = Settings.getMySQLColumnIp; - columnLastLogin = Settings.getMySQLColumnLastLogin; - lastlocX = Settings.getMySQLlastlocX; - lastlocY = Settings.getMySQLlastlocY; - lastlocZ = Settings.getMySQLlastlocZ; - lastlocWorld = Settings.getMySQLlastlocWorld; - columnEmail = Settings.getMySQLColumnEmail; - columnLogged = Settings.getMySQLColumnLogged; - columnID = Settings.getMySQLColumnId; - } + public FlatToSql() { + tableName = Settings.getMySQLTablename; + columnName = Settings.getMySQLColumnName; + columnPassword = Settings.getMySQLColumnPassword; + columnIp = Settings.getMySQLColumnIp; + columnLastLogin = Settings.getMySQLColumnLastLogin; + lastlocX = Settings.getMySQLlastlocX; + lastlocY = Settings.getMySQLlastlocY; + lastlocZ = Settings.getMySQLlastlocZ; + lastlocWorld = Settings.getMySQLlastlocWorld; + columnEmail = Settings.getMySQLColumnEmail; + columnLogged = Settings.getMySQLColumnLogged; + columnID = Settings.getMySQLColumnId; + } - @Override - public void run() { + @Override + public void run() { try { - source = new File(AuthMe.getInstance().getDataFolder() + File.separator + "auths.db"); + source = new File(AuthMe.getInstance().getDataFolder() + + File.separator + "auths.db"); source.createNewFile(); - output = new File(AuthMe.getInstance().getDataFolder() + File.separator + "authme.sql"); - BufferedReader br = null; - BufferedWriter sql = null; + output = new File(AuthMe.getInstance().getDataFolder() + + File.separator + "authme.sql"); + BufferedReader br = null; + BufferedWriter sql = null; br = new BufferedReader(new FileReader(source)); sql = new BufferedWriter(new FileWriter(output)); String createDB = "CREATE TABLE IF NOT EXISTS " + tableName + " (" - + columnID + " INTEGER AUTO_INCREMENT," - + columnName + " VARCHAR(255) NOT NULL UNIQUE," - + columnPassword + " VARCHAR(255) NOT NULL," - + columnIp + " VARCHAR(40) NOT NULL DEFAULT '127.0.0.1'," - + columnLastLogin + " BIGINT NOT NULL DEFAULT '" + System.currentTimeMillis() + "'," - + lastlocX + " DOUBLE NOT NULL DEFAULT '0.0'," - + lastlocY + " DOUBLE NOT NULL DEFAULT '0.0'," - + lastlocZ + " DOUBLE NOT NULL DEFAULT '0.0'," - + lastlocWorld + " VARCHAR(255) DEFAULT 'world'," - + columnEmail + " VARCHAR(255) DEFAULT 'your@email.com'," - + columnLogged + " SMALLINT NOT NULL DEFAULT '0'," - + "CONSTRAINT table_const_prim PRIMARY KEY (" + columnID + "));"; + + columnID + " INTEGER AUTO_INCREMENT," + columnName + + " VARCHAR(255) NOT NULL UNIQUE," + columnPassword + + " VARCHAR(255) NOT NULL," + columnIp + + " VARCHAR(40) NOT NULL DEFAULT '127.0.0.1'," + + columnLastLogin + " BIGINT NOT NULL DEFAULT '" + + System.currentTimeMillis() + "'," + lastlocX + + " DOUBLE NOT NULL DEFAULT '0.0'," + lastlocY + + " DOUBLE NOT NULL DEFAULT '0.0'," + lastlocZ + + " DOUBLE NOT NULL DEFAULT '0.0'," + lastlocWorld + + " VARCHAR(255) DEFAULT 'world'," + columnEmail + + " VARCHAR(255) DEFAULT 'your@email.com'," + columnLogged + + " SMALLINT NOT NULL DEFAULT '0'," + + "CONSTRAINT table_const_prim PRIMARY KEY (" + columnID + + "));"; sql.write(createDB); String line; String newline; while ((line = br.readLine()) != null) { - sql.newLine(); + sql.newLine(); String[] args = line.split(":"); - if (args.length == 4) - newline = "INSERT INTO " + tableName + "(" + columnName + "," + columnPassword + "," + columnIp + "," + columnLastLogin + "," + lastlocX + "," + lastlocY + "," + lastlocZ + "," + lastlocWorld + "," + columnEmail + "," + columnLogged + ") VALUES ('" + args[0] + "', '" + args[1] + "', '" + args[2] + "', " + args[3] + ", 0.0, 0.0, 0.0, 'world', 'your@email.com', 0);"; - else if (args.length == 7) - newline = "INSERT INTO " + tableName + "(" + columnName + "," + columnPassword + "," + columnIp + "," + columnLastLogin + "," + lastlocX + "," + lastlocY + "," + lastlocZ + "," + lastlocWorld + "," + columnEmail + "," + columnLogged + ") VALUES ('" + args[0] + "', '" + args[1] + "', '" + args[2] + "', " + args[3] + ", " + args[4] + ", " + args[5] + ", " + args[6] + ", 'world', 'your@email.com', 0);"; - else if (args.length == 8) - newline = "INSERT INTO " + tableName + "(" + columnName + "," + columnPassword + "," + columnIp + "," + columnLastLogin + "," + lastlocX + "," + lastlocY + "," + lastlocZ + "," + lastlocWorld + "," + columnEmail + "," + columnLogged + ") VALUES ('" + args[0] + "', '" + args[1] + "', '" + args[2] + "', " + args[3] + ", " + args[4] + ", " + args[5] + ", " + args[6] + ", '" + args[7] + "', 'your@email.com', 0);"; - else if (args.length == 9) - newline = "INSERT INTO " + tableName + "(" + columnName + "," + columnPassword + "," + columnIp + "," + columnLastLogin + "," + lastlocX + "," + lastlocY + "," + lastlocZ + "," + lastlocWorld + "," + columnEmail + "," + columnLogged + ") VALUES ('" + args[0] + "', '" + args[1] + "', '" + args[2] + "', " + args[3] + ", " + args[4] + ", " + args[5] + ", " + args[6] + ", '" + args[7] + "', '" + args[8] + "', 0);"; - else - newline = ""; - if (newline != "") - sql.write(newline); + if (args.length == 4) newline = "INSERT INTO " + tableName + + "(" + columnName + "," + columnPassword + "," + + columnIp + "," + columnLastLogin + "," + lastlocX + + "," + lastlocY + "," + lastlocZ + "," + lastlocWorld + + "," + columnEmail + "," + columnLogged + + ") VALUES ('" + args[0] + "', '" + args[1] + "', '" + + args[2] + "', " + args[3] + + ", 0.0, 0.0, 0.0, 'world', 'your@email.com', 0);"; + else if (args.length == 7) newline = "INSERT INTO " + tableName + + "(" + columnName + "," + columnPassword + "," + + columnIp + "," + columnLastLogin + "," + lastlocX + + "," + lastlocY + "," + lastlocZ + "," + lastlocWorld + + "," + columnEmail + "," + columnLogged + + ") VALUES ('" + args[0] + "', '" + args[1] + "', '" + + args[2] + "', " + args[3] + ", " + args[4] + ", " + + args[5] + ", " + args[6] + + ", 'world', 'your@email.com', 0);"; + else if (args.length == 8) newline = "INSERT INTO " + tableName + + "(" + columnName + "," + columnPassword + "," + + columnIp + "," + columnLastLogin + "," + lastlocX + + "," + lastlocY + "," + lastlocZ + "," + lastlocWorld + + "," + columnEmail + "," + columnLogged + + ") VALUES ('" + args[0] + "', '" + args[1] + "', '" + + args[2] + "', " + args[3] + ", " + args[4] + ", " + + args[5] + ", " + args[6] + ", '" + args[7] + + "', 'your@email.com', 0);"; + else if (args.length == 9) newline = "INSERT INTO " + tableName + + "(" + columnName + "," + columnPassword + "," + + columnIp + "," + columnLastLogin + "," + lastlocX + + "," + lastlocY + "," + lastlocZ + "," + lastlocWorld + + "," + columnEmail + "," + columnLogged + + ") VALUES ('" + args[0] + "', '" + args[1] + "', '" + + args[2] + "', " + args[3] + ", " + args[4] + ", " + + args[5] + ", " + args[6] + ", '" + args[7] + "', '" + + args[8] + "', 0);"; + else newline = ""; + if (newline != "") sql.write(newline); } sql.close(); br.close(); - ConsoleLogger.info("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) { ConsoleLogger.showError(ex.getMessage()); } - } + } } diff --git a/src/main/java/fr/xephi/authme/converter/FlatToSqlite.java b/src/main/java/fr/xephi/authme/converter/FlatToSqlite.java index 6ac6ee6a..715b4833 100644 --- a/src/main/java/fr/xephi/authme/converter/FlatToSqlite.java +++ b/src/main/java/fr/xephi/authme/converter/FlatToSqlite.java @@ -18,9 +18,8 @@ import fr.xephi.authme.AuthMe; import fr.xephi.authme.ConsoleLogger; import fr.xephi.authme.settings.Settings; - public class FlatToSqlite implements Converter { - + public CommandSender sender; public FlatToSqlite(CommandSender sender) { @@ -37,13 +36,13 @@ public class FlatToSqlite implements Converter { private static String lastlocZ; private static String lastlocWorld; private static String columnEmail; - private static File source; - private static String database; - private static String columnID; - private static Connection con; + private static File source; + private static String database; + private static String columnID; + private static Connection con; - @Override - public void run() { + @Override + public void run() { database = Settings.getMySQLDatabase; tableName = Settings.getMySQLTablename; columnName = Settings.getMySQLColumnName; @@ -56,60 +55,77 @@ public class FlatToSqlite implements Converter { lastlocWorld = Settings.getMySQLlastlocWorld; columnEmail = Settings.getMySQLColumnEmail; columnID = Settings.getMySQLColumnId; - ConsoleLogger.info("Converting FlatFile to SQLite ..."); - if (new File(AuthMe.getInstance().getDataFolder() + File.separator + database + ".db").exists()) { - sender.sendMessage("The Database " + database + ".db can't be created cause the file already exist"); - return; + ConsoleLogger.info("Converting FlatFile to SQLite ..."); + if (new File(AuthMe.getInstance().getDataFolder() + File.separator + + database + ".db").exists()) { + sender.sendMessage("The Database " + database + + ".db can't be created cause the file already exist"); + return; } try { - connect(); - setup(); - } catch (Exception e) { - ConsoleLogger.showError("Problem while trying to convert to sqlite !"); - sender.sendMessage("Problem while trying to convert to sqlite !"); - return; - } - try { - source = new File(AuthMe.getInstance().getDataFolder() + File.separator + "auths.db"); - source.createNewFile(); - BufferedReader br = new BufferedReader(new FileReader(source)); - String line; - int i = 1; - String newline; - while ((line = br.readLine()) != null) { - 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, 'world', '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] + ", 'world', 'your@email.com');"; - else if (args.length == 8) - newline = "INSERT INTO " + tableName + " VALUES (" + i + ", '" + args[0] + "', '" + args[1] + "', '" + args[2] + "', " + args[3] + ", " + args[4] + ", " + args[5] + ", " + args[6] + ", '" + args[7] + "', 'your@email.com');"; - else if (args.length == 9) - newline = "INSERT INTO " + tableName + " VALUES (" + i + ", '" + args[0] + "', '" + args[1] + "', '" + args[2] + "', " + args[3] + ", " + args[4] + ", " + args[5] + ", " + args[6] + ", '" + args[7] + "', '" + args[8] + "');"; - else - newline = ""; - if (newline != "") - saveAuth(newline); - i = i + 1; - } - br.close(); - ConsoleLogger.info("The FlatFile has been converted to " + database + ".db file"); - close(); - sender.sendMessage("The FlatFile has been converted to " + database + ".db file"); - return; - } catch (FileNotFoundException ex) { + connect(); + setup(); + } catch (Exception e) { + ConsoleLogger + .showError("Problem while trying to convert to sqlite !"); + sender.sendMessage("Problem while trying to convert to sqlite !"); + return; + } + try { + source = new File(AuthMe.getInstance().getDataFolder() + + File.separator + "auths.db"); + source.createNewFile(); + BufferedReader br = new BufferedReader(new FileReader(source)); + String line; + int i = 1; + String newline; + while ((line = br.readLine()) != null) { + 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, 'world', '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] + + ", 'world', 'your@email.com');"; + else if (args.length == 8) newline = "INSERT INTO " + tableName + + " VALUES (" + i + ", '" + args[0] + "', '" + args[1] + + "', '" + args[2] + "', " + args[3] + ", " + args[4] + + ", " + args[5] + ", " + args[6] + ", '" + args[7] + + "', 'your@email.com');"; + else if (args.length == 9) newline = "INSERT INTO " + tableName + + " VALUES (" + i + ", '" + args[0] + "', '" + args[1] + + "', '" + args[2] + "', " + args[3] + ", " + args[4] + + ", " + args[5] + ", " + args[6] + ", '" + args[7] + + "', '" + args[8] + "');"; + else newline = ""; + if (newline != "") saveAuth(newline); + i = i + 1; + } + br.close(); + ConsoleLogger.info("The FlatFile has been converted to " + database + + ".db file"); + close(); + sender.sendMessage("The FlatFile has been converted to " + database + + ".db file"); + return; + } catch (FileNotFoundException ex) { ConsoleLogger.showError(ex.getMessage()); } catch (IOException ex) { ConsoleLogger.showError(ex.getMessage()); } sender.sendMessage("Errors appears while trying to convert to SQLite"); return; - } - - private synchronized static void connect() throws ClassNotFoundException, SQLException { + } + + private synchronized static void connect() throws ClassNotFoundException, + SQLException { Class.forName("org.sqlite.JDBC"); ConsoleLogger.info("SQLite driver loaded"); - con = DriverManager.getConnection("jdbc:sqlite:plugins/AuthMe/"+database+".db"); + con = DriverManager.getConnection("jdbc:sqlite:plugins/AuthMe/" + + database + ".db"); } private synchronized static void setup() throws SQLException { @@ -118,18 +134,19 @@ public class FlatToSqlite implements Converter { try { st = con.createStatement(); st.executeUpdate("CREATE TABLE IF NOT EXISTS " + tableName + " (" - + columnID + " INTEGER AUTO_INCREMENT," - + columnName + " VARCHAR(255) NOT NULL UNIQUE," - + columnPassword + " VARCHAR(255) NOT NULL," - + columnIp + " VARCHAR(40) NOT NULL," - + columnLastLogin + " BIGINT," - + lastlocX + " smallint(6) DEFAULT '0'," - + lastlocY + " smallint(6) DEFAULT '0'," - + lastlocZ + " smallint(6) DEFAULT '0'," - + lastlocWorld + " VARCHAR(255) DEFAULT 'world'," - + columnEmail + " VARCHAR(255) DEFAULT 'your@email.com'," - + "CONSTRAINT table_const_prim PRIMARY KEY (" + columnID + "));"); - rs = con.getMetaData().getColumns(null, null, tableName, columnPassword); + + columnID + " INTEGER AUTO_INCREMENT," + columnName + + " VARCHAR(255) NOT NULL UNIQUE," + columnPassword + + " VARCHAR(255) NOT NULL," + columnIp + + " VARCHAR(40) NOT NULL," + columnLastLogin + " BIGINT," + + lastlocX + " smallint(6) DEFAULT '0'," + lastlocY + + " smallint(6) DEFAULT '0'," + lastlocZ + + " smallint(6) DEFAULT '0'," + lastlocWorld + + " VARCHAR(255) DEFAULT 'world'," + 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 " + columnPassword + " VARCHAR(255) NOT NULL;"); @@ -141,7 +158,8 @@ public class FlatToSqlite implements Converter { + columnIp + " VARCHAR(40) NOT NULL;"); } rs.close(); - rs = con.getMetaData().getColumns(null, null, tableName, columnLastLogin); + rs = con.getMetaData().getColumns(null, null, tableName, + columnLastLogin); if (!rs.next()) { st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + columnLastLogin + " BIGINT;"); @@ -149,19 +167,29 @@ public class FlatToSqlite implements Converter { rs.close(); rs = con.getMetaData().getColumns(null, null, tableName, lastlocX); if (!rs.next()) { - st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + lastlocX + " smallint(6) NOT NULL DEFAULT '0'; " - + "ALTER TABLE " + tableName + " ADD COLUMN " + lastlocY + " smallint(6) NOT NULL DEFAULT '0'; " - + "ALTER TABLE " + tableName + " ADD COLUMN " + lastlocZ + " smallint(6) NOT NULL DEFAULT '0';"); + st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + + lastlocX + " smallint(6) NOT NULL DEFAULT '0'; " + + "ALTER TABLE " + tableName + " ADD COLUMN " + + lastlocY + " smallint(6) NOT NULL DEFAULT '0'; " + + "ALTER TABLE " + tableName + " ADD COLUMN " + + lastlocZ + " smallint(6) NOT NULL DEFAULT '0';"); } rs.close(); - rs = con.getMetaData().getColumns(null, null, tableName, lastlocWorld); + rs = con.getMetaData().getColumns(null, null, tableName, + lastlocWorld); if (!rs.next()) { - st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + lastlocWorld + " VARCHAR(255) NOT NULL DEFAULT 'world' AFTER " + lastlocZ + ";"); + st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + + lastlocWorld + + " VARCHAR(255) NOT NULL DEFAULT 'world' AFTER " + + lastlocZ + ";"); } rs.close(); - rs = con.getMetaData().getColumns(null, null, tableName, columnEmail); + rs = con.getMetaData().getColumns(null, null, tableName, + columnEmail); if (!rs.next()) { - st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + columnEmail + " VARCHAR(255) DEFAULT 'your@email.com';"); + st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + + columnEmail + + " VARCHAR(255) DEFAULT 'your@email.com';"); } } finally { close(rs); @@ -169,21 +197,21 @@ public class FlatToSqlite implements Converter { } ConsoleLogger.info("SQLite Setup finished"); } - + private static synchronized boolean saveAuth(String s) { - PreparedStatement pst = null; - try { - pst = con.prepareStatement(s); - pst.executeUpdate(); - } catch (SQLException e) { - ConsoleLogger.showError(e.getMessage()); - return false; - } finally { - close(pst); - } - return true; + PreparedStatement pst = null; + try { + pst = con.prepareStatement(s); + pst.executeUpdate(); + } catch (SQLException e) { + ConsoleLogger.showError(e.getMessage()); + return false; + } finally { + close(pst); + } + return true; } - + private static void close(Statement st) { if (st != null) { try { @@ -203,7 +231,7 @@ public class FlatToSqlite implements Converter { } } } - + public synchronized static void close() { try { con.close(); diff --git a/src/main/java/fr/xephi/authme/converter/RakamakConverter.java b/src/main/java/fr/xephi/authme/converter/RakamakConverter.java index 451d4d8a..f66b27ea 100644 --- a/src/main/java/fr/xephi/authme/converter/RakamakConverter.java +++ b/src/main/java/fr/xephi/authme/converter/RakamakConverter.java @@ -20,86 +20,91 @@ import fr.xephi.authme.security.PasswordSecurity; import fr.xephi.authme.settings.Settings; /** -* -* @author Xephi59 -*/ + * + * @author Xephi59 + */ public class RakamakConverter implements Converter { - public AuthMe instance; - public DataSource database; - public CommandSender sender; + public AuthMe instance; + public DataSource database; + public CommandSender sender; - public RakamakConverter (AuthMe instance, DataSource database, CommandSender sender) { - this.instance = instance; - this.database = database; - this.sender = sender; - } + public RakamakConverter(AuthMe instance, DataSource database, + CommandSender sender) { + this.instance = instance; + this.database = database; + this.sender = sender; + } - public RakamakConverter getInstance() { - return this; - } + public RakamakConverter getInstance() { + return this; + } - private static Boolean useIP; - private static String fileName; - private static String ipFileName; - private static File source; - private static File ipfiles; + private static Boolean useIP; + private static String fileName; + private static String ipFileName; + private static File source; + private static File ipfiles; - @Override - public void run() { - HashAlgorithm hash = Settings.getPasswordHash; - useIP = Settings.rakamakUseIp; - fileName = Settings.rakamakUsers; - ipFileName = Settings.rakamakUsersIp; - HashMap playerIP = new HashMap(); - HashMap playerPSW = new HashMap(); + @Override + public void run() { + HashAlgorithm hash = Settings.getPasswordHash; + useIP = Settings.rakamakUseIp; + fileName = Settings.rakamakUsers; + 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); + source = new File(AuthMe.getInstance().getDataFolder() + + File.separator + fileName); + ipfiles = new File(AuthMe.getInstance().getDataFolder() + + File.separator + ipFileName); source.createNewFile(); ipfiles.createNewFile(); - BufferedReader users = null; - BufferedReader ipFile = null; + BufferedReader users = null; + BufferedReader ipFile = null; ipFile = new BufferedReader(new FileReader(ipfiles)); - String line; + String line; if (useIP) { - String tempLine; - while ((tempLine = ipFile.readLine()) != null) { - if (tempLine.contains("=")) { - String[] args = tempLine.split("="); - playerIP.put(args[0], args[1]); - } - } + String tempLine; + while ((tempLine = ipFile.readLine()) != null) { + if (tempLine.contains("=")) { + String[] args = tempLine.split("="); + playerIP.put(args[0], args[1]); + } + } } ipFile.close(); users = new BufferedReader(new FileReader(source)); while ((line = users.readLine()) != null) { - if (line.contains("=")) { - String[] arguments = line.split("="); - try { - playerPSW.put(arguments[0],PasswordSecurity.getHash(hash, arguments[1], arguments[0])); - } catch (NoSuchAlgorithmException e) { - ConsoleLogger.showError(e.getMessage()); - } - } + if (line.contains("=")) { + String[] arguments = line.split("="); + try { + playerPSW.put(arguments[0], PasswordSecurity.getHash( + hash, arguments[1], arguments[0])); + } catch (NoSuchAlgorithmException e) { + ConsoleLogger.showError(e.getMessage()); + } + } } users.close(); - for (Entry m : playerPSW.entrySet()) { - String player = m.getKey(); - String psw = playerPSW.get(player); - String ip; - if (useIP) { - ip = playerIP.get(player); - } else { - ip = "127.0.0.1"; - } - PlayerAuth auth = new PlayerAuth(player, psw, ip, System.currentTimeMillis()); - if (PasswordSecurity.userSalt.containsKey(player)) - auth.setSalt(PasswordSecurity.userSalt.get(player)); - database.saveAuth(auth); - } - ConsoleLogger.info("Rakamak database has been imported correctly"); - sender.sendMessage("Rakamak database has been imported correctly"); + for (Entry m : playerPSW.entrySet()) { + String player = m.getKey(); + String psw = playerPSW.get(player); + String ip; + if (useIP) { + ip = playerIP.get(player); + } else { + ip = "127.0.0.1"; + } + PlayerAuth auth = new PlayerAuth(player, psw, ip, + System.currentTimeMillis()); + if (PasswordSecurity.userSalt.containsKey(player)) auth + .setSalt(PasswordSecurity.userSalt.get(player)); + database.saveAuth(auth); + } + ConsoleLogger.info("Rakamak database has been imported correctly"); + sender.sendMessage("Rakamak database has been imported correctly"); } catch (FileNotFoundException ex) { ConsoleLogger.showError(ex.getMessage()); sender.sendMessage("Error file not found"); @@ -107,5 +112,5 @@ public class RakamakConverter implements Converter { ConsoleLogger.showError(ex.getMessage()); sender.sendMessage("Error IOException"); } - } + } } diff --git a/src/main/java/fr/xephi/authme/converter/RoyalAuthConverter.java b/src/main/java/fr/xephi/authme/converter/RoyalAuthConverter.java index 61271e4c..6d5ed7ad 100644 --- a/src/main/java/fr/xephi/authme/converter/RoyalAuthConverter.java +++ b/src/main/java/fr/xephi/authme/converter/RoyalAuthConverter.java @@ -10,14 +10,14 @@ import fr.xephi.authme.cache.auth.PlayerAuth; import fr.xephi.authme.datasource.DataSource; public class RoyalAuthConverter implements Converter { - - public AuthMe plugin; - private DataSource data; - - public RoyalAuthConverter(AuthMe plugin) { - this.plugin = plugin; - this.data = plugin.database; - } + + public AuthMe plugin; + private DataSource data; + + public RoyalAuthConverter(AuthMe plugin) { + this.plugin = plugin; + this.data = plugin.database; + } @Override public void run() { @@ -25,16 +25,19 @@ public class RoyalAuthConverter implements Converter { try { String name = o.getName().toLowerCase(); String separator = File.separator; - File file = new File("." + separator + "plugins" + separator + "RoyalAuth" + separator + "userdata" + separator + name + ".yml"); - if (data.isAuthAvailable(name)) - continue; - if (!file.exists()) - continue; + File file = new File("." + separator + "plugins" + separator + + "RoyalAuth" + separator + "userdata" + separator + + name + ".yml"); + if (data.isAuthAvailable(name)) continue; + if (!file.exists()) continue; RoyalAuthYamlReader ra = new RoyalAuthYamlReader(file); - PlayerAuth auth = new PlayerAuth(name, ra.getHash(), "127.0.0.1", ra.getLastLogin(), "your@email.com", o.getName()); + PlayerAuth auth = new PlayerAuth(name, ra.getHash(), + "127.0.0.1", ra.getLastLogin(), "your@email.com", + o.getName()); data.saveAuth(auth); } catch (Exception e) { - ConsoleLogger.showError("Error while trying to import "+ o.getName() + " RoyalAuth datas"); + ConsoleLogger.showError("Error while trying to import " + + o.getName() + " RoyalAuth datas"); } } } diff --git a/src/main/java/fr/xephi/authme/converter/RoyalAuthYamlReader.java b/src/main/java/fr/xephi/authme/converter/RoyalAuthYamlReader.java index 05e309fd..cebbee0d 100644 --- a/src/main/java/fr/xephi/authme/converter/RoyalAuthYamlReader.java +++ b/src/main/java/fr/xephi/authme/converter/RoyalAuthYamlReader.java @@ -6,17 +6,17 @@ import fr.xephi.authme.settings.CustomConfiguration; public class RoyalAuthYamlReader extends CustomConfiguration { - public RoyalAuthYamlReader(File file) { - super(file); + public RoyalAuthYamlReader(File file) { + super(file); load(); save(); - } + } - public long getLastLogin() { - return getLong("timestamps.quit"); - } - - public String getHash() { - return getString("login.password"); - } + public long getLastLogin() { + return getLong("timestamps.quit"); + } + + public String getHash() { + return getString("login.password"); + } } diff --git a/src/main/java/fr/xephi/authme/converter/newxAuthToFlat.java b/src/main/java/fr/xephi/authme/converter/newxAuthToFlat.java index 51fd25d2..e159deb9 100644 --- a/src/main/java/fr/xephi/authme/converter/newxAuthToFlat.java +++ b/src/main/java/fr/xephi/authme/converter/newxAuthToFlat.java @@ -21,59 +21,63 @@ import fr.xephi.authme.datasource.DataSource; public class newxAuthToFlat { - public AuthMe instance; - public DataSource database; - public CommandSender sender; + public AuthMe instance; + public DataSource database; + public CommandSender sender; - public newxAuthToFlat(AuthMe instance, DataSource database, CommandSender sender) { - this.instance = instance; - this.database = database; - this.sender = sender; - } + public newxAuthToFlat(AuthMe instance, DataSource database, + CommandSender sender) { + this.instance = instance; + this.database = database; + this.sender = sender; + } - public boolean convert() { - if (instance.getServer().getPluginManager().getPlugin("xAuth") == null) { - sender.sendMessage("[AuthMe] xAuth plugin not found"); - return false; - } - if (!(new File("./plugins/xAuth/xAuth.h2.db").exists())) { - sender.sendMessage("[AuthMe] xAuth H2 database not found, checking for MySQL or SQLite data..."); - } - List players = getXAuthPlayers(); - if (players == null || players.isEmpty()) { - sender.sendMessage("[AuthMe] Error while import xAuthPlayers"); - return false; - } - sender.sendMessage("[AuthMe] Starting import..."); - try { - for (int id : players) { - String pl = getIdPlayer(id); - String psw = getPassword(id); - if (psw != null && !psw.isEmpty() && pl != null) { - PlayerAuth auth = new PlayerAuth(pl, psw, "198.18.0.1", 0, "your@email.com", API.getPlayerRealName(pl)); - database.saveAuth(auth); - } - } - sender.sendMessage("[AuthMe] Successfull convert from xAuth database"); - } catch (Exception e) { - sender.sendMessage("[AuthMe] An error has been thrown while import xAuth database, the import hadn't fail but can be not complete "); - } - return true; - } + public boolean convert() { + if (instance.getServer().getPluginManager().getPlugin("xAuth") == null) { + sender.sendMessage("[AuthMe] xAuth plugin not found"); + return false; + } + if (!(new File("./plugins/xAuth/xAuth.h2.db").exists())) { + sender.sendMessage("[AuthMe] xAuth H2 database not found, checking for MySQL or SQLite data..."); + } + List players = getXAuthPlayers(); + if (players == null || players.isEmpty()) { + sender.sendMessage("[AuthMe] Error while import xAuthPlayers"); + return false; + } + sender.sendMessage("[AuthMe] Starting import..."); + try { + for (int id : players) { + String pl = getIdPlayer(id); + String psw = getPassword(id); + if (psw != null && !psw.isEmpty() && pl != null) { + PlayerAuth auth = new PlayerAuth(pl, psw, "198.18.0.1", 0, + "your@email.com", API.getPlayerRealName(pl)); + database.saveAuth(auth); + } + } + sender.sendMessage("[AuthMe] Successfull convert from xAuth database"); + } catch (Exception e) { + sender.sendMessage("[AuthMe] An error has been thrown while import xAuth database, the import hadn't fail but can be not complete "); + } + return true; + } - public String getIdPlayer(int id) { - String realPass = ""; - Connection conn = xAuth.getPlugin().getDatabaseController().getConnection(); + 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)); + String sql = String.format( + "SELECT `playername` FROM `%s` WHERE `id` = ?", + xAuth.getPlugin().getDatabaseController() + .getTable(Table.ACCOUNT)); ps = conn.prepareStatement(sql); ps.setInt(1, id); rs = ps.executeQuery(); - if (!rs.next()) - return null; + if (!rs.next()) return null; realPass = rs.getString("playername").toLowerCase(); } catch (SQLException e) { xAuthLog.severe("Failed to retrieve name for account: " + id, e); @@ -81,20 +85,21 @@ public class newxAuthToFlat { } finally { xAuth.getPlugin().getDatabaseController().close(conn, ps, rs); } - return realPass; - } + return realPass; + } - public List getXAuthPlayers() { - List xP = new ArrayList(); - Connection conn = xAuth.getPlugin().getDatabaseController().getConnection(); + public List getXAuthPlayers() { + List xP = new ArrayList(); + Connection conn = xAuth.getPlugin().getDatabaseController() + .getConnection(); PreparedStatement ps = null; ResultSet rs = null; try { - String sql = String.format("SELECT * FROM `%s`", - xAuth.getPlugin().getDatabaseController().getTable(Table.ACCOUNT)); + String sql = String.format("SELECT * FROM `%s`", xAuth.getPlugin() + .getDatabaseController().getTable(Table.ACCOUNT)); ps = conn.prepareStatement(sql); rs = ps.executeQuery(); - while(rs.next()) { + while (rs.next()) { xP.add(rs.getInt("id")); } } catch (SQLException e) { @@ -103,29 +108,32 @@ public class newxAuthToFlat { } finally { xAuth.getPlugin().getDatabaseController().close(conn, ps, rs); } - return xP; - } + return xP; + } - public String getPassword(int accountId) { - String realPass = ""; - Connection conn = xAuth.getPlugin().getDatabaseController().getConnection(); + public String getPassword(int accountId) { + String realPass = ""; + 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)); + String sql = String.format( + "SELECT `password`, `pwtype` FROM `%s` WHERE `id` = ?", + xAuth.getPlugin().getDatabaseController() + .getTable(Table.ACCOUNT)); ps = conn.prepareStatement(sql); ps.setInt(1, accountId); rs = ps.executeQuery(); - if (!rs.next()) - return null; + if (!rs.next()) return null; realPass = rs.getString("password"); } catch (SQLException e) { - xAuthLog.severe("Failed to retrieve password hash for account: " + accountId, e); + xAuthLog.severe("Failed to retrieve password hash for account: " + + accountId, e); return null; } finally { xAuth.getPlugin().getDatabaseController().close(conn, ps, rs); } - return realPass; - } + return realPass; + } } diff --git a/src/main/java/fr/xephi/authme/converter/oldxAuthToFlat.java b/src/main/java/fr/xephi/authme/converter/oldxAuthToFlat.java index e3fff991..bbaa13ee 100644 --- a/src/main/java/fr/xephi/authme/converter/oldxAuthToFlat.java +++ b/src/main/java/fr/xephi/authme/converter/oldxAuthToFlat.java @@ -19,66 +19,69 @@ import fr.xephi.authme.api.API; import fr.xephi.authme.cache.auth.PlayerAuth; import fr.xephi.authme.datasource.DataSource; - /** -* -* @author Xephi59 -*/ + * + * @author Xephi59 + */ public class oldxAuthToFlat { - public AuthMe instance; - public DataSource database; - public CommandSender sender; + public AuthMe instance; + public DataSource database; + public CommandSender sender; - public oldxAuthToFlat(AuthMe instance, DataSource database, CommandSender sender) { - this.instance = instance; - this.database = database; - this.sender = sender; - } + public oldxAuthToFlat(AuthMe instance, DataSource database, + CommandSender sender) { + this.instance = instance; + this.database = database; + this.sender = sender; + } - public boolean convert() { - if (instance.getServer().getPluginManager().getPlugin("xAuth") == null) { - sender.sendMessage("[AuthMe] xAuth plugin not found"); - return false; - } - if (!(new File("./plugins/xAuth/xAuth.h2.db").exists())) { - sender.sendMessage("[AuthMe] xAuth H2 database not found, checking for MySQL or SQLite data..."); - } - List players = getXAuthPlayers(); - if (players == null || players.isEmpty()) { - sender.sendMessage("[AuthMe] Error while import xAuthPlayers"); - return false; - } - sender.sendMessage("[AuthMe] Starting import..."); - try { - for (int id : players) { - String pl = getIdPlayer(id); - String psw = getPassword(id); - if (psw != null && !psw.isEmpty() && pl != null) { - PlayerAuth auth = new PlayerAuth(pl, psw, "198.18.0.1", 0, "your@email.com", API.getPlayerRealName(pl)); - database.saveAuth(auth); - } - } - sender.sendMessage("[AuthMe] Successfull convert from xAuth database"); - } catch (Exception e) { - sender.sendMessage("[AuthMe] An error has been thrown while import xAuth database, the import hadn't fail but can be not complete "); - } - return true; - } + public boolean convert() { + if (instance.getServer().getPluginManager().getPlugin("xAuth") == null) { + sender.sendMessage("[AuthMe] xAuth plugin not found"); + return false; + } + if (!(new File("./plugins/xAuth/xAuth.h2.db").exists())) { + sender.sendMessage("[AuthMe] xAuth H2 database not found, checking for MySQL or SQLite data..."); + } + List players = getXAuthPlayers(); + if (players == null || players.isEmpty()) { + sender.sendMessage("[AuthMe] Error while import xAuthPlayers"); + return false; + } + sender.sendMessage("[AuthMe] Starting import..."); + try { + for (int id : players) { + String pl = getIdPlayer(id); + String psw = getPassword(id); + if (psw != null && !psw.isEmpty() && pl != null) { + PlayerAuth auth = new PlayerAuth(pl, psw, "198.18.0.1", 0, + "your@email.com", API.getPlayerRealName(pl)); + database.saveAuth(auth); + } + } + sender.sendMessage("[AuthMe] Successfull convert from xAuth database"); + } catch (Exception e) { + sender.sendMessage("[AuthMe] An error has been thrown while import xAuth database, the import hadn't fail but can be not complete "); + } + return true; + } - public String getIdPlayer(int id) { - String realPass = ""; - Connection conn = xAuth.getPlugin().getDatabaseController().getConnection(); + 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)); + String sql = String.format( + "SELECT `playername` FROM `%s` WHERE `id` = ?", + xAuth.getPlugin().getDatabaseController() + .getTable(Table.ACCOUNT)); ps = conn.prepareStatement(sql); ps.setInt(1, id); rs = ps.executeQuery(); - if (!rs.next()) - return null; + if (!rs.next()) return null; realPass = rs.getString("playername").toLowerCase(); } catch (SQLException e) { xAuthLog.severe("Failed to retrieve name for account: " + id, e); @@ -86,20 +89,21 @@ public class oldxAuthToFlat { } finally { xAuth.getPlugin().getDatabaseController().close(conn, ps, rs); } - return realPass; - } + return realPass; + } - public List getXAuthPlayers() { - List xP = new ArrayList(); - Connection conn = xAuth.getPlugin().getDatabaseController().getConnection(); + public List getXAuthPlayers() { + List xP = new ArrayList(); + Connection conn = xAuth.getPlugin().getDatabaseController() + .getConnection(); PreparedStatement ps = null; ResultSet rs = null; try { - String sql = String.format("SELECT * FROM `%s`", - xAuth.getPlugin().getDatabaseController().getTable(Table.ACCOUNT)); + String sql = String.format("SELECT * FROM `%s`", xAuth.getPlugin() + .getDatabaseController().getTable(Table.ACCOUNT)); ps = conn.prepareStatement(sql); rs = ps.executeQuery(); - while(rs.next()) { + while (rs.next()) { xP.add(rs.getInt("id")); } } catch (SQLException e) { @@ -108,29 +112,32 @@ public class oldxAuthToFlat { } finally { xAuth.getPlugin().getDatabaseController().close(conn, ps, rs); } - return xP; - } + return xP; + } - public String getPassword(int accountId) { - String realPass = ""; - Connection conn = xAuth.getPlugin().getDatabaseController().getConnection(); + public String getPassword(int accountId) { + String realPass = ""; + 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)); + String sql = String.format( + "SELECT `password`, `pwtype` FROM `%s` WHERE `id` = ?", + xAuth.getPlugin().getDatabaseController() + .getTable(Table.ACCOUNT)); ps = conn.prepareStatement(sql); ps.setInt(1, accountId); rs = ps.executeQuery(); - if (!rs.next()) - return null; + if (!rs.next()) return null; realPass = rs.getString("password"); } catch (SQLException e) { - xAuthLog.severe("Failed to retrieve password hash for account: " + accountId, e); + xAuthLog.severe("Failed to retrieve password hash for account: " + + accountId, e); return null; } finally { xAuth.getPlugin().getDatabaseController().close(conn, ps, rs); } - return realPass; - } + return realPass; + } } diff --git a/src/main/java/fr/xephi/authme/converter/vAuthConverter.java b/src/main/java/fr/xephi/authme/converter/vAuthConverter.java index df30fbd4..bc9bc8de 100644 --- a/src/main/java/fr/xephi/authme/converter/vAuthConverter.java +++ b/src/main/java/fr/xephi/authme/converter/vAuthConverter.java @@ -12,7 +12,8 @@ public class vAuthConverter implements Converter { public DataSource database; public CommandSender sender; - public vAuthConverter(AuthMe plugin, DataSource database, CommandSender sender) { + public vAuthConverter(AuthMe plugin, DataSource database, + CommandSender sender) { this.plugin = plugin; this.database = database; this.sender = sender; diff --git a/src/main/java/fr/xephi/authme/converter/vAuthFileReader.java b/src/main/java/fr/xephi/authme/converter/vAuthFileReader.java index a54ed43b..fb39e2d2 100644 --- a/src/main/java/fr/xephi/authme/converter/vAuthFileReader.java +++ b/src/main/java/fr/xephi/authme/converter/vAuthFileReader.java @@ -15,23 +15,25 @@ import fr.xephi.authme.cache.auth.PlayerAuth; import fr.xephi.authme.datasource.DataSource; public class vAuthFileReader { - + public AuthMe plugin; public DataSource database; public CommandSender sender; - public vAuthFileReader(AuthMe plugin, DataSource database, CommandSender sender) { + public vAuthFileReader(AuthMe plugin, DataSource database, + CommandSender sender) { this.plugin = plugin; this.database = database; this.sender = sender; } - + public void convert() throws IOException { - final File file = new File(plugin.getDataFolder().getParent() + "/vAuth/passwords.yml"); + final File file = new File(plugin.getDataFolder().getParent() + + "/vAuth/passwords.yml"); Scanner scanner = null; try { scanner = new Scanner(file); - while(scanner.hasNextLine()) { + while (scanner.hasNextLine()) { String line = scanner.nextLine(); String name = line.split(": ")[0]; String password = line.split(": ")[1]; @@ -39,29 +41,34 @@ public class vAuthFileReader { if (isUUIDinstance(password)) { String pname = null; try { - pname = Bukkit.getOfflinePlayer(UUID.fromString(name)).getName(); + pname = Bukkit.getOfflinePlayer(UUID.fromString(name)) + .getName(); } catch (Exception e) { pname = getName(UUID.fromString(name)); } catch (NoSuchMethodError e) { pname = getName(UUID.fromString(name)); } if (pname == null) continue; - auth = new PlayerAuth(pname.toLowerCase(), password, "127.0.0.1", System.currentTimeMillis(), "your@email.com", pname); + auth = new PlayerAuth(pname.toLowerCase(), password, + "127.0.0.1", System.currentTimeMillis(), + "your@email.com", pname); } else { - auth = new PlayerAuth(name, password, "127.0.0.1", System.currentTimeMillis(), "your@email.com", API.getPlayerRealName(name)); + auth = new PlayerAuth(name, password, "127.0.0.1", + System.currentTimeMillis(), "your@email.com", + API.getPlayerRealName(name)); } if (auth != null) database.saveAuth(auth); } } catch (Exception e) { } - + } - + private boolean isUUIDinstance(String s) { if (String.valueOf(s.charAt(8)).equalsIgnoreCase("-")) return true; return true; } - + private String getName(UUID uuid) { try { for (OfflinePlayer op : Bukkit.getOfflinePlayers()) { diff --git a/src/main/java/fr/xephi/authme/converter/xAuthConverter.java b/src/main/java/fr/xephi/authme/converter/xAuthConverter.java index 1caa83cf..254a1aac 100644 --- a/src/main/java/fr/xephi/authme/converter/xAuthConverter.java +++ b/src/main/java/fr/xephi/authme/converter/xAuthConverter.java @@ -10,8 +10,9 @@ public class xAuthConverter implements Converter { public AuthMe plugin; public DataSource database; public CommandSender sender; - - public xAuthConverter(AuthMe plugin, DataSource database, CommandSender sender) { + + public xAuthConverter(AuthMe plugin, DataSource database, + CommandSender sender) { this.plugin = plugin; this.database = database; this.sender = sender; @@ -21,12 +22,14 @@ public class xAuthConverter implements Converter { public void run() { try { Class.forName("com.cypherx.xauth.xAuth"); - oldxAuthToFlat converter = new oldxAuthToFlat(plugin, database, sender); + oldxAuthToFlat converter = new oldxAuthToFlat(plugin, database, + sender); converter.convert(); } catch (ClassNotFoundException e) { try { Class.forName("de.luricos.bukkit.xAuth.xAuth"); - newxAuthToFlat converter = new newxAuthToFlat(plugin, database, sender); + newxAuthToFlat converter = new newxAuthToFlat(plugin, database, + sender); converter.convert(); } catch (ClassNotFoundException ce) { sender.sendMessage("xAuth has not been found, please put xAuth.jar in your plugin folder and restart!"); diff --git a/src/main/java/fr/xephi/authme/datasource/CacheDataSource.java b/src/main/java/fr/xephi/authme/datasource/CacheDataSource.java index 5483a712..8865bb64 100644 --- a/src/main/java/fr/xephi/authme/datasource/CacheDataSource.java +++ b/src/main/java/fr/xephi/authme/datasource/CacheDataSource.java @@ -9,7 +9,6 @@ import fr.xephi.authme.AuthMe; import fr.xephi.authme.cache.auth.PlayerAuth; import fr.xephi.authme.cache.auth.PlayerCache; - public class CacheDataSource implements DataSource { private DataSource source; @@ -17,24 +16,23 @@ public class CacheDataSource implements DataSource { private HashMap cache = new HashMap(); public CacheDataSource(AuthMe plugin, DataSource source) { - this.plugin = plugin; + this.plugin = plugin; this.source = source; } @Override public synchronized boolean isAuthAvailable(String user) { - if (cache.containsKey(user.toLowerCase())) return true; - return source.isAuthAvailable(user.toLowerCase()); + if (cache.containsKey(user.toLowerCase())) return true; + return source.isAuthAvailable(user.toLowerCase()); } @Override public synchronized PlayerAuth getAuth(String user) { - if(cache.containsKey(user.toLowerCase())) { + if (cache.containsKey(user.toLowerCase())) { return cache.get(user.toLowerCase()); } else { PlayerAuth auth = source.getAuth(user.toLowerCase()); - if (auth != null) - cache.put(user.toLowerCase(), auth); + if (auth != null) cache.put(user.toLowerCase(), auth); return auth; } } @@ -51,8 +49,8 @@ public class CacheDataSource implements DataSource { @Override public synchronized boolean updatePassword(PlayerAuth auth) { if (source.updatePassword(auth)) { - if (cache.containsKey(auth.getNickname().toLowerCase())) - cache.get(auth.getNickname()).setHash(auth.getHash()); + if (cache.containsKey(auth.getNickname().toLowerCase())) cache.get( + auth.getNickname()).setHash(auth.getHash()); return true; } return false; @@ -61,10 +59,10 @@ public class CacheDataSource implements DataSource { @Override public boolean updateSession(PlayerAuth auth) { if (source.updateSession(auth)) { - if (cache.containsKey(auth.getNickname().toLowerCase())) { - cache.get(auth.getNickname()).setIp(auth.getIp()); - cache.get(auth.getNickname()).setLastLogin(auth.getLastLogin()); - } + if (cache.containsKey(auth.getNickname().toLowerCase())) { + cache.get(auth.getNickname()).setIp(auth.getIp()); + cache.get(auth.getNickname()).setLastLogin(auth.getLastLogin()); + } return true; } return false; @@ -73,12 +71,12 @@ public class CacheDataSource implements DataSource { @Override public boolean updateQuitLoc(PlayerAuth auth) { if (source.updateQuitLoc(auth)) { - if (cache.containsKey(auth.getNickname().toLowerCase())) { - cache.get(auth.getNickname()).setQuitLocX(auth.getQuitLocX()); - cache.get(auth.getNickname()).setQuitLocY(auth.getQuitLocY()); - cache.get(auth.getNickname()).setQuitLocZ(auth.getQuitLocZ()); - cache.get(auth.getNickname()).setWorld(auth.getWorld()); - } + if (cache.containsKey(auth.getNickname().toLowerCase())) { + cache.get(auth.getNickname()).setQuitLocX(auth.getQuitLocX()); + cache.get(auth.getNickname()).setQuitLocY(auth.getQuitLocY()); + cache.get(auth.getNickname()).setQuitLocZ(auth.getQuitLocZ()); + cache.get(auth.getNickname()).setWorld(auth.getWorld()); + } return true; } return false; @@ -94,7 +92,7 @@ public class CacheDataSource implements DataSource { int cleared = source.purgeDatabase(until); if (cleared > 0) { for (PlayerAuth auth : cache.values()) { - if(auth.getLastLogin() < until) { + if (auth.getLastLogin() < until) { cache.remove(auth.getNickname()); } } @@ -107,7 +105,7 @@ public class CacheDataSource implements DataSource { List cleared = source.autoPurgeDatabase(until); if (cleared.size() > 0) { for (PlayerAuth auth : cache.values()) { - if(auth.getLastLogin() < until) { + if (auth.getLastLogin() < until) { cache.remove(auth.getNickname()); } } @@ -131,88 +129,88 @@ public class CacheDataSource implements DataSource { @Override public void reload() { - cache.clear(); - source.reload(); - for (Player player : plugin.getServer().getOnlinePlayers()) { - String user = player.getName().toLowerCase(); - if (PlayerCache.getInstance().isAuthenticated(user)) { - try { + cache.clear(); + source.reload(); + for (Player player : plugin.getServer().getOnlinePlayers()) { + String user = player.getName().toLowerCase(); + if (PlayerCache.getInstance().isAuthenticated(user)) { + try { PlayerAuth auth = source.getAuth(user); cache.put(user, auth); - } catch (NullPointerException npe) { - } + } catch (NullPointerException npe) { + } - } - } + } + } } - @Override - public synchronized boolean updateEmail(PlayerAuth auth) { - if(source.updateEmail(auth)) { - if (cache.containsKey(auth.getNickname().toLowerCase())) - cache.get(auth.getNickname()).setEmail(auth.getEmail()); - return true; - } - return false; - } + @Override + public synchronized boolean updateEmail(PlayerAuth auth) { + if (source.updateEmail(auth)) { + if (cache.containsKey(auth.getNickname().toLowerCase())) cache.get( + auth.getNickname()).setEmail(auth.getEmail()); + return true; + } + return false; + } - @Override - public synchronized boolean updateSalt(PlayerAuth auth) { - if(source.updateSalt(auth)) { - if (cache.containsKey(auth.getNickname().toLowerCase())) - cache.get(auth.getNickname()).setSalt(auth.getSalt()); - return true; - } - return false; - } + @Override + public synchronized boolean updateSalt(PlayerAuth auth) { + if (source.updateSalt(auth)) { + if (cache.containsKey(auth.getNickname().toLowerCase())) cache.get( + auth.getNickname()).setSalt(auth.getSalt()); + return true; + } + return false; + } - @Override - public synchronized List getAllAuthsByName(PlayerAuth auth) { - return source.getAllAuthsByName(auth); - } + @Override + public synchronized List getAllAuthsByName(PlayerAuth auth) { + return source.getAllAuthsByName(auth); + } - @Override - public synchronized List getAllAuthsByIp(String ip) { - return source.getAllAuthsByIp(ip); - } + @Override + public synchronized List getAllAuthsByIp(String ip) { + return source.getAllAuthsByIp(ip); + } - @Override - public synchronized List getAllAuthsByEmail(String email) { - return source.getAllAuthsByEmail(email); - } + @Override + public synchronized List getAllAuthsByEmail(String email) { + return source.getAllAuthsByEmail(email); + } - @Override - public synchronized void purgeBanned(List banned) { - source.purgeBanned(banned); - for (PlayerAuth auth : cache.values()) { - if (banned.contains(auth.getNickname())) { - cache.remove(auth.getNickname()); - } - } - } + @Override + public synchronized void purgeBanned(List banned) { + source.purgeBanned(banned); + for (PlayerAuth auth : cache.values()) { + if (banned.contains(auth.getNickname())) { + cache.remove(auth.getNickname()); + } + } + } - @Override - public DataSourceType getType() { - return source.getType(); - } + @Override + public DataSourceType getType() { + return source.getType(); + } - @Override - public boolean isLogged(String user) { - return source.isLogged(user); - } + @Override + public boolean isLogged(String user) { + return source.isLogged(user); + } - @Override - public void setLogged(String user) { - source.setLogged(user); - } + @Override + public void setLogged(String user) { + source.setLogged(user); + } - @Override - public void setUnlogged(String user) { - source.setUnlogged(user); - } + @Override + public void setUnlogged(String user) { + source.setUnlogged(user); + } - @Override - public void purgeLogged() { - source.purgeLogged(); - } + @Override + public void purgeLogged() { + source.purgeLogged(); + } } diff --git a/src/main/java/fr/xephi/authme/datasource/DataSource.java b/src/main/java/fr/xephi/authme/datasource/DataSource.java index 8fb9790f..cf776cfc 100644 --- a/src/main/java/fr/xephi/authme/datasource/DataSource.java +++ b/src/main/java/fr/xephi/authme/datasource/DataSource.java @@ -4,7 +4,6 @@ import java.util.List; import fr.xephi.authme.cache.auth.PlayerAuth; - public interface DataSource { public enum DataSourceType { @@ -23,7 +22,7 @@ public interface DataSource { boolean updatePassword(PlayerAuth auth); int purgeDatabase(long until); - + List autoPurgeDatabase(long until); boolean removeAuth(String user); @@ -47,15 +46,15 @@ public interface DataSource { void reload(); void purgeBanned(List banned); - + DataSourceType getType(); - + boolean isLogged(String user); - + void setLogged(String user); - + void setUnlogged(String user); - + void purgeLogged(); } diff --git a/src/main/java/fr/xephi/authme/datasource/FlatFileThread.java b/src/main/java/fr/xephi/authme/datasource/FlatFileThread.java index df3580c1..19c94b57 100644 --- a/src/main/java/fr/xephi/authme/datasource/FlatFileThread.java +++ b/src/main/java/fr/xephi/authme/datasource/FlatFileThread.java @@ -17,36 +17,35 @@ import fr.xephi.authme.cache.auth.PlayerAuth; import fr.xephi.authme.settings.PlayersLogs; import fr.xephi.authme.settings.Settings; - public class FlatFileThread extends Thread implements DataSource { - /* file layout: - * - * PLAYERNAME:HASHSUM:IP:LOGININMILLIESECONDS:LASTPOSX:LASTPOSY:LASTPOSZ:LASTPOSWORLD:EMAIL - * + /* + * file layout: + * + * PLAYERNAME:HASHSUM:IP:LOGININMILLIESECONDS:LASTPOSX:LASTPOSY:LASTPOSZ: + * LASTPOSWORLD:EMAIL + * * Old but compatible: - * PLAYERNAME:HASHSUM:IP:LOGININMILLIESECONDS:LASTPOSX:LASTPOSY:LASTPOSZ:LASTPOSWORLD - * PLAYERNAME:HASHSUM:IP:LOGININMILLIESECONDS - * PLAYERNAME:HASHSUM:IP - * PLAYERNAME:HASHSUM - * + * PLAYERNAME:HASHSUM:IP:LOGININMILLIESECONDS:LASTPOSX:LASTPOSY + * :LASTPOSZ:LASTPOSWORLD PLAYERNAME:HASHSUM:IP:LOGININMILLIESECONDS + * PLAYERNAME:HASHSUM:IP PLAYERNAME:HASHSUM */ private File source; public void run() { source = new File(Settings.AUTH_FILE); try { - source.createNewFile(); - } catch (IOException e) { + source.createNewFile(); + } catch (IOException e) { ConsoleLogger.showError(e.getMessage()); if (Settings.isStopEnabled) { - ConsoleLogger.showError("Can't use FLAT FILE... SHUTDOWN..."); - AuthMe.getInstance().getServer().shutdown(); - } - if (!Settings.isStopEnabled) - AuthMe.getInstance().getServer().getPluginManager().disablePlugin(AuthMe.getInstance()); + ConsoleLogger.showError("Can't use FLAT FILE... SHUTDOWN..."); + AuthMe.getInstance().getServer().shutdown(); + } + if (!Settings.isStopEnabled) AuthMe.getInstance().getServer() + .getPluginManager().disablePlugin(AuthMe.getInstance()); return; - } + } } @Override @@ -86,7 +85,11 @@ public class FlatFileThread extends Thread implements DataSource { BufferedWriter bw = null; try { bw = new BufferedWriter(new FileWriter(source, true)); - bw.write(auth.getNickname() + ":" + auth.getHash() + ":" + auth.getIp() + ":" + auth.getLastLogin() + ":" + auth.getQuitLocX() + ":" + auth.getQuitLocY() + ":" + auth.getQuitLocZ() + ":" + auth.getWorld() + ":" + auth.getEmail() + "\n"); + bw.write(auth.getNickname() + ":" + auth.getHash() + ":" + + auth.getIp() + ":" + auth.getLastLogin() + ":" + + auth.getQuitLocX() + ":" + auth.getQuitLocY() + ":" + + auth.getQuitLocZ() + ":" + auth.getWorld() + ":" + + auth.getEmail() + "\n"); } catch (IOException ex) { ConsoleLogger.showError(ex.getMessage()); return false; @@ -114,28 +117,51 @@ public class FlatFileThread extends Thread implements DataSource { while ((line = br.readLine()) != null) { String[] args = line.split(":"); if (args[0].equals(auth.getNickname())) { - switch (args.length) { - case 4: { - newAuth = new PlayerAuth(args[0], auth.getHash(), args[2], Long.parseLong(args[3]), 0, 0, 0, "world", "your@email.com", API.getPlayerRealName(args[0])); - break; - } - case 7: { - newAuth = new PlayerAuth(args[0], auth.getHash(), args[2], Long.parseLong(args[3]), Double.parseDouble(args[4]), Double.parseDouble(args[5]), Double.parseDouble(args[6]), "world", "your@email.com", API.getPlayerRealName(args[0])); - break; - } - case 8: { - newAuth = new PlayerAuth(args[0], auth.getHash(), args[2], Long.parseLong(args[3]), Double.parseDouble(args[4]), Double.parseDouble(args[5]), Double.parseDouble(args[6]), args[7], "your@email.com", API.getPlayerRealName(args[0])); - break; - } - case 9: { - newAuth = new PlayerAuth(args[0], auth.getHash(), args[2], Long.parseLong(args[3]), Double.parseDouble(args[4]), Double.parseDouble(args[5]), Double.parseDouble(args[6]), args[7], args[8], API.getPlayerRealName(args[0])); - break; - } - default: { - newAuth = new PlayerAuth(args[0], auth.getHash(), args[2], 0, 0, 0, 0, "world", "your@email.com", API.getPlayerRealName(args[0])); - break; - } - } + switch (args.length) { + case 4: { + newAuth = new PlayerAuth(args[0], auth.getHash(), + args[2], Long.parseLong(args[3]), 0, 0, 0, + "world", "your@email.com", + API.getPlayerRealName(args[0])); + break; + } + case 7: { + newAuth = new PlayerAuth(args[0], auth.getHash(), + args[2], Long.parseLong(args[3]), + Double.parseDouble(args[4]), + Double.parseDouble(args[5]), + Double.parseDouble(args[6]), "world", + "your@email.com", + API.getPlayerRealName(args[0])); + break; + } + case 8: { + newAuth = new PlayerAuth(args[0], auth.getHash(), + args[2], Long.parseLong(args[3]), + Double.parseDouble(args[4]), + Double.parseDouble(args[5]), + Double.parseDouble(args[6]), args[7], + "your@email.com", + API.getPlayerRealName(args[0])); + break; + } + case 9: { + newAuth = new PlayerAuth(args[0], auth.getHash(), + args[2], Long.parseLong(args[3]), + Double.parseDouble(args[4]), + Double.parseDouble(args[5]), + Double.parseDouble(args[6]), args[7], + args[8], API.getPlayerRealName(args[0])); + break; + } + default: { + newAuth = new PlayerAuth(args[0], auth.getHash(), + args[2], 0, 0, 0, 0, "world", + "your@email.com", + API.getPlayerRealName(args[0])); + break; + } + } break; } } @@ -172,26 +198,49 @@ public class FlatFileThread extends Thread implements DataSource { String[] args = line.split(":"); if (args[0].equals(auth.getNickname())) { switch (args.length) { - case 4: { - newAuth = new PlayerAuth(args[0], args[1], auth.getIp(), auth.getLastLogin(), 0, 0, 0, "world", "your@email.com", API.getPlayerRealName(args[0])); - break; - } - case 7: { - newAuth = new PlayerAuth(args[0], args[1], auth.getIp(), auth.getLastLogin(), Double.parseDouble(args[4]), Double.parseDouble(args[5]), Double.parseDouble(args[6]), "world", "your@email.com", API.getPlayerRealName(args[0])); - break; - } - case 8: { - newAuth = new PlayerAuth(args[0], args[1], auth.getIp(), auth.getLastLogin(), Double.parseDouble(args[4]), Double.parseDouble(args[5]), Double.parseDouble(args[6]), args[7], "your@email.com", API.getPlayerRealName(args[0])); - break; - } - case 9: { - newAuth = new PlayerAuth(args[0], args[1], auth.getIp(), auth.getLastLogin(), Double.parseDouble(args[4]), Double.parseDouble(args[5]), Double.parseDouble(args[6]), args[7], args[8], API.getPlayerRealName(args[0])); - break; - } - default: { - newAuth = new PlayerAuth(args[0], args[1], auth.getIp(), auth.getLastLogin(), 0, 0, 0, "world", "your@email.com", API.getPlayerRealName(args[0])); - break; - } + case 4: { + newAuth = new PlayerAuth(args[0], args[1], + auth.getIp(), auth.getLastLogin(), 0, 0, 0, + "world", "your@email.com", + API.getPlayerRealName(args[0])); + break; + } + case 7: { + newAuth = new PlayerAuth(args[0], args[1], + auth.getIp(), auth.getLastLogin(), + Double.parseDouble(args[4]), + Double.parseDouble(args[5]), + Double.parseDouble(args[6]), "world", + "your@email.com", + API.getPlayerRealName(args[0])); + break; + } + case 8: { + newAuth = new PlayerAuth(args[0], args[1], + auth.getIp(), auth.getLastLogin(), + Double.parseDouble(args[4]), + Double.parseDouble(args[5]), + Double.parseDouble(args[6]), args[7], + "your@email.com", + API.getPlayerRealName(args[0])); + break; + } + case 9: { + newAuth = new PlayerAuth(args[0], args[1], + auth.getIp(), auth.getLastLogin(), + Double.parseDouble(args[4]), + Double.parseDouble(args[5]), + Double.parseDouble(args[6]), args[7], + args[8], API.getPlayerRealName(args[0])); + break; + } + default: { + newAuth = new PlayerAuth(args[0], args[1], + auth.getIp(), auth.getLastLogin(), 0, 0, 0, + "world", "your@email.com", + API.getPlayerRealName(args[0])); + break; + } } break; } @@ -215,9 +264,9 @@ public class FlatFileThread extends Thread implements DataSource { return true; } - @Override - public boolean updateQuitLoc(PlayerAuth auth) { - if (!isAuthAvailable(auth.getNickname())) { + @Override + public boolean updateQuitLoc(PlayerAuth auth) { + if (!isAuthAvailable(auth.getNickname())) { return false; } PlayerAuth newAuth = null; @@ -228,7 +277,11 @@ public class FlatFileThread extends Thread implements DataSource { while ((line = br.readLine()) != null) { String[] args = line.split(":"); if (args[0].equals(auth.getNickname())) { - newAuth = new PlayerAuth(args[0], args[1], args[2], Long.parseLong(args[3]), auth.getQuitLocX(), auth.getQuitLocY(), auth.getQuitLocZ(), auth.getWorld(), auth.getEmail(), API.getPlayerRealName(args[0])); + newAuth = new PlayerAuth(args[0], args[1], args[2], + Long.parseLong(args[3]), auth.getQuitLocX(), + auth.getQuitLocY(), auth.getQuitLocZ(), + auth.getWorld(), auth.getEmail(), + API.getPlayerRealName(args[0])); break; } } @@ -278,7 +331,7 @@ public class FlatFileThread extends Thread implements DataSource { } catch (IOException ex) { } } - } + } } @Override @@ -428,17 +481,40 @@ public class FlatFileThread extends Thread implements DataSource { if (args[0].equals(user)) { switch (args.length) { case 2: - return new PlayerAuth(args[0], args[1], "198.18.0.1", 0, "your@email.com", API.getPlayerRealName(args[0])); + return new PlayerAuth(args[0], args[1], + "198.18.0.1", 0, "your@email.com", + API.getPlayerRealName(args[0])); case 3: - return new PlayerAuth(args[0], args[1], args[2], 0, "your@email.com", API.getPlayerRealName(args[0])); + return new PlayerAuth(args[0], args[1], args[2], 0, + "your@email.com", + API.getPlayerRealName(args[0])); case 4: - return new PlayerAuth(args[0], args[1], args[2], Long.parseLong(args[3]), "your@email.com", API.getPlayerRealName(args[0])); + return new PlayerAuth(args[0], args[1], args[2], + Long.parseLong(args[3]), "your@email.com", + API.getPlayerRealName(args[0])); case 7: - return new PlayerAuth(args[0], args[1], args[2], Long.parseLong(args[3]), Double.parseDouble(args[4]), Double.parseDouble(args[5]), Double.parseDouble(args[6]), "unavailableworld", "your@email.com", API.getPlayerRealName(args[0])); + return new PlayerAuth(args[0], args[1], args[2], + Long.parseLong(args[3]), + Double.parseDouble(args[4]), + Double.parseDouble(args[5]), + Double.parseDouble(args[6]), + "unavailableworld", "your@email.com", + API.getPlayerRealName(args[0])); case 8: - return new PlayerAuth(args[0], args[1], args[2], Long.parseLong(args[3]), Double.parseDouble(args[4]), Double.parseDouble(args[5]), Double.parseDouble(args[6]), args[7], "your@email.com", API.getPlayerRealName(args[0])); + return new PlayerAuth(args[0], args[1], args[2], + Long.parseLong(args[3]), + Double.parseDouble(args[4]), + Double.parseDouble(args[5]), + Double.parseDouble(args[6]), args[7], + "your@email.com", + API.getPlayerRealName(args[0])); case 9: - return new PlayerAuth(args[0], args[1], args[2], Long.parseLong(args[3]), Double.parseDouble(args[4]), Double.parseDouble(args[5]), Double.parseDouble(args[6]), args[7], args[8], API.getPlayerRealName(args[0])); + return new PlayerAuth(args[0], args[1], args[2], + Long.parseLong(args[3]), + Double.parseDouble(args[4]), + Double.parseDouble(args[5]), + Double.parseDouble(args[6]), args[7], + args[8], API.getPlayerRealName(args[0])); } } } @@ -467,49 +543,54 @@ public class FlatFileThread extends Thread implements DataSource { public void reload() { } - @Override - public boolean updateEmail(PlayerAuth auth) { - if (!isAuthAvailable(auth.getNickname())) { - return false; - } - PlayerAuth newAuth = null; - BufferedReader br = null; - try { - br = new BufferedReader(new FileReader(source)); - String line = ""; - while ((line = br.readLine()) != null) { - String[] args = line.split(":"); - if (args[0].equals(auth.getNickname())) { - newAuth = new PlayerAuth(args[0], args[1], args[2], Long.parseLong(args[3]), Double.parseDouble(args[4]), Double.parseDouble(args[5]), Double.parseDouble(args[6]), args[7], auth.getEmail(), API.getPlayerRealName(args[0])); - break; - } - } - } catch (FileNotFoundException ex) { - ConsoleLogger.showError(ex.getMessage()); - return false; - } catch (IOException ex) { - ConsoleLogger.showError(ex.getMessage()); - return false; - } finally { - if (br != null) { - try { - br.close(); - } catch (IOException ex) { - } - } - } - removeAuth(auth.getNickname()); - saveAuth(newAuth); - return true; - } + @Override + public boolean updateEmail(PlayerAuth auth) { + if (!isAuthAvailable(auth.getNickname())) { + return false; + } + PlayerAuth newAuth = null; + BufferedReader br = null; + try { + br = new BufferedReader(new FileReader(source)); + String line = ""; + while ((line = br.readLine()) != null) { + String[] args = line.split(":"); + if (args[0].equals(auth.getNickname())) { + newAuth = new PlayerAuth(args[0], args[1], args[2], + Long.parseLong(args[3]), + Double.parseDouble(args[4]), + Double.parseDouble(args[5]), + Double.parseDouble(args[6]), args[7], + auth.getEmail(), API.getPlayerRealName(args[0])); + break; + } + } + } catch (FileNotFoundException ex) { + ConsoleLogger.showError(ex.getMessage()); + return false; + } catch (IOException ex) { + ConsoleLogger.showError(ex.getMessage()); + return false; + } finally { + if (br != null) { + try { + br.close(); + } catch (IOException ex) { + } + } + } + removeAuth(auth.getNickname()); + saveAuth(newAuth); + return true; + } - @Override - public boolean updateSalt(PlayerAuth auth) { - return false; - } + @Override + public boolean updateSalt(PlayerAuth auth) { + return false; + } - @Override - public List getAllAuthsByName(PlayerAuth auth) { + @Override + public List getAllAuthsByName(PlayerAuth auth) { BufferedReader br = null; List countIp = new ArrayList(); try { @@ -535,11 +616,11 @@ public class FlatFileThread extends Thread implements DataSource { } catch (IOException ex) { } } - } - } + } + } - @Override - public List getAllAuthsByIp(String ip) { + @Override + public List getAllAuthsByIp(String ip) { BufferedReader br = null; List countIp = new ArrayList(); try { @@ -566,10 +647,10 @@ public class FlatFileThread extends Thread implements DataSource { } } } - } + } - @Override - public List getAllAuthsByEmail(String email) { + @Override + public List getAllAuthsByEmail(String email) { BufferedReader br = null; List countEmail = new ArrayList(); try { @@ -596,10 +677,10 @@ public class FlatFileThread extends Thread implements DataSource { } } } - } + } - @Override - public void purgeBanned(List banned) { + @Override + public void purgeBanned(List banned) { BufferedReader br = null; BufferedWriter bw = null; ArrayList lines = new ArrayList(); @@ -609,11 +690,12 @@ public class FlatFileThread extends Thread implements DataSource { while ((line = br.readLine()) != null) { String[] args = line.split(":"); try { - if (banned.contains(args[0])) { - lines.add(line); - } - } catch (NullPointerException npe) {} - catch (ArrayIndexOutOfBoundsException aioobe) {} + if (banned.contains(args[0])) { + lines.add(line); + } + } catch (NullPointerException npe) { + } catch (ArrayIndexOutOfBoundsException aioobe) { + } } bw = new BufferedWriter(new FileWriter(source)); for (String l : lines) { @@ -640,30 +722,30 @@ public class FlatFileThread extends Thread implements DataSource { } } return; - } + } - @Override - public DataSourceType getType() { - return DataSourceType.FILE; - } + @Override + public DataSourceType getType() { + return DataSourceType.FILE; + } - @Override - public boolean isLogged(String user) { - return PlayersLogs.getInstance().players.contains(user.toLowerCase()); - } + @Override + public boolean isLogged(String user) { + return PlayersLogs.getInstance().players.contains(user.toLowerCase()); + } - @Override - public void setLogged(String user) { - PlayersLogs.getInstance().addPlayer(user); - } + @Override + public void setLogged(String user) { + PlayersLogs.getInstance().addPlayer(user); + } - @Override - public void setUnlogged(String user) { - PlayersLogs.getInstance().removePlayer(user); - } + @Override + public void setUnlogged(String user) { + PlayersLogs.getInstance().removePlayer(user); + } - @Override - public void purgeLogged() { - PlayersLogs.getInstance().clear(); - } + @Override + public void purgeLogged() { + PlayersLogs.getInstance().clear(); + } } diff --git a/src/main/java/fr/xephi/authme/datasource/MiniConnectionPoolManager.java b/src/main/java/fr/xephi/authme/datasource/MiniConnectionPoolManager.java index 9f8fe6c1..812e6725 100644 --- a/src/main/java/fr/xephi/authme/datasource/MiniConnectionPoolManager.java +++ b/src/main/java/fr/xephi/authme/datasource/MiniConnectionPoolManager.java @@ -1,12 +1,14 @@ -// Copyright 2007-2013 Christian d'Heureuse, Inventec Informatik AG, Zurich, Switzerland +// Copyright 2007-2013 Christian d'Heureuse, Inventec Informatik AG, Zurich, +// Switzerland // www.source-code.biz, www.inventec.ch/chdh // // This module is multi-licensed and may be used under the terms // of any of the following licenses: // -// EPL, Eclipse Public License, http://www.eclipse.org/legal -// LGPL, GNU Lesser General Public License, http://www.gnu.org/licenses/lgpl.html -// MPL, Mozilla Public License 1.1, http://www.mozilla.org/MPL +// EPL, Eclipse Public License, http://www.eclipse.org/legal +// LGPL, GNU Lesser General Public License, +// http://www.gnu.org/licenses/lgpl.html +// MPL, Mozilla Public License 1.1, http://www.mozilla.org/MPL // // Please contact the author if you need another license. // This module is provided "as is", without warranties of any kind. @@ -25,302 +27,406 @@ import javax.sql.ConnectionPoolDataSource; import javax.sql.PooledConnection; /** -* A lightweight standalone JDBC connection pool manager. -* -*

The public methods of this class are thread-safe. -* -*

Home page: www.source-code.biz/miniconnectionpoolmanager
-* Author: Christian d'Heureuse, Inventec Informatik AG, Zurich, Switzerland
-* Multi-licensed: EPL / LGPL / MPL. -*/ + * A lightweight standalone JDBC connection pool manager. + * + *

+ * The public methods of this class are thread-safe. + * + *

+ * Home page: www. + * source-code.biz/miniconnectionpoolmanager
+ * Author: Christian d'Heureuse, Inventec Informatik AG, Zurich, Switzerland
+ * Multi-licensed: EPL / LGPL / MPL. + */ public class MiniConnectionPoolManager { -private ConnectionPoolDataSource dataSource; -private int maxConnections; -private long timeoutMs; -private PrintWriter logWriter; -private Semaphore semaphore; -private PoolConnectionEventListener poolConnectionEventListener; + private ConnectionPoolDataSource dataSource; + private int maxConnections; + private long timeoutMs; + private PrintWriter logWriter; + private Semaphore semaphore; + private PoolConnectionEventListener poolConnectionEventListener; -// The following variables must only be accessed within synchronized blocks. -// @GuardedBy("this") could by used in the future. -private LinkedList recycledConnections; // list of inactive PooledConnections -private int activeConnections; // number of active (open) connections of this pool -private boolean isDisposed; // true if this connection pool has been disposed -private boolean doPurgeConnection; // flag to purge the connection currently beeing closed instead of recycling it -private PooledConnection connectionInTransition; // a PooledConnection which is currently within a PooledConnection.getConnection() call, or null + // The following variables must only be accessed within synchronized blocks. + // @GuardedBy("this") could by used in the future. + private LinkedList recycledConnections; // list of + // inactive + // PooledConnections + private int activeConnections; // number of active (open) connections of + // this pool + private boolean isDisposed; // true if this connection pool has been + // disposed + private boolean doPurgeConnection; // flag to purge the connection currently + // beeing closed instead of recycling it + private PooledConnection connectionInTransition; // a PooledConnection which + // is currently within a + // PooledConnection.getConnection() + // call, or null -/** -* Thrown in {@link #getConnection()} or {@link #getValidConnection()} when no free connection becomes -* available within timeout seconds. -*/ -public static class TimeoutException extends RuntimeException { - private static final long serialVersionUID = 1; - public TimeoutException () { - super("Timeout while waiting for a free database connection."); } - public TimeoutException (String msg) { - super(msg); }} + /** + * Thrown in {@link #getConnection()} or {@link #getValidConnection()} when + * no free connection becomes available within timeout seconds. + */ + public static class TimeoutException extends RuntimeException { + private static final long serialVersionUID = 1; -/** -* Constructs a MiniConnectionPoolManager object with a timeout of 60 seconds. -* -* @param dataSource -* the data source for the connections. -* @param maxConnections -* the maximum number of connections. -*/ -public MiniConnectionPoolManager (ConnectionPoolDataSource dataSource, int maxConnections) { - this(dataSource, maxConnections, 60); } + public TimeoutException() { + super("Timeout while waiting for a free database connection."); + } -/** -* Constructs a MiniConnectionPoolManager object. -* -* @param dataSource -* the data source for the connections. -* @param maxConnections -* the maximum number of connections. -* @param timeout -* the maximum time in seconds to wait for a free connection. -*/ -public MiniConnectionPoolManager (ConnectionPoolDataSource dataSource, int maxConnections, int timeout) { - this.dataSource = dataSource; - this.maxConnections = maxConnections; - this.timeoutMs = timeout * 1000L; - try { - logWriter = dataSource.getLogWriter(); } - catch (SQLException e) {} - if (maxConnections < 1) { - throw new IllegalArgumentException("Invalid maxConnections value."); } - semaphore = new Semaphore(maxConnections,true); - recycledConnections = new LinkedList(); - poolConnectionEventListener = new PoolConnectionEventListener(); } + public TimeoutException(String msg) { + super(msg); + } + } -/** -* Closes all unused pooled connections. -*/ -public synchronized void dispose() throws SQLException { - if (isDisposed) { - return; } - isDisposed = true; - SQLException e = null; - while (!recycledConnections.isEmpty()) { - PooledConnection pconn = recycledConnections.remove(); - try { - pconn.close(); } - catch (SQLException e2) { - if (e == null) { - e = e2; }}} - if (e != null) { - throw e; }} + /** + * Constructs a MiniConnectionPoolManager object with a timeout of 60 + * seconds. + * + * @param dataSource + * the data source for the connections. + * @param maxConnections + * the maximum number of connections. + */ + public MiniConnectionPoolManager(ConnectionPoolDataSource dataSource, + int maxConnections) { + this(dataSource, maxConnections, 60); + } -/** -* Retrieves a connection from the connection pool. -* -*

If maxConnections connections are already in use, the method -* waits until a connection becomes available or timeout seconds elapsed. -* When the application is finished using the connection, it must close it -* in order to return it to the pool. -* -* @return -* a new Connection object. -* @throws TimeoutException -* when no connection becomes available within timeout seconds. -*/ -public Connection getConnection() throws SQLException { - return getConnection2(timeoutMs); } + /** + * Constructs a MiniConnectionPoolManager object. + * + * @param dataSource + * the data source for the connections. + * @param maxConnections + * the maximum number of connections. + * @param timeout + * the maximum time in seconds to wait for a free connection. + */ + public MiniConnectionPoolManager(ConnectionPoolDataSource dataSource, + int maxConnections, int timeout) { + this.dataSource = dataSource; + this.maxConnections = maxConnections; + this.timeoutMs = timeout * 1000L; + try { + logWriter = dataSource.getLogWriter(); + } catch (SQLException e) { + } + if (maxConnections < 1) { + throw new IllegalArgumentException("Invalid maxConnections value."); + } + semaphore = new Semaphore(maxConnections, true); + recycledConnections = new LinkedList(); + poolConnectionEventListener = new PoolConnectionEventListener(); + } -private Connection getConnection2 (long timeoutMs) throws SQLException { - // This routine is unsynchronized, because semaphore.tryAcquire() may block. - synchronized (this) { - if (isDisposed) { - throw new IllegalStateException("Connection pool has been disposed."); }} - try { - if (!semaphore.tryAcquire(timeoutMs, TimeUnit.MILLISECONDS)) { - throw new TimeoutException(); }} - catch (InterruptedException e) { - throw new RuntimeException("Interrupted while waiting for a database connection.",e); } - boolean ok = false; - try { - Connection conn = getConnection3(); - ok = true; - return conn; } - finally { - if (!ok) { - semaphore.release(); }}} + /** + * Closes all unused pooled connections. + */ + public synchronized void dispose() throws SQLException { + if (isDisposed) { + return; + } + isDisposed = true; + SQLException e = null; + while (!recycledConnections.isEmpty()) { + PooledConnection pconn = recycledConnections.remove(); + try { + pconn.close(); + } catch (SQLException e2) { + if (e == null) { + e = e2; + } + } + } + if (e != null) { + throw e; + } + } -private synchronized Connection getConnection3() throws SQLException { - if (isDisposed) { - throw new IllegalStateException("Connection pool has been disposed."); } - PooledConnection pconn; - if (!recycledConnections.isEmpty()) { - pconn = recycledConnections.remove(); } - else { - pconn = dataSource.getPooledConnection(); - pconn.addConnectionEventListener(poolConnectionEventListener); } - Connection conn; - try { - // The JDBC driver may call ConnectionEventListener.connectionErrorOccurred() - // from within PooledConnection.getConnection(). To detect this within - // disposeConnection(), we temporarily set connectionInTransition. - connectionInTransition = pconn; - activeConnections++; - conn = pconn.getConnection(); } - finally { - connectionInTransition = null; } - assertInnerState(); - return conn; } + /** + * Retrieves a connection from the connection pool. + * + *

+ * If maxConnections connections are already in use, the method + * waits until a connection becomes available or timeout + * seconds elapsed. When the application is finished using the connection, + * it must close it in order to return it to the pool. + * + * @return a new Connection object. + * @throws TimeoutException + * when no connection becomes available within + * timeout seconds. + */ + public Connection getConnection() throws SQLException { + return getConnection2(timeoutMs); + } -/** -* Retrieves a connection from the connection pool and ensures that it is valid -* by calling {@link Connection#isValid(int)}. -* -*

If a connection is not valid, the method tries to get another connection -* until one is valid (or a timeout occurs). -* -*

Pooled connections may become invalid when e.g. the database server is -* restarted. -* -*

This method is slower than {@link #getConnection()} because the JDBC -* driver has to send an extra command to the database server to test the connection. -* -*

This method requires Java 1.6 or newer. -* -* @throws TimeoutException -* when no valid connection becomes available within timeout seconds. -*/ -public Connection getValidConnection() { - long time = System.currentTimeMillis(); - long timeoutTime = time + timeoutMs; - int triesWithoutDelay = getInactiveConnections() + 1; - while (true) { - Connection conn = getValidConnection2(time, timeoutTime); - if (conn != null) { - return conn; } - triesWithoutDelay--; - if (triesWithoutDelay <= 0) { - triesWithoutDelay = 0; - try { - Thread.sleep(250); } - catch (InterruptedException e) { - throw new RuntimeException("Interrupted while waiting for a valid database connection.", e); }} - time = System.currentTimeMillis(); - if (time >= timeoutTime) { - throw new TimeoutException("Timeout while waiting for a valid database connection."); }}} + private Connection getConnection2(long timeoutMs) throws SQLException { + // This routine is unsynchronized, because semaphore.tryAcquire() may + // block. + synchronized (this) { + if (isDisposed) { + throw new IllegalStateException( + "Connection pool has been disposed."); + } + } + try { + if (!semaphore.tryAcquire(timeoutMs, TimeUnit.MILLISECONDS)) { + throw new TimeoutException(); + } + } catch (InterruptedException e) { + throw new RuntimeException( + "Interrupted while waiting for a database connection.", e); + } + boolean ok = false; + try { + Connection conn = getConnection3(); + ok = true; + return conn; + } finally { + if (!ok) { + semaphore.release(); + } + } + } -private Connection getValidConnection2 (long time, long timeoutTime) { - long rtime = Math.max(1, timeoutTime - time); - Connection conn; - try { - conn = getConnection2(rtime); } - catch (SQLException e) { - return null; } - rtime = timeoutTime - System.currentTimeMillis(); - int rtimeSecs = Math.max(1, (int)((rtime+999)/1000)); - try { - if (conn.isValid(rtimeSecs)) { - return conn; }} - catch (SQLException e) {} - // This Exception should never occur. If it nevertheless occurs, it's because of an error in the - // JDBC driver which we ignore and assume that the connection is not valid. - // When isValid() returns false, the JDBC driver should have already called connectionErrorOccurred() - // and the PooledConnection has been removed from the pool, i.e. the PooledConnection will - // not be added to recycledConnections when Connection.close() is called. - // But to be sure that this works even with a faulty JDBC driver, we call purgeConnection(). - purgeConnection(conn); - return null; } + private synchronized Connection getConnection3() throws SQLException { + if (isDisposed) { + throw new IllegalStateException( + "Connection pool has been disposed."); + } + PooledConnection pconn; + if (!recycledConnections.isEmpty()) { + pconn = recycledConnections.remove(); + } else { + pconn = dataSource.getPooledConnection(); + pconn.addConnectionEventListener(poolConnectionEventListener); + } + Connection conn; + try { + // The JDBC driver may call + // ConnectionEventListener.connectionErrorOccurred() + // from within PooledConnection.getConnection(). To detect this + // within + // disposeConnection(), we temporarily set connectionInTransition. + connectionInTransition = pconn; + activeConnections++; + conn = pconn.getConnection(); + } finally { + connectionInTransition = null; + } + assertInnerState(); + return conn; + } -// Purges the PooledConnection associated with the passed Connection from the connection pool. -private synchronized void purgeConnection (Connection conn) { - try { - doPurgeConnection = true; - // (A potential problem of this program logic is that setting the doPurgeConnection flag - // has an effect only if the JDBC driver calls connectionClosed() synchronously within - // Connection.close().) - conn.close(); } - catch (SQLException e) {} - // ignore exception from close() - finally { - doPurgeConnection = false; }} + /** + * Retrieves a connection from the connection pool and ensures that it is + * valid by calling {@link Connection#isValid(int)}. + * + *

+ * If a connection is not valid, the method tries to get another connection + * until one is valid (or a timeout occurs). + * + *

+ * Pooled connections may become invalid when e.g. the database server is + * restarted. + * + *

+ * This method is slower than {@link #getConnection()} because the JDBC + * driver has to send an extra command to the database server to test the + * connection. + * + *

+ * This method requires Java 1.6 or newer. + * + * @throws TimeoutException + * when no valid connection becomes available within + * timeout seconds. + */ + public Connection getValidConnection() { + long time = System.currentTimeMillis(); + long timeoutTime = time + timeoutMs; + int triesWithoutDelay = getInactiveConnections() + 1; + while (true) { + Connection conn = getValidConnection2(time, timeoutTime); + if (conn != null) { + return conn; + } + triesWithoutDelay--; + if (triesWithoutDelay <= 0) { + triesWithoutDelay = 0; + try { + Thread.sleep(250); + } catch (InterruptedException e) { + throw new RuntimeException( + "Interrupted while waiting for a valid database connection.", + e); + } + } + time = System.currentTimeMillis(); + if (time >= timeoutTime) { + throw new TimeoutException( + "Timeout while waiting for a valid database connection."); + } + } + } -private synchronized void recycleConnection (PooledConnection pconn) { - if (isDisposed || doPurgeConnection) { - disposeConnection(pconn); - return; } - if (activeConnections <= 0) { - throw new AssertionError("AuthMeDatabaseError"); } - activeConnections--; - semaphore.release(); - recycledConnections.add(pconn); - assertInnerState(); } + private Connection getValidConnection2(long time, long timeoutTime) { + long rtime = Math.max(1, timeoutTime - time); + Connection conn; + try { + conn = getConnection2(rtime); + } catch (SQLException e) { + return null; + } + rtime = timeoutTime - System.currentTimeMillis(); + int rtimeSecs = Math.max(1, (int) ((rtime + 999) / 1000)); + try { + if (conn.isValid(rtimeSecs)) { + return conn; + } + } catch (SQLException e) { + } + // This Exception should never occur. If it nevertheless occurs, it's + // because of an error in the + // JDBC driver which we ignore and assume that the connection is not + // valid. + // When isValid() returns false, the JDBC driver should have already + // called connectionErrorOccurred() + // and the PooledConnection has been removed from the pool, i.e. the + // PooledConnection will + // not be added to recycledConnections when Connection.close() is + // called. + // But to be sure that this works even with a faulty JDBC driver, we + // call purgeConnection(). + purgeConnection(conn); + return null; + } -private synchronized void disposeConnection (PooledConnection pconn) { - pconn.removeConnectionEventListener(poolConnectionEventListener); - if (!recycledConnections.remove(pconn) && pconn != connectionInTransition) { - // If the PooledConnection is not in the recycledConnections list - // and is not currently within a PooledConnection.getConnection() call, - // we assume that the connection was active. - if (activeConnections <= 0) { - throw new AssertionError("AuthMeDatabaseError"); } - activeConnections--; - semaphore.release(); } - closeConnectionAndIgnoreException(pconn); - assertInnerState(); } + // Purges the PooledConnection associated with the passed Connection from + // the connection pool. + private synchronized void purgeConnection(Connection conn) { + try { + doPurgeConnection = true; + // (A potential problem of this program logic is that setting the + // doPurgeConnection flag + // has an effect only if the JDBC driver calls connectionClosed() + // synchronously within + // Connection.close().) + conn.close(); + } catch (SQLException e) { + } + // ignore exception from close() + finally { + doPurgeConnection = false; + } + } -private void closeConnectionAndIgnoreException (PooledConnection pconn) { - try { - pconn.close(); } - catch (SQLException e) { - log("Error while closing database connection: "+e.toString()); }} + private synchronized void recycleConnection(PooledConnection pconn) { + if (isDisposed || doPurgeConnection) { + disposeConnection(pconn); + return; + } + if (activeConnections <= 0) { + throw new AssertionError("AuthMeDatabaseError"); + } + activeConnections--; + semaphore.release(); + recycledConnections.add(pconn); + assertInnerState(); + } -private void log (String msg) { - String s = "MiniConnectionPoolManager: "+msg; - try { - if (logWriter == null) { - System.err.println(s); } - else { - logWriter.println(s); }} - catch (Exception e) {}} + private synchronized void disposeConnection(PooledConnection pconn) { + pconn.removeConnectionEventListener(poolConnectionEventListener); + if (!recycledConnections.remove(pconn) + && pconn != connectionInTransition) { + // If the PooledConnection is not in the recycledConnections list + // and is not currently within a PooledConnection.getConnection() + // call, + // we assume that the connection was active. + if (activeConnections <= 0) { + throw new AssertionError("AuthMeDatabaseError"); + } + activeConnections--; + semaphore.release(); + } + closeConnectionAndIgnoreException(pconn); + assertInnerState(); + } -private synchronized void assertInnerState() { - if (activeConnections < 0) { - throw new AssertionError("AuthMeDatabaseError"); } - if (activeConnections + recycledConnections.size() > maxConnections) { - throw new AssertionError("AuthMeDatabaseError"); } - if (activeConnections + semaphore.availablePermits() > maxConnections) { - throw new AssertionError("AuthMeDatabaseError"); }} + private void closeConnectionAndIgnoreException(PooledConnection pconn) { + try { + pconn.close(); + } catch (SQLException e) { + log("Error while closing database connection: " + e.toString()); + } + } -private class PoolConnectionEventListener implements ConnectionEventListener { - public void connectionClosed (ConnectionEvent event) { - PooledConnection pconn = (PooledConnection)event.getSource(); - recycleConnection(pconn); } - public void connectionErrorOccurred (ConnectionEvent event) { - PooledConnection pconn = (PooledConnection)event.getSource(); - disposeConnection(pconn); }} + private void log(String msg) { + String s = "MiniConnectionPoolManager: " + msg; + try { + if (logWriter == null) { + System.err.println(s); + } else { + logWriter.println(s); + } + } catch (Exception e) { + } + } -/** -* Returns the number of active (open) connections of this pool. -* -*

This is the number of Connection objects that have been -* issued by {@link #getConnection()}, for which Connection.close() -* has not yet been called. -* -* @return -* the number of active connections. -**/ -public synchronized int getActiveConnections() { - return activeConnections; } + private synchronized void assertInnerState() { + if (activeConnections < 0) { + throw new AssertionError("AuthMeDatabaseError"); + } + if (activeConnections + recycledConnections.size() > maxConnections) { + throw new AssertionError("AuthMeDatabaseError"); + } + if (activeConnections + semaphore.availablePermits() > maxConnections) { + throw new AssertionError("AuthMeDatabaseError"); + } + } -/** -* Returns the number of inactive (unused) connections in this pool. -* -*

This is the number of internally kept recycled connections, -* for which Connection.close() has been called and which -* have not yet been reused. -* -* @return -* the number of inactive connections. -**/ -public synchronized int getInactiveConnections() { - return recycledConnections.size(); } + private class PoolConnectionEventListener implements + ConnectionEventListener { + public void connectionClosed(ConnectionEvent event) { + PooledConnection pconn = (PooledConnection) event.getSource(); + recycleConnection(pconn); + } -} // end class MiniConnectionPoolManager \ No newline at end of file + public void connectionErrorOccurred(ConnectionEvent event) { + PooledConnection pconn = (PooledConnection) event.getSource(); + disposeConnection(pconn); + } + } + + /** + * Returns the number of active (open) connections of this pool. + * + *

+ * This is the number of Connection objects that have been + * issued by {@link #getConnection()}, for which + * Connection.close() has not yet been called. + * + * @return the number of active connections. + **/ + public synchronized int getActiveConnections() { + return activeConnections; + } + + /** + * Returns the number of inactive (unused) connections in this pool. + * + *

+ * This is the number of internally kept recycled connections, for which + * Connection.close() has been called and which have not yet + * been reused. + * + * @return the number of inactive connections. + **/ + public synchronized int getInactiveConnections() { + return recycledConnections.size(); + } + +} // end class MiniConnectionPoolManager diff --git a/src/main/java/fr/xephi/authme/datasource/MySQLThread.java b/src/main/java/fr/xephi/authme/datasource/MySQLThread.java index 68317cc1..426812b1 100644 --- a/src/main/java/fr/xephi/authme/datasource/MySQLThread.java +++ b/src/main/java/fr/xephi/authme/datasource/MySQLThread.java @@ -65,39 +65,43 @@ public class MySQLThread extends Thread implements DataSource { this.columnID = Settings.getMySQLColumnId; this.columnLogged = Settings.getMySQLColumnLogged; try { - this.connect(); - this.setup(); - } catch (ClassNotFoundException e) { + this.connect(); + this.setup(); + } catch (ClassNotFoundException e) { ConsoleLogger.showError(e.getMessage()); if (Settings.isStopEnabled) { - ConsoleLogger.showError("Can't use MySQL... Please input correct MySQL informations ! SHUTDOWN..."); - AuthMe.getInstance().getServer().shutdown(); + ConsoleLogger + .showError("Can't use MySQL... Please input correct MySQL informations ! SHUTDOWN..."); + AuthMe.getInstance().getServer().shutdown(); } - if (!Settings.isStopEnabled) - AuthMe.getInstance().getServer().getPluginManager().disablePlugin(AuthMe.getInstance()); + if (!Settings.isStopEnabled) AuthMe.getInstance().getServer() + .getPluginManager().disablePlugin(AuthMe.getInstance()); return; - } catch (SQLException e) { + } catch (SQLException e) { ConsoleLogger.showError(e.getMessage()); if (Settings.isStopEnabled) { - ConsoleLogger.showError("Can't use MySQL... Please input correct MySQL informations ! SHUTDOWN..."); - AuthMe.getInstance().getServer().shutdown(); + ConsoleLogger + .showError("Can't use MySQL... Please input correct MySQL informations ! SHUTDOWN..."); + AuthMe.getInstance().getServer().shutdown(); } - if (!Settings.isStopEnabled) - AuthMe.getInstance().getServer().getPluginManager().disablePlugin(AuthMe.getInstance()); + if (!Settings.isStopEnabled) AuthMe.getInstance().getServer() + .getPluginManager().disablePlugin(AuthMe.getInstance()); return; - } catch (TimeoutException e) { + } catch (TimeoutException e) { ConsoleLogger.showError(e.getMessage()); if (Settings.isStopEnabled) { - ConsoleLogger.showError("Can't use MySQL... Please input correct MySQL informations ! SHUTDOWN..."); - AuthMe.getInstance().getServer().shutdown(); + ConsoleLogger + .showError("Can't use MySQL... Please input correct MySQL informations ! SHUTDOWN..."); + AuthMe.getInstance().getServer().shutdown(); } - if (!Settings.isStopEnabled) - AuthMe.getInstance().getServer().getPluginManager().disablePlugin(AuthMe.getInstance()); + if (!Settings.isStopEnabled) AuthMe.getInstance().getServer() + .getPluginManager().disablePlugin(AuthMe.getInstance()); return; - } + } } - private synchronized void connect() throws ClassNotFoundException, SQLException, TimeoutException { + private synchronized void connect() throws ClassNotFoundException, + SQLException, TimeoutException { Class.forName("com.mysql.jdbc.Driver"); ConsoleLogger.info("MySQL driver loaded"); MysqlConnectionPoolDataSource dataSource = new MysqlConnectionPoolDataSource(); @@ -118,19 +122,22 @@ public class MySQLThread extends Thread implements DataSource { con = makeSureConnectionIsReady(); st = con.createStatement(); st.executeUpdate("CREATE TABLE IF NOT EXISTS " + tableName + " (" - + columnID + " INTEGER AUTO_INCREMENT," - + columnName + " VARCHAR(255) NOT NULL UNIQUE," - + columnPassword + " VARCHAR(255) NOT NULL," - + columnIp + " VARCHAR(40) NOT NULL DEFAULT '127.0.0.1'," - + columnLastLogin + " BIGINT NOT NULL DEFAULT '" + System.currentTimeMillis() + "'," - + lastlocX + " DOUBLE NOT NULL DEFAULT '0.0'," - + lastlocY + " DOUBLE NOT NULL DEFAULT '0.0'," - + lastlocZ + " DOUBLE NOT NULL DEFAULT '0.0'," - + lastlocWorld + " VARCHAR(255) DEFAULT 'world'," - + columnEmail + " VARCHAR(255) DEFAULT 'your@email.com'," - + columnLogged + " SMALLINT NOT NULL DEFAULT '0'," - + "CONSTRAINT table_const_prim PRIMARY KEY (" + columnID + "));"); - rs = con.getMetaData().getColumns(null, null, tableName, columnPassword); + + columnID + " INTEGER AUTO_INCREMENT," + columnName + + " VARCHAR(255) NOT NULL UNIQUE," + columnPassword + + " VARCHAR(255) NOT NULL," + columnIp + + " VARCHAR(40) NOT NULL DEFAULT '127.0.0.1'," + + columnLastLogin + " BIGINT NOT NULL DEFAULT '" + + System.currentTimeMillis() + "'," + lastlocX + + " DOUBLE NOT NULL DEFAULT '0.0'," + lastlocY + + " DOUBLE NOT NULL DEFAULT '0.0'," + lastlocZ + + " DOUBLE NOT NULL DEFAULT '0.0'," + lastlocWorld + + " VARCHAR(255) DEFAULT 'world'," + columnEmail + + " VARCHAR(255) DEFAULT 'your@email.com'," + columnLogged + + " SMALLINT NOT NULL DEFAULT '0'," + + "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 " + columnPassword + " VARCHAR(255) NOT NULL;"); @@ -142,7 +149,8 @@ public class MySQLThread extends Thread implements DataSource { + columnIp + " VARCHAR(40) NOT NULL;"); } rs.close(); - rs = con.getMetaData().getColumns(null, null, tableName, columnLastLogin); + rs = con.getMetaData().getColumns(null, null, tableName, + columnLastLogin); if (!rs.next()) { st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + columnLastLogin + " BIGINT;"); @@ -150,28 +158,48 @@ public class MySQLThread extends Thread implements DataSource { rs.close(); rs = con.getMetaData().getColumns(null, null, tableName, lastlocX); if (!rs.next()) { - st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + lastlocX + " DOUBLE NOT NULL DEFAULT '0.0' AFTER " - + columnLastLogin +" , ADD " + lastlocY + " DOUBLE NOT NULL DEFAULT '0.0' AFTER " + lastlocX + " , ADD " + lastlocZ + " DOUBLE NOT NULL DEFAULT '0.0' AFTER " + lastlocY + ";"); + st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + + lastlocX + " DOUBLE NOT NULL DEFAULT '0.0' AFTER " + + columnLastLogin + " , ADD " + lastlocY + + " DOUBLE NOT NULL DEFAULT '0.0' AFTER " + lastlocX + + " , ADD " + lastlocZ + + " DOUBLE NOT NULL DEFAULT '0.0' AFTER " + lastlocY + + ";"); } rs.close(); - rs = con.getMetaData().getColumns(null, null, tableName, lastlocWorld); + rs = con.getMetaData().getColumns(null, null, tableName, + lastlocWorld); if (!rs.next()) { - st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + lastlocWorld + " VARCHAR(255) NOT NULL DEFAULT 'world' AFTER " + lastlocZ + ";"); + st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + + lastlocWorld + + " VARCHAR(255) NOT NULL DEFAULT 'world' AFTER " + + lastlocZ + ";"); } rs.close(); - rs = con.getMetaData().getColumns(null, null, tableName, columnEmail); + rs = con.getMetaData().getColumns(null, null, tableName, + columnEmail); if (!rs.next()) { - st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + columnEmail + " VARCHAR(255) DEFAULT 'your@email.com' AFTER " + lastlocWorld +";"); + st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + + columnEmail + + " VARCHAR(255) DEFAULT 'your@email.com' AFTER " + + lastlocWorld + ";"); } rs.close(); - rs = con.getMetaData().getColumns(null, null, tableName, columnLogged); + rs = con.getMetaData().getColumns(null, null, tableName, + columnLogged); if (!rs.next()) { - st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + columnLogged + " SMALLINT NOT NULL DEFAULT '0' AFTER " + columnEmail +";"); + st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + + columnLogged + + " SMALLINT NOT NULL DEFAULT '0' AFTER " + columnEmail + + ";"); } rs.close(); rs = con.getMetaData().getColumns(null, null, tableName, lastlocX); if (rs.next()) { - st.executeUpdate("ALTER TABLE " + tableName + " MODIFY " + lastlocX + " DOUBLE NOT NULL DEFAULT '0.0', MODIFY " + lastlocY + " DOUBLE NOT NULL DEFAULT '0.0', MODIFY " + lastlocZ + " DOUBLE NOT NULL DEFAULT '0.0';"); + st.executeUpdate("ALTER TABLE " + tableName + " MODIFY " + + lastlocX + " DOUBLE NOT NULL DEFAULT '0.0', MODIFY " + + lastlocY + " DOUBLE NOT NULL DEFAULT '0.0', MODIFY " + + lastlocZ + " DOUBLE NOT NULL DEFAULT '0.0';"); } } finally { close(rs); @@ -188,8 +216,8 @@ public class MySQLThread extends Thread implements DataSource { try { con = makeSureConnectionIsReady(); pst = con.prepareStatement("SELECT * FROM " + tableName + " WHERE " - + columnName + "=?;"); - + + columnName + "=?;"); + pst.setString(1, user); rs = pst.executeQuery(); return rs.next(); @@ -220,21 +248,56 @@ public class MySQLThread extends Thread implements DataSource { pst.setString(1, user); rs = pst.executeQuery(); if (rs.next()) { - id = rs.getInt(columnID); - if (rs.getString(columnIp).isEmpty() && rs.getString(columnIp) != null) { - pAuth = new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword), "198.18.0.1", rs.getLong(columnLastLogin), rs.getDouble(lastlocX), rs.getDouble(lastlocY), rs.getDouble(lastlocZ), rs.getString(lastlocWorld),rs.getString(columnEmail), API.getPlayerRealName(rs.getString(columnName))); + id = rs.getInt(columnID); + if (rs.getString(columnIp).isEmpty() + && rs.getString(columnIp) != null) { + pAuth = new PlayerAuth(rs.getString(columnName), + rs.getString(columnPassword), "198.18.0.1", + rs.getLong(columnLastLogin), + rs.getDouble(lastlocX), rs.getDouble(lastlocY), + rs.getDouble(lastlocZ), rs.getString(lastlocWorld), + rs.getString(columnEmail), API.getPlayerRealName(rs + .getString(columnName))); } else { - if(!columnSalt.isEmpty()){ - if(!columnGroup.isEmpty()) - pAuth = new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword),rs.getString(columnSalt), rs.getInt(columnGroup), rs.getString(columnIp), rs.getLong(columnLastLogin), rs.getDouble(lastlocX), rs.getDouble(lastlocY), rs.getDouble(lastlocZ), rs.getString(lastlocWorld), rs.getString(columnEmail), API.getPlayerRealName(rs.getString(columnName))); - else pAuth = new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword),rs.getString(columnSalt), rs.getString(columnIp), rs.getLong(columnLastLogin), rs.getDouble(lastlocX), rs.getDouble(lastlocY), rs.getDouble(lastlocZ), rs.getString(lastlocWorld),rs.getString(columnEmail), API.getPlayerRealName(rs.getString(columnName))); - } else { - pAuth = new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword), rs.getString(columnIp), rs.getLong(columnLastLogin), rs.getDouble(lastlocX), rs.getDouble(lastlocY), rs.getDouble(lastlocZ), rs.getString(lastlocWorld), rs.getString(columnEmail), API.getPlayerRealName(rs.getString(columnName))); - } - } + if (!columnSalt.isEmpty()) { + if (!columnGroup.isEmpty()) pAuth = new PlayerAuth( + rs.getString(columnName), + rs.getString(columnPassword), + rs.getString(columnSalt), + rs.getInt(columnGroup), rs.getString(columnIp), + rs.getLong(columnLastLogin), + rs.getDouble(lastlocX), rs.getDouble(lastlocY), + rs.getDouble(lastlocZ), + rs.getString(lastlocWorld), + rs.getString(columnEmail), + API.getPlayerRealName(rs.getString(columnName))); + else pAuth = new PlayerAuth(rs.getString(columnName), + rs.getString(columnPassword), + rs.getString(columnSalt), + rs.getString(columnIp), + rs.getLong(columnLastLogin), + rs.getDouble(lastlocX), rs.getDouble(lastlocY), + rs.getDouble(lastlocZ), + rs.getString(lastlocWorld), + rs.getString(columnEmail), + API.getPlayerRealName(rs.getString(columnName))); + } else { + pAuth = new PlayerAuth(rs.getString(columnName), + rs.getString(columnPassword), + rs.getString(columnIp), + rs.getLong(columnLastLogin), + rs.getDouble(lastlocX), rs.getDouble(lastlocY), + rs.getDouble(lastlocZ), + rs.getString(lastlocWorld), + rs.getString(columnEmail), + API.getPlayerRealName(rs.getString(columnName))); + } + } if (Settings.getPasswordHash == HashAlgorithm.XENFORO) { rs.close(); - pst = con.prepareStatement("SELECT * FROM xf_user_authenticate WHERE " + columnID + "=?;"); + pst = con + .prepareStatement("SELECT * FROM xf_user_authenticate WHERE " + + columnID + "=?;"); pst.setInt(1, id); rs = pst.executeQuery(); if (rs.next()) { @@ -266,15 +329,21 @@ public class MySQLThread extends Thread implements DataSource { PreparedStatement pst = null; try { con = makeSureConnectionIsReady(); - if ((columnSalt == null || columnSalt.isEmpty()) || (auth.getSalt() == null || auth.getSalt().isEmpty())) { - pst = con.prepareStatement("INSERT INTO " + tableName + "(" + columnName + "," + columnPassword + "," + columnIp + "," + columnLastLogin + ") VALUES (?,?,?,?);"); + if ((columnSalt == null || columnSalt.isEmpty()) + || (auth.getSalt() == null || auth.getSalt().isEmpty())) { + pst = con.prepareStatement("INSERT INTO " + tableName + "(" + + columnName + "," + columnPassword + "," + columnIp + + "," + columnLastLogin + ") VALUES (?,?,?,?);"); pst.setString(1, auth.getNickname()); pst.setString(2, auth.getHash()); pst.setString(3, auth.getIp()); pst.setLong(4, auth.getLastLogin()); pst.executeUpdate(); } else { - pst = con.prepareStatement("INSERT INTO " + tableName + "(" + columnName + "," + columnPassword + "," + columnIp + "," + columnLastLogin + "," + columnSalt + ") VALUES (?,?,?,?,?);"); + pst = con.prepareStatement("INSERT INTO " + tableName + "(" + + columnName + "," + columnPassword + "," + columnIp + + "," + columnLastLogin + "," + columnSalt + + ") VALUES (?,?,?,?,?);"); pst.setString(1, auth.getNickname()); pst.setString(2, auth.getHash()); pst.setString(3, auth.getIp()); @@ -283,139 +352,189 @@ public class MySQLThread extends Thread implements DataSource { pst.executeUpdate(); } if (!columnOthers.isEmpty()) { - for(String column : columnOthers) { - pst = con.prepareStatement("UPDATE " + tableName + " SET " + column + "=? WHERE " + columnName + "=?;"); + for (String column : columnOthers) { + pst = con.prepareStatement("UPDATE " + tableName + " SET " + + column + "=? WHERE " + columnName + "=?;"); pst.setString(1, auth.getRealname()); pst.setString(2, auth.getNickname()); pst.executeUpdate(); - } + } } if (Settings.getPasswordHash == HashAlgorithm.PHPBB) { - int id; + int id; ResultSet rs = null; - pst = con.prepareStatement("SELECT * FROM " + tableName + " WHERE " + columnName + "=?;"); + pst = con.prepareStatement("SELECT * FROM " + tableName + + " WHERE " + columnName + "=?;"); pst.setString(1, auth.getNickname()); rs = pst.executeQuery(); if (rs.next()) { - id = rs.getInt(columnID); - // Insert player in phpbb_user_group - pst = con.prepareStatement("INSERT INTO " + Settings.getPhpbbPrefix + "user_group (group_id, user_id, group_leader, user_pending) VALUES (?,?,?,?);"); - pst.setInt(1, Settings.getPhpbbGroup); - pst.setInt(2, id); - pst.setInt(3, 0); - pst.setInt(4, 0); - pst.executeUpdate(); - // Update player group in phpbb_users - pst = con.prepareStatement("UPDATE " + tableName + " SET " + tableName + ".group_id=? WHERE " + columnName + "=?;"); + id = rs.getInt(columnID); + // Insert player in phpbb_user_group + pst = con + .prepareStatement("INSERT INTO " + + Settings.getPhpbbPrefix + + "user_group (group_id, user_id, group_leader, user_pending) VALUES (?,?,?,?);"); + pst.setInt(1, Settings.getPhpbbGroup); + pst.setInt(2, id); + pst.setInt(3, 0); + pst.setInt(4, 0); + pst.executeUpdate(); + // Update player group in phpbb_users + pst = con.prepareStatement("UPDATE " + tableName + " SET " + + tableName + ".group_id=? WHERE " + columnName + + "=?;"); pst.setInt(1, Settings.getPhpbbGroup); pst.setString(2, auth.getNickname()); pst.executeUpdate(); // Get current time without ms - long time = System.currentTimeMillis()/1000; + long time = System.currentTimeMillis() / 1000; // Update user_regdate - pst = con.prepareStatement("UPDATE " + tableName + " SET " + tableName + ".user_regdate=? WHERE " + columnName + "=?;"); + pst = con.prepareStatement("UPDATE " + tableName + " SET " + + tableName + ".user_regdate=? WHERE " + columnName + + "=?;"); pst.setLong(1, time); pst.setString(2, auth.getNickname()); pst.executeUpdate(); // Update user_lastvisit - pst = con.prepareStatement("UPDATE " + tableName + " SET " + tableName + ".user_lastvisit=? WHERE " + columnName + "=?;"); + pst = con.prepareStatement("UPDATE " + tableName + " SET " + + tableName + ".user_lastvisit=? WHERE " + + columnName + "=?;"); pst.setLong(1, time); pst.setString(2, auth.getNickname()); pst.executeUpdate(); } } if (Settings.getPasswordHash == HashAlgorithm.WORDPRESS) { - int id; + int id; ResultSet rs = null; - pst = con.prepareStatement("SELECT * FROM " + tableName + " WHERE " + columnName + "=?;"); + pst = con.prepareStatement("SELECT * FROM " + tableName + + " WHERE " + columnName + "=?;"); pst.setString(1, auth.getNickname()); rs = pst.executeQuery(); if (rs.next()) { - id = rs.getInt(columnID); - // First Name - pst = con.prepareStatement("INSERT INTO " + Settings.getWordPressPrefix + "usermeta (user_id, meta_key, meta_value) VALUES (?,?,?);"); - pst.setInt(1, id); - pst.setString(2, "first_name"); - pst.setString(3, ""); - pst.executeUpdate(); - // Last Name - pst = con.prepareStatement("INSERT INTO " + Settings.getWordPressPrefix + "usermeta (user_id, meta_key, meta_value) VALUES (?,?,?);"); - pst.setInt(1, id); - pst.setString(2, "last_name"); - pst.setString(3, ""); - pst.executeUpdate(); - // Nick Name - pst = con.prepareStatement("INSERT INTO " + Settings.getWordPressPrefix + "usermeta (user_id, meta_key, meta_value) VALUES (?,?,?);"); - pst.setInt(1, id); - pst.setString(2, "nickname"); - pst.setString(3, auth.getNickname()); - pst.executeUpdate(); - // Description - pst = con.prepareStatement("INSERT INTO " + Settings.getWordPressPrefix + "usermeta (user_id, meta_key, meta_value) VALUES (?,?,?);"); - pst.setInt(1, id); - pst.setString(2, "description"); - pst.setString(3, ""); - pst.executeUpdate(); - // Rich_Editing - pst = con.prepareStatement("INSERT INTO " + Settings.getWordPressPrefix + "usermeta (user_id, meta_key, meta_value) VALUES (?,?,?);"); - pst.setInt(1, id); - pst.setString(2, "rich_editing"); - pst.setString(3, "true"); - pst.executeUpdate(); - // Comments_Shortcuts - pst = con.prepareStatement("INSERT INTO " + Settings.getWordPressPrefix + "usermeta (user_id, meta_key, meta_value) VALUES (?,?,?);"); - pst.setInt(1, id); - pst.setString(2, "comment_shortcuts"); - pst.setString(3, "false"); - pst.executeUpdate(); - // admin_color - pst = con.prepareStatement("INSERT INTO " + Settings.getWordPressPrefix + "usermeta (user_id, meta_key, meta_value) VALUES (?,?,?);"); - pst.setInt(1, id); - pst.setString(2, "admin_color"); - pst.setString(3, "fresh"); - pst.executeUpdate(); - // use_ssl - pst = con.prepareStatement("INSERT INTO " + Settings.getWordPressPrefix + "usermeta (user_id, meta_key, meta_value) VALUES (?,?,?);"); - pst.setInt(1, id); - pst.setString(2, "use_ssl"); - pst.setString(3, "0"); - pst.executeUpdate(); - // show_admin_bar_front - pst = con.prepareStatement("INSERT INTO " + Settings.getWordPressPrefix + "usermeta (user_id, meta_key, meta_value) VALUES (?,?,?);"); - pst.setInt(1, id); - pst.setString(2, "show_admin_bar_front"); - pst.setString(3, "true"); - pst.executeUpdate(); - // wp_capabilities - pst = con.prepareStatement("INSERT INTO " + Settings.getWordPressPrefix + "usermeta (user_id, meta_key, meta_value) VALUES (?,?,?);"); - pst.setInt(1, id); - pst.setString(2, "wp_capabilities"); - pst.setString(3, "a:1:{s:10:\"subscriber\";b:1;}"); - pst.executeUpdate(); - // wp_user_level - pst = con.prepareStatement("INSERT INTO " + Settings.getWordPressPrefix + "usermeta (user_id, meta_key, meta_value) VALUES (?,?,?);"); - pst.setInt(1, id); - pst.setString(2, "wp_user_level"); - pst.setString(3, "0"); - pst.executeUpdate(); - // default_password_nag - pst = con.prepareStatement("INSERT INTO " + Settings.getWordPressPrefix + "usermeta (user_id, meta_key, meta_value) VALUES (?,?,?);"); - pst.setInt(1, id); - pst.setString(2, "default_password_nag"); - pst.setString(3, ""); - pst.executeUpdate(); + id = rs.getInt(columnID); + // First Name + pst = con + .prepareStatement("INSERT INTO " + + Settings.getWordPressPrefix + + "usermeta (user_id, meta_key, meta_value) VALUES (?,?,?);"); + pst.setInt(1, id); + pst.setString(2, "first_name"); + pst.setString(3, ""); + pst.executeUpdate(); + // Last Name + pst = con + .prepareStatement("INSERT INTO " + + Settings.getWordPressPrefix + + "usermeta (user_id, meta_key, meta_value) VALUES (?,?,?);"); + pst.setInt(1, id); + pst.setString(2, "last_name"); + pst.setString(3, ""); + pst.executeUpdate(); + // Nick Name + pst = con + .prepareStatement("INSERT INTO " + + Settings.getWordPressPrefix + + "usermeta (user_id, meta_key, meta_value) VALUES (?,?,?);"); + pst.setInt(1, id); + pst.setString(2, "nickname"); + pst.setString(3, auth.getNickname()); + pst.executeUpdate(); + // Description + pst = con + .prepareStatement("INSERT INTO " + + Settings.getWordPressPrefix + + "usermeta (user_id, meta_key, meta_value) VALUES (?,?,?);"); + pst.setInt(1, id); + pst.setString(2, "description"); + pst.setString(3, ""); + pst.executeUpdate(); + // Rich_Editing + pst = con + .prepareStatement("INSERT INTO " + + Settings.getWordPressPrefix + + "usermeta (user_id, meta_key, meta_value) VALUES (?,?,?);"); + pst.setInt(1, id); + pst.setString(2, "rich_editing"); + pst.setString(3, "true"); + pst.executeUpdate(); + // Comments_Shortcuts + pst = con + .prepareStatement("INSERT INTO " + + Settings.getWordPressPrefix + + "usermeta (user_id, meta_key, meta_value) VALUES (?,?,?);"); + pst.setInt(1, id); + pst.setString(2, "comment_shortcuts"); + pst.setString(3, "false"); + pst.executeUpdate(); + // admin_color + pst = con + .prepareStatement("INSERT INTO " + + Settings.getWordPressPrefix + + "usermeta (user_id, meta_key, meta_value) VALUES (?,?,?);"); + pst.setInt(1, id); + pst.setString(2, "admin_color"); + pst.setString(3, "fresh"); + pst.executeUpdate(); + // use_ssl + pst = con + .prepareStatement("INSERT INTO " + + Settings.getWordPressPrefix + + "usermeta (user_id, meta_key, meta_value) VALUES (?,?,?);"); + pst.setInt(1, id); + pst.setString(2, "use_ssl"); + pst.setString(3, "0"); + pst.executeUpdate(); + // show_admin_bar_front + pst = con + .prepareStatement("INSERT INTO " + + Settings.getWordPressPrefix + + "usermeta (user_id, meta_key, meta_value) VALUES (?,?,?);"); + pst.setInt(1, id); + pst.setString(2, "show_admin_bar_front"); + pst.setString(3, "true"); + pst.executeUpdate(); + // wp_capabilities + pst = con + .prepareStatement("INSERT INTO " + + Settings.getWordPressPrefix + + "usermeta (user_id, meta_key, meta_value) VALUES (?,?,?);"); + pst.setInt(1, id); + pst.setString(2, "wp_capabilities"); + pst.setString(3, "a:1:{s:10:\"subscriber\";b:1;}"); + pst.executeUpdate(); + // wp_user_level + pst = con + .prepareStatement("INSERT INTO " + + Settings.getWordPressPrefix + + "usermeta (user_id, meta_key, meta_value) VALUES (?,?,?);"); + pst.setInt(1, id); + pst.setString(2, "wp_user_level"); + pst.setString(3, "0"); + pst.executeUpdate(); + // default_password_nag + pst = con + .prepareStatement("INSERT INTO " + + Settings.getWordPressPrefix + + "usermeta (user_id, meta_key, meta_value) VALUES (?,?,?);"); + pst.setInt(1, id); + pst.setString(2, "default_password_nag"); + pst.setString(3, ""); + pst.executeUpdate(); } } if (Settings.getPasswordHash == HashAlgorithm.XENFORO) { int id; ResultSet rs = null; - pst = con.prepareStatement("SELECT * FROM " + tableName + " WHERE " + columnName + "=?;"); + pst = con.prepareStatement("SELECT * FROM " + tableName + + " WHERE " + columnName + "=?;"); pst.setString(1, auth.getNickname()); rs = pst.executeQuery(); if (rs.next()) { id = rs.getInt(columnID); // Insert password in the correct table - pst = con.prepareStatement("INSERT INTO xf_user_authenticate (user_id, scheme_class, data) VALUES (?,?,?);"); + pst = con + .prepareStatement("INSERT INTO xf_user_authenticate (user_id, scheme_class, data) VALUES (?,?,?);"); pst.setInt(1, id); pst.setString(2, "XenForo_Authentication_Core12"); byte[] bytes = auth.getHash().getBytes(); @@ -444,28 +563,34 @@ public class MySQLThread extends Thread implements DataSource { PreparedStatement pst = null; try { con = makeSureConnectionIsReady(); - pst = con.prepareStatement("UPDATE " + tableName + " SET " + columnPassword + "=? WHERE " + columnName + "=?;"); + pst = con.prepareStatement("UPDATE " + tableName + " SET " + + columnPassword + "=? WHERE " + columnName + "=?;"); pst.setString(1, auth.getHash()); pst.setString(2, auth.getNickname()); pst.executeUpdate(); if (Settings.getPasswordHash == HashAlgorithm.XENFORO) { - int id; + int id; ResultSet rs = null; - pst = con.prepareStatement("SELECT * FROM " + tableName + " WHERE " + columnName + "=?;"); + pst = con.prepareStatement("SELECT * FROM " + tableName + + " WHERE " + columnName + "=?;"); pst.setString(1, auth.getNickname()); rs = pst.executeQuery(); if (rs.next()) { - id = rs.getInt(columnID); - // Insert password in the correct table - pst = con.prepareStatement("UPDATE xf_user_authenticate SET data=? WHERE " + columnID + "=?;"); + id = rs.getInt(columnID); + // Insert password in the correct table + pst = con + .prepareStatement("UPDATE xf_user_authenticate SET data=? WHERE " + + columnID + "=?;"); byte[] bytes = auth.getHash().getBytes(); Blob blob = con.createBlob(); blob.setBytes(1, bytes); pst.setBlob(1, blob); - pst.setInt(2, id); - pst.executeUpdate(); - pst = con.prepareStatement("UPDATE xf_user_authenticate SET scheme_class=? WHERE " + columnID + "=?;"); - pst.setString(1, "XenForo_Authentication_Core12"); + pst.setInt(2, id); + pst.executeUpdate(); + pst = con + .prepareStatement("UPDATE xf_user_authenticate SET scheme_class=? WHERE " + + columnID + "=?;"); + pst.setString(1, "XenForo_Authentication_Core12"); pst.setInt(2, id); pst.executeUpdate(); } @@ -489,7 +614,9 @@ public class MySQLThread extends Thread implements DataSource { PreparedStatement pst = null; try { con = makeSureConnectionIsReady(); - pst = con.prepareStatement("UPDATE " + tableName + " SET " + columnIp + "=?, " + columnLastLogin + "=? WHERE " + columnName + "=?;"); + pst = con.prepareStatement("UPDATE " + tableName + " SET " + + columnIp + "=?, " + columnLastLogin + "=? WHERE " + + columnName + "=?;"); pst.setString(1, auth.getIp()); pst.setLong(2, auth.getLastLogin()); pst.setString(3, auth.getNickname()); @@ -513,7 +640,8 @@ public class MySQLThread extends Thread implements DataSource { PreparedStatement pst = null; try { con = makeSureConnectionIsReady(); - pst = con.prepareStatement("DELETE FROM " + tableName + " WHERE " + columnLastLogin + " list = new ArrayList(); try { con = makeSureConnectionIsReady(); - pst = con.prepareStatement("SELECT * FROM " + tableName + " WHERE " + columnLastLogin + "(); } finally { - close(rs); + close(rs); close(pst); close(con); } @@ -566,19 +696,23 @@ public class MySQLThread extends Thread implements DataSource { try { con = makeSureConnectionIsReady(); if (Settings.getPasswordHash == HashAlgorithm.XENFORO) { - int id; + int id; ResultSet rs = null; - pst = con.prepareStatement("SELECT * FROM " + tableName + " WHERE " + columnName + "=?;"); + pst = con.prepareStatement("SELECT * FROM " + tableName + + " WHERE " + columnName + "=?;"); pst.setString(1, user); rs = pst.executeQuery(); if (rs.next()) { - id = rs.getInt(columnID); - // Remove data - pst = con.prepareStatement("DELETE FROM xf_user_authenticate WHERE " + columnID + "=?;"); - pst.setInt(1, id); + id = rs.getInt(columnID); + // Remove data + pst = con + .prepareStatement("DELETE FROM xf_user_authenticate WHERE " + + columnID + "=?;"); + pst.setInt(1, id); } } - pst = con.prepareStatement("DELETE FROM " + tableName + " WHERE " + columnName + "=?;"); + pst = con.prepareStatement("DELETE FROM " + tableName + " WHERE " + + columnName + "=?;"); pst.setString(1, user); pst.executeUpdate(); } catch (SQLException ex) { @@ -600,7 +734,9 @@ public class MySQLThread extends Thread implements DataSource { PreparedStatement pst = null; try { con = makeSureConnectionIsReady(); - pst = con.prepareStatement("UPDATE " + tableName + " SET "+ lastlocX + " =?, "+ lastlocY +"=?, "+ lastlocZ +"=?, " + lastlocWorld + "=? WHERE " + columnName + "=?;"); + pst = con.prepareStatement("UPDATE " + tableName + " SET " + + lastlocX + " =?, " + lastlocY + "=?, " + lastlocZ + + "=?, " + lastlocWorld + "=? WHERE " + columnName + "=?;"); pst.setDouble(1, auth.getQuitLocX()); pst.setDouble(2, auth.getQuitLocY()); pst.setDouble(3, auth.getQuitLocZ()); @@ -625,17 +761,17 @@ public class MySQLThread extends Thread implements DataSource { Connection con = null; PreparedStatement pst = null; ResultSet rs = null; - int countIp=0; + int countIp = 0; try { con = makeSureConnectionIsReady(); pst = con.prepareStatement("SELECT * FROM " + tableName + " WHERE " + columnIp + "=?;"); pst.setString(1, ip); rs = pst.executeQuery(); - while(rs.next()) { - countIp++; - } - return countIp; + while (rs.next()) { + countIp++; + } + return countIp; } catch (SQLException ex) { ConsoleLogger.showError(ex.getMessage()); return 0; @@ -646,7 +782,7 @@ public class MySQLThread extends Thread implements DataSource { close(rs); close(pst); close(con); - } + } } @Override @@ -655,7 +791,8 @@ public class MySQLThread extends Thread implements DataSource { PreparedStatement pst = null; try { con = makeSureConnectionIsReady(); - pst = con.prepareStatement("UPDATE " + tableName + " SET "+ columnEmail + " =? WHERE " + columnName + "=?;"); + pst = con.prepareStatement("UPDATE " + tableName + " SET " + + columnEmail + " =? WHERE " + columnName + "=?;"); pst.setString(1, auth.getEmail()); pst.setString(2, auth.getNickname()); pst.executeUpdate(); @@ -673,15 +810,16 @@ public class MySQLThread extends Thread implements DataSource { } @Override - public synchronized boolean updateSalt(PlayerAuth auth) { - if (columnSalt.isEmpty()) { - return false; - } + public synchronized boolean updateSalt(PlayerAuth auth) { + if (columnSalt.isEmpty()) { + return false; + } Connection con = null; PreparedStatement pst = null; try { con = makeSureConnectionIsReady(); - pst = con.prepareStatement("UPDATE " + tableName + " SET "+ columnSalt + " =? WHERE " + columnName + "=?;"); + pst = con.prepareStatement("UPDATE " + tableName + " SET " + + columnSalt + " =? WHERE " + columnName + "=?;"); pst.setString(1, auth.getSalt()); pst.setString(2, auth.getNickname()); pst.executeUpdate(); @@ -709,17 +847,18 @@ public class MySQLThread extends Thread implements DataSource { @Override public void reload() { - try { - reconnect(true); - } catch (Exception e) { + try { + reconnect(true); + } catch (Exception e) { ConsoleLogger.showError(e.getMessage()); if (Settings.isStopEnabled) { - ConsoleLogger.showError("Can't reconnect to MySQL database... Please check your MySQL informations ! SHUTDOWN..."); - AuthMe.getInstance().getServer().shutdown(); + ConsoleLogger + .showError("Can't reconnect to MySQL database... Please check your MySQL informations ! SHUTDOWN..."); + AuthMe.getInstance().getServer().shutdown(); } - if (!Settings.isStopEnabled) - AuthMe.getInstance().getServer().getPluginManager().disablePlugin(AuthMe.getInstance()); - } + if (!Settings.isStopEnabled) AuthMe.getInstance().getServer() + .getPluginManager().disablePlugin(AuthMe.getInstance()); + } } private void close(Statement st) { @@ -753,7 +892,7 @@ public class MySQLThread extends Thread implements DataSource { } @Override - public synchronized List getAllAuthsByName(PlayerAuth auth) { + public synchronized List getAllAuthsByName(PlayerAuth auth) { Connection con = null; PreparedStatement pst = null; ResultSet rs = null; @@ -764,10 +903,10 @@ public class MySQLThread extends Thread implements DataSource { + columnIp + "=?;"); pst.setString(1, auth.getIp()); rs = pst.executeQuery(); - while(rs.next()) { - countIp.add(rs.getString(columnName)); - } - return countIp; + while (rs.next()) { + countIp.add(rs.getString(columnName)); + } + return countIp; } catch (SQLException ex) { ConsoleLogger.showError(ex.getMessage()); return new ArrayList(); @@ -778,11 +917,11 @@ public class MySQLThread extends Thread implements DataSource { close(rs); close(pst); close(con); - } - } + } + } @Override - public synchronized List getAllAuthsByIp(String ip) { + public synchronized List getAllAuthsByIp(String ip) { Connection con = null; PreparedStatement pst = null; ResultSet rs = null; @@ -793,10 +932,10 @@ public class MySQLThread extends Thread implements DataSource { + columnIp + "=?;"); pst.setString(1, ip); rs = pst.executeQuery(); - while(rs.next()) { - countIp.add(rs.getString(columnName)); - } - return countIp; + while (rs.next()) { + countIp.add(rs.getString(columnName)); + } + return countIp; } catch (SQLException ex) { ConsoleLogger.showError(ex.getMessage()); return new ArrayList(); @@ -807,11 +946,11 @@ public class MySQLThread extends Thread implements DataSource { close(rs); close(pst); close(con); - } - } + } + } @Override - public synchronized List getAllAuthsByEmail(String email) { + public synchronized List getAllAuthsByEmail(String email) { Connection con = null; PreparedStatement pst = null; ResultSet rs = null; @@ -822,10 +961,10 @@ public class MySQLThread extends Thread implements DataSource { + columnEmail + "=?;"); pst.setString(1, email); rs = pst.executeQuery(); - while(rs.next()) { - countEmail.add(rs.getString(columnName)); - } - return countEmail; + while (rs.next()) { + countEmail.add(rs.getString(columnName)); + } + return countEmail; } catch (SQLException ex) { ConsoleLogger.showError(ex.getMessage()); return new ArrayList(); @@ -836,69 +975,73 @@ public class MySQLThread extends Thread implements DataSource { close(rs); close(pst); close(con); - } - } + } + } @Override - public synchronized void purgeBanned(List banned) { + public synchronized void purgeBanned(List banned) { Connection con = null; PreparedStatement pst = null; try { - for (String name : banned) { - con = makeSureConnectionIsReady(); - pst = con.prepareStatement("DELETE FROM " + tableName + " WHERE " + columnName + "=?;"); - pst.setString(1, name); - pst.executeUpdate(); - } + for (String name : banned) { + con = makeSureConnectionIsReady(); + 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); } - } - - private synchronized Connection makeSureConnectionIsReady() { - Connection con = null; - try { - con = conPool.getValidConnection(); - } catch (Exception te) { - try { - con = null; - reconnect(false); - } catch (Exception e) { - ConsoleLogger.showError(e.getMessage()); - if (Settings.isStopEnabled) { - ConsoleLogger.showError("Can't reconnect to MySQL database... Please check your MySQL informations ! SHUTDOWN..."); - AuthMe.getInstance().getServer().shutdown(); - } - if (!Settings.isStopEnabled) - AuthMe.getInstance().getServer().getPluginManager().disablePlugin(AuthMe.getInstance()); - } - } catch (AssertionError ae) { - // Make sure assertionerror is caused by the connectionpoolmanager, else re-throw it - if (!ae.getMessage().equalsIgnoreCase("AuthMeDatabaseError")) - throw new AssertionError(ae.getMessage()); - try { - con = null; - reconnect(false); - } catch (Exception e) { - ConsoleLogger.showError(e.getMessage()); - if (Settings.isStopEnabled) { - ConsoleLogger.showError("Can't reconnect to MySQL database... Please check your MySQL informations ! SHUTDOWN..."); - AuthMe.getInstance().getServer().shutdown(); - } - if (!Settings.isStopEnabled) - AuthMe.getInstance().getServer().getPluginManager().disablePlugin(AuthMe.getInstance()); - } - } - if (con == null) - con = conPool.getValidConnection(); - return con; } - private synchronized void reconnect(boolean reload) throws ClassNotFoundException, SQLException, TimeoutException { - conPool.dispose(); + private synchronized Connection makeSureConnectionIsReady() { + Connection con = null; + try { + con = conPool.getValidConnection(); + } catch (Exception te) { + try { + con = null; + reconnect(false); + } catch (Exception e) { + ConsoleLogger.showError(e.getMessage()); + if (Settings.isStopEnabled) { + ConsoleLogger + .showError("Can't reconnect to MySQL database... Please check your MySQL informations ! SHUTDOWN..."); + AuthMe.getInstance().getServer().shutdown(); + } + if (!Settings.isStopEnabled) AuthMe.getInstance().getServer() + .getPluginManager().disablePlugin(AuthMe.getInstance()); + } + } catch (AssertionError ae) { + // Make sure assertionerror is caused by the connectionpoolmanager, + // else re-throw it + if (!ae.getMessage().equalsIgnoreCase("AuthMeDatabaseError")) throw new AssertionError( + ae.getMessage()); + try { + con = null; + reconnect(false); + } catch (Exception e) { + ConsoleLogger.showError(e.getMessage()); + if (Settings.isStopEnabled) { + ConsoleLogger + .showError("Can't reconnect to MySQL database... Please check your MySQL informations ! SHUTDOWN..."); + AuthMe.getInstance().getServer().shutdown(); + } + if (!Settings.isStopEnabled) AuthMe.getInstance().getServer() + .getPluginManager().disablePlugin(AuthMe.getInstance()); + } + } + if (con == null) con = conPool.getValidConnection(); + return con; + } + + private synchronized void reconnect(boolean reload) + throws ClassNotFoundException, SQLException, TimeoutException { + conPool.dispose(); Class.forName("com.mysql.jdbc.Driver"); MysqlConnectionPoolDataSource dataSource = new MysqlConnectionPoolDataSource(); dataSource.setDatabaseName(database); @@ -907,17 +1050,17 @@ public class MySQLThread extends Thread implements DataSource { dataSource.setUser(username); dataSource.setPassword(password); conPool = new MiniConnectionPoolManager(dataSource, 10); - if (!reload) - ConsoleLogger.info("ConnectionPool was unavailable... Reconnected!"); + if (!reload) ConsoleLogger + .info("ConnectionPool was unavailable... Reconnected!"); } - @Override - public DataSourceType getType() { - return DataSourceType.MYSQL; - } + @Override + public DataSourceType getType() { + return DataSourceType.MYSQL; + } - @Override - public boolean isLogged(String user) { + @Override + public boolean isLogged(String user) { Connection con = null; PreparedStatement pst = null; ResultSet rs = null; @@ -927,8 +1070,7 @@ public class MySQLThread extends Thread implements DataSource { + columnName + "=?;"); pst.setString(1, user); rs = pst.executeQuery(); - if (rs.next()) - return (rs.getInt(columnLogged) == 1); + if (rs.next()) return (rs.getInt(columnLogged) == 1); } catch (SQLException ex) { ConsoleLogger.showError(ex.getMessage()); return false; @@ -941,15 +1083,16 @@ public class MySQLThread extends Thread implements DataSource { close(con); } return false; - } + } - @Override - public void setLogged(String user) { + @Override + public void setLogged(String user) { Connection con = null; PreparedStatement pst = null; try { con = makeSureConnectionIsReady(); - pst = con.prepareStatement("UPDATE " + tableName + " SET " + columnLogged + "=? WHERE " + columnName + "=?;"); + pst = con.prepareStatement("UPDATE " + tableName + " SET " + + columnLogged + "=? WHERE " + columnName + "=?;"); pst.setInt(1, 1); pst.setString(2, user); pst.executeUpdate(); @@ -964,15 +1107,16 @@ public class MySQLThread extends Thread implements DataSource { close(con); } return; - } + } - @Override - public void setUnlogged(String user) { + @Override + public void setUnlogged(String user) { Connection con = null; PreparedStatement pst = null; try { con = makeSureConnectionIsReady(); - pst = con.prepareStatement("UPDATE " + tableName + " SET " + columnLogged + "=? WHERE " + columnName + "=?;"); + pst = con.prepareStatement("UPDATE " + tableName + " SET " + + columnLogged + "=? WHERE " + columnName + "=?;"); pst.setInt(1, 0); pst.setString(2, user); pst.executeUpdate(); @@ -987,15 +1131,16 @@ public class MySQLThread extends Thread implements DataSource { close(con); } return; - } + } - @Override - public void purgeLogged() { + @Override + public void purgeLogged() { Connection con = null; PreparedStatement pst = null; try { con = makeSureConnectionIsReady(); - pst = con.prepareStatement("UPDATE " + tableName + " SET " + columnLogged + "=? WHERE " + columnLogged + "=?;"); + pst = con.prepareStatement("UPDATE " + tableName + " SET " + + columnLogged + "=? WHERE " + columnLogged + "=?;"); pst.setInt(1, 0); pst.setInt(2, 1); pst.executeUpdate(); @@ -1010,6 +1155,6 @@ public class MySQLThread extends Thread implements DataSource { close(con); } return; - } + } } diff --git a/src/main/java/fr/xephi/authme/datasource/SQLiteThread.java b/src/main/java/fr/xephi/authme/datasource/SQLiteThread.java index 6cecd953..ca2114d6 100644 --- a/src/main/java/fr/xephi/authme/datasource/SQLiteThread.java +++ b/src/main/java/fr/xephi/authme/datasource/SQLiteThread.java @@ -17,7 +17,6 @@ import fr.xephi.authme.datasource.MiniConnectionPoolManager.TimeoutException; import fr.xephi.authme.settings.PlayersLogs; import fr.xephi.authme.settings.Settings; - public class SQLiteThread extends Thread implements DataSource { private String database; @@ -53,33 +52,35 @@ public class SQLiteThread extends Thread implements DataSource { this.columnID = Settings.getMySQLColumnId; try { - this.connect(); - this.setup(); - } catch (ClassNotFoundException e) { + this.connect(); + this.setup(); + } catch (ClassNotFoundException e) { ConsoleLogger.showError(e.getMessage()); if (Settings.isStopEnabled) { - ConsoleLogger.showError("Can't use SQLITE... ! SHUTDOWN..."); - AuthMe.getInstance().getServer().shutdown(); + ConsoleLogger.showError("Can't use SQLITE... ! SHUTDOWN..."); + AuthMe.getInstance().getServer().shutdown(); } - if (!Settings.isStopEnabled) - AuthMe.getInstance().getServer().getPluginManager().disablePlugin(AuthMe.getInstance()); + if (!Settings.isStopEnabled) AuthMe.getInstance().getServer() + .getPluginManager().disablePlugin(AuthMe.getInstance()); return; - } catch (SQLException e) { + } catch (SQLException e) { ConsoleLogger.showError(e.getMessage()); if (Settings.isStopEnabled) { - ConsoleLogger.showError("Can't use SQLITE... ! SHUTDOWN..."); - AuthMe.getInstance().getServer().shutdown(); + ConsoleLogger.showError("Can't use SQLITE... ! SHUTDOWN..."); + AuthMe.getInstance().getServer().shutdown(); } - if (!Settings.isStopEnabled) - AuthMe.getInstance().getServer().getPluginManager().disablePlugin(AuthMe.getInstance()); + if (!Settings.isStopEnabled) AuthMe.getInstance().getServer() + .getPluginManager().disablePlugin(AuthMe.getInstance()); return; - } + } } - private synchronized void connect() throws ClassNotFoundException, SQLException { + 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"); + this.con = DriverManager.getConnection("jdbc:sqlite:plugins/AuthMe/" + + database + ".db"); } @@ -89,18 +90,19 @@ public class SQLiteThread extends Thread implements DataSource { try { st = con.createStatement(); st.executeUpdate("CREATE TABLE IF NOT EXISTS " + tableName + " (" - + columnID + " INTEGER AUTO_INCREMENT," - + columnName + " VARCHAR(255) NOT NULL UNIQUE," - + columnPassword + " VARCHAR(255) NOT NULL," - + columnIp + " VARCHAR(40) NOT NULL," - + columnLastLogin + " BIGINT," - + lastlocX + " DOUBLE NOT NULL DEFAULT '0.0'," - + lastlocY + " DOUBLE NOT NULL DEFAULT '0.0'," - + lastlocZ + " DOUBLE NOT NULL DEFAULT '0.0'," - + lastlocWorld + " VARCHAR(255) DEFAULT 'world'," - + columnEmail + " VARCHAR(255) DEFAULT 'your@email.com'," - + "CONSTRAINT table_const_prim PRIMARY KEY (" + columnID + "));"); - rs = con.getMetaData().getColumns(null, null, tableName, columnPassword); + + columnID + " INTEGER AUTO_INCREMENT," + columnName + + " VARCHAR(255) NOT NULL UNIQUE," + columnPassword + + " VARCHAR(255) NOT NULL," + columnIp + + " VARCHAR(40) NOT NULL," + columnLastLogin + " BIGINT," + + lastlocX + " DOUBLE NOT NULL DEFAULT '0.0'," + lastlocY + + " DOUBLE NOT NULL DEFAULT '0.0'," + lastlocZ + + " DOUBLE NOT NULL DEFAULT '0.0'," + lastlocWorld + + " VARCHAR(255) DEFAULT 'world'," + 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 " + columnPassword + " VARCHAR(255) NOT NULL;"); @@ -112,7 +114,8 @@ public class SQLiteThread extends Thread implements DataSource { + columnIp + " VARCHAR(40) NOT NULL;"); } rs.close(); - rs = con.getMetaData().getColumns(null, null, tableName, columnLastLogin); + rs = con.getMetaData().getColumns(null, null, tableName, + columnLastLogin); if (!rs.next()) { st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + columnLastLogin + " BIGINT;"); @@ -120,19 +123,28 @@ public class SQLiteThread extends Thread implements DataSource { rs.close(); rs = con.getMetaData().getColumns(null, null, tableName, lastlocX); if (!rs.next()) { - st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + lastlocX + " DOUBLE NOT NULL DEFAULT '0.0';"); - st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + lastlocY + " DOUBLE NOT NULL DEFAULT '0.0';"); - st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + lastlocZ + " DOUBLE NOT NULL DEFAULT '0.0';"); + st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + + lastlocX + " DOUBLE NOT NULL DEFAULT '0.0';"); + st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + + lastlocY + " DOUBLE NOT NULL DEFAULT '0.0';"); + st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + + lastlocZ + " DOUBLE NOT NULL DEFAULT '0.0';"); } rs.close(); - rs = con.getMetaData().getColumns(null, null, tableName, lastlocWorld); + rs = con.getMetaData().getColumns(null, null, tableName, + lastlocWorld); if (!rs.next()) { - st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + lastlocWorld + " VARCHAR(255) NOT NULL DEFAULT 'world';"); + st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + + lastlocWorld + + " VARCHAR(255) NOT NULL DEFAULT 'world';"); } rs.close(); - rs = con.getMetaData().getColumns(null, null, tableName, columnEmail); + rs = con.getMetaData().getColumns(null, null, tableName, + columnEmail); if (!rs.next()) { - st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + columnEmail + " VARCHAR(255) DEFAULT 'your@email.com';"); + st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + + columnEmail + + " VARCHAR(255) DEFAULT 'your@email.com';"); } } finally { close(rs); @@ -146,7 +158,8 @@ public class SQLiteThread extends Thread implements DataSource { PreparedStatement pst = null; ResultSet rs = null; try { - pst = con.prepareStatement("SELECT * FROM " + tableName + " WHERE " + columnName + "=?"); + pst = con.prepareStatement("SELECT * FROM " + tableName + " WHERE " + + columnName + "=?"); pst.setString(1, user); rs = pst.executeQuery(); return rs.next(); @@ -169,15 +182,38 @@ public class SQLiteThread extends Thread implements DataSource { pst.setString(1, user); rs = pst.executeQuery(); if (rs.next()) { - if (rs.getString(columnIp).isEmpty() ) { - return new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword), "198.18.0.1", rs.getLong(columnLastLogin), rs.getDouble(lastlocX), rs.getDouble(lastlocY), rs.getDouble(lastlocZ), rs.getString(lastlocWorld) , rs.getString(columnEmail), API.getPlayerRealName(rs.getString(columnName))); + if (rs.getString(columnIp).isEmpty()) { + return new PlayerAuth(rs.getString(columnName), + rs.getString(columnPassword), "198.18.0.1", + rs.getLong(columnLastLogin), + rs.getDouble(lastlocX), rs.getDouble(lastlocY), + rs.getDouble(lastlocZ), rs.getString(lastlocWorld), + rs.getString(columnEmail), API.getPlayerRealName(rs + .getString(columnName))); } else { - if(!columnSalt.isEmpty()){ - return new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword),rs.getString(columnSalt), rs.getInt(columnGroup), rs.getString(columnIp), rs.getLong(columnLastLogin), rs.getDouble(lastlocX), rs.getDouble(lastlocY), rs.getDouble(lastlocZ), rs.getString(lastlocWorld) , rs.getString(columnEmail), API.getPlayerRealName(rs.getString(columnName))); - } else { - return new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword), rs.getString(columnIp), rs.getLong(columnLastLogin), rs.getDouble(lastlocX), rs.getDouble(lastlocY), rs.getDouble(lastlocZ), rs.getString(lastlocWorld) , rs.getString(columnEmail), API.getPlayerRealName(rs.getString(columnName))); - } - } + if (!columnSalt.isEmpty()) { + return new PlayerAuth(rs.getString(columnName), + rs.getString(columnPassword), + rs.getString(columnSalt), + rs.getInt(columnGroup), rs.getString(columnIp), + rs.getLong(columnLastLogin), + rs.getDouble(lastlocX), rs.getDouble(lastlocY), + rs.getDouble(lastlocZ), + rs.getString(lastlocWorld), + rs.getString(columnEmail), + API.getPlayerRealName(rs.getString(columnName))); + } else { + return new PlayerAuth(rs.getString(columnName), + rs.getString(columnPassword), + rs.getString(columnIp), + rs.getLong(columnLastLogin), + rs.getDouble(lastlocX), rs.getDouble(lastlocY), + rs.getDouble(lastlocZ), + rs.getString(lastlocWorld), + rs.getString(columnEmail), + API.getPlayerRealName(rs.getString(columnName))); + } + } } else { return null; } @@ -195,14 +231,19 @@ public class SQLiteThread extends Thread implements DataSource { PreparedStatement pst = null; try { if (columnSalt.isEmpty() && auth.getSalt().isEmpty()) { - pst = con.prepareStatement("INSERT INTO " + tableName + "(" + columnName + "," + columnPassword + "," + columnIp + "," + columnLastLogin + ") VALUES (?,?,?,?);"); + pst = con.prepareStatement("INSERT INTO " + tableName + "(" + + columnName + "," + columnPassword + "," + columnIp + + "," + columnLastLogin + ") VALUES (?,?,?,?);"); pst.setString(1, auth.getNickname()); pst.setString(2, auth.getHash()); pst.setString(3, auth.getIp()); pst.setLong(4, auth.getLastLogin()); pst.executeUpdate(); } else { - pst = con.prepareStatement("INSERT INTO " + tableName + "(" + columnName + "," + columnPassword + "," + columnIp + "," + columnLastLogin + "," + columnSalt + ") VALUES (?,?,?,?,?);"); + pst = con.prepareStatement("INSERT INTO " + tableName + "(" + + columnName + "," + columnPassword + "," + columnIp + + "," + columnLastLogin + "," + columnSalt + + ") VALUES (?,?,?,?,?);"); pst.setString(1, auth.getNickname()); pst.setString(2, auth.getHash()); pst.setString(3, auth.getIp()); @@ -223,7 +264,8 @@ public class SQLiteThread extends Thread implements DataSource { public synchronized boolean updatePassword(PlayerAuth auth) { PreparedStatement pst = null; try { - pst = con.prepareStatement("UPDATE " + tableName + " SET " + columnPassword + "=? WHERE " + columnName + "=?;"); + pst = con.prepareStatement("UPDATE " + tableName + " SET " + + columnPassword + "=? WHERE " + columnName + "=?;"); pst.setString(1, auth.getHash()); pst.setString(2, auth.getNickname()); pst.executeUpdate(); @@ -240,7 +282,9 @@ public class SQLiteThread extends Thread implements DataSource { public boolean updateSession(PlayerAuth auth) { PreparedStatement pst = null; try { - pst = con.prepareStatement("UPDATE " + tableName + " SET " + columnIp + "=?, " + columnLastLogin + "=? WHERE " + columnName + "=?;"); + pst = con.prepareStatement("UPDATE " + tableName + " SET " + + columnIp + "=?, " + columnLastLogin + "=? WHERE " + + columnName + "=?;"); pst.setString(1, auth.getIp()); pst.setLong(2, auth.getLastLogin()); pst.setString(3, auth.getNickname()); @@ -258,8 +302,9 @@ public class SQLiteThread extends Thread implements DataSource { public int purgeDatabase(long until) { PreparedStatement pst = null; try { - - pst = con.prepareStatement("DELETE FROM " + tableName + " WHERE " + columnLastLogin + " list = new ArrayList(); try { - pst = con.prepareStatement("SELECT * FROM " + tableName + " WHERE " + columnLastLogin + "(); } finally { - close(rs); + close(rs); close(pst); } } @@ -296,7 +342,8 @@ public class SQLiteThread extends Thread implements DataSource { public synchronized boolean removeAuth(String user) { PreparedStatement pst = null; try { - pst = con.prepareStatement("DELETE FROM " + tableName + " WHERE " + columnName + "=?;"); + pst = con.prepareStatement("DELETE FROM " + tableName + " WHERE " + + columnName + "=?;"); pst.setString(1, user); pst.executeUpdate(); } catch (SQLException ex) { @@ -312,7 +359,9 @@ public class SQLiteThread extends Thread implements DataSource { public boolean updateQuitLoc(PlayerAuth auth) { PreparedStatement pst = null; try { - pst = con.prepareStatement("UPDATE " + tableName + " SET " + lastlocX + "=?, "+ lastlocY +"=?, "+ lastlocZ +"=?, " + lastlocWorld + "=? WHERE " + columnName + "=?;"); + pst = con.prepareStatement("UPDATE " + tableName + " SET " + + lastlocX + "=?, " + lastlocY + "=?, " + lastlocZ + "=?, " + + lastlocWorld + "=? WHERE " + columnName + "=?;"); pst.setDouble(1, auth.getQuitLocX()); pst.setDouble(2, auth.getQuitLocY()); pst.setDouble(3, auth.getQuitLocZ()); @@ -332,30 +381,31 @@ public class SQLiteThread extends Thread implements DataSource { public int getIps(String ip) { PreparedStatement pst = null; ResultSet rs = null; - int countIp=0; + int countIp = 0; try { pst = con.prepareStatement("SELECT * FROM " + tableName + " WHERE " + columnIp + "=?;"); pst.setString(1, ip); rs = pst.executeQuery(); - while(rs.next()) { - countIp++; - } - return countIp; + while (rs.next()) { + countIp++; + } + return countIp; } catch (SQLException ex) { ConsoleLogger.showError(ex.getMessage()); return 0; - } finally { + } finally { close(rs); close(pst); - } + } } - @Override - public boolean updateEmail(PlayerAuth auth) { + @Override + public boolean updateEmail(PlayerAuth auth) { PreparedStatement pst = null; try { - pst = con.prepareStatement("UPDATE " + tableName + " SET " + columnEmail + "=? WHERE " + columnName + "=?;"); + pst = con.prepareStatement("UPDATE " + tableName + " SET " + + columnEmail + "=? WHERE " + columnName + "=?;"); pst.setString(1, auth.getEmail()); pst.setString(2, auth.getNickname()); pst.executeUpdate(); @@ -368,14 +418,15 @@ public class SQLiteThread extends Thread implements DataSource { return true; } - @Override - public boolean updateSalt(PlayerAuth auth) { - if(columnSalt.isEmpty()) { - return false; - } + @Override + public boolean updateSalt(PlayerAuth auth) { + if (columnSalt.isEmpty()) { + return false; + } PreparedStatement pst = null; try { - pst = con.prepareStatement("UPDATE " + tableName + " SET " + columnSalt + "=? WHERE " + columnName + "=?;"); + pst = con.prepareStatement("UPDATE " + tableName + " SET " + + columnSalt + "=? WHERE " + columnName + "=?;"); pst.setString(1, auth.getSalt()); pst.setString(2, auth.getNickname()); pst.executeUpdate(); @@ -421,8 +472,8 @@ public class SQLiteThread extends Thread implements DataSource { } } - @Override - public List getAllAuthsByName(PlayerAuth auth) { + @Override + public List getAllAuthsByName(PlayerAuth auth) { PreparedStatement pst = null; ResultSet rs = null; List countIp = new ArrayList(); @@ -431,10 +482,10 @@ public class SQLiteThread extends Thread implements DataSource { + columnIp + "=?;"); pst.setString(1, auth.getIp()); rs = pst.executeQuery(); - while(rs.next()) { - countIp.add(rs.getString(columnName)); - } - return countIp; + while (rs.next()) { + countIp.add(rs.getString(columnName)); + } + return countIp; } catch (SQLException ex) { ConsoleLogger.showError(ex.getMessage()); return new ArrayList(); @@ -442,15 +493,15 @@ public class SQLiteThread extends Thread implements DataSource { ConsoleLogger.showError(ex.getMessage()); return new ArrayList(); } catch (NullPointerException npe) { - return new ArrayList(); + return new ArrayList(); } finally { close(rs); close(pst); - } - } + } + } - @Override - public List getAllAuthsByIp(String ip) { + @Override + public List getAllAuthsByIp(String ip) { PreparedStatement pst = null; ResultSet rs = null; List countIp = new ArrayList(); @@ -459,10 +510,10 @@ public class SQLiteThread extends Thread implements DataSource { + columnIp + "=?;"); pst.setString(1, ip); rs = pst.executeQuery(); - while(rs.next()) { - countIp.add(rs.getString(columnName)); - } - return countIp; + while (rs.next()) { + countIp.add(rs.getString(columnName)); + } + return countIp; } catch (SQLException ex) { ConsoleLogger.showError(ex.getMessage()); return new ArrayList(); @@ -470,15 +521,15 @@ public class SQLiteThread extends Thread implements DataSource { ConsoleLogger.showError(ex.getMessage()); return new ArrayList(); } catch (NullPointerException npe) { - return new ArrayList(); + return new ArrayList(); } finally { close(rs); close(pst); - } - } + } + } - @Override - public List getAllAuthsByEmail(String email) { + @Override + public List getAllAuthsByEmail(String email) { PreparedStatement pst = null; ResultSet rs = null; List countEmail = new ArrayList(); @@ -487,10 +538,10 @@ public class SQLiteThread extends Thread implements DataSource { + columnEmail + "=?;"); pst.setString(1, email); rs = pst.executeQuery(); - while(rs.next()) { - countEmail.add(rs.getString(columnName)); - } - return countEmail; + while (rs.next()) { + countEmail.add(rs.getString(columnName)); + } + return countEmail; } catch (SQLException ex) { ConsoleLogger.showError(ex.getMessage()); return new ArrayList(); @@ -498,51 +549,52 @@ public class SQLiteThread extends Thread implements DataSource { ConsoleLogger.showError(ex.getMessage()); return new ArrayList(); } catch (NullPointerException npe) { - return new ArrayList(); + return new ArrayList(); } finally { close(rs); close(pst); - } - } + } + } - @Override - public void purgeBanned(List banned) { + @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(); - } + 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); } - } + } - @Override - public DataSourceType getType() { - return DataSourceType.SQLITE; - } + @Override + public DataSourceType getType() { + return DataSourceType.SQLITE; + } - @Override - public boolean isLogged(String user) { - return PlayersLogs.getInstance().players.contains(user.toLowerCase()); - } + @Override + public boolean isLogged(String user) { + return PlayersLogs.getInstance().players.contains(user.toLowerCase()); + } - @Override - public void setLogged(String user) { - PlayersLogs.getInstance().addPlayer(user); - } + @Override + public void setLogged(String user) { + PlayersLogs.getInstance().addPlayer(user); + } - @Override - public void setUnlogged(String user) { - PlayersLogs.getInstance().removePlayer(user); - } + @Override + public void setUnlogged(String user) { + PlayersLogs.getInstance().removePlayer(user); + } - @Override - public void purgeLogged() { - PlayersLogs.getInstance().clear(); - } + @Override + public void purgeLogged() { + PlayersLogs.getInstance().clear(); + } } diff --git a/src/main/java/fr/xephi/authme/events/AuthMeTeleportEvent.java b/src/main/java/fr/xephi/authme/events/AuthMeTeleportEvent.java index 3427c7bd..fff80d5a 100644 --- a/src/main/java/fr/xephi/authme/events/AuthMeTeleportEvent.java +++ b/src/main/java/fr/xephi/authme/events/AuthMeTeleportEvent.java @@ -4,31 +4,35 @@ import org.bukkit.Location; import org.bukkit.entity.Player; /** -* -* @author Xephi59 -*/ + * + * @author Xephi59 + */ public class AuthMeTeleportEvent extends CustomEvent { - private Player player; - private Location to; - private Location from; + private Player player; + private Location to; + private Location from; - public AuthMeTeleportEvent(Player player, Location to) { - this.player = player; - this.from = player.getLocation(); - this.to = to; - } - public Player getPlayer() { - return player; - } - public void setTo(Location to) { - this.to = to; - } - public Location getTo() { - return to; - } - public Location getFrom() { - return from; - } + public AuthMeTeleportEvent(Player player, Location to) { + this.player = player; + this.from = player.getLocation(); + this.to = to; + } + + public Player getPlayer() { + return player; + } + + public void setTo(Location to) { + this.to = to; + } + + public Location getTo() { + return to; + } + + public Location getFrom() { + return from; + } } diff --git a/src/main/java/fr/xephi/authme/events/CustomEvent.java b/src/main/java/fr/xephi/authme/events/CustomEvent.java index 0661ecd2..5d717a68 100644 --- a/src/main/java/fr/xephi/authme/events/CustomEvent.java +++ b/src/main/java/fr/xephi/authme/events/CustomEvent.java @@ -6,33 +6,33 @@ import org.bukkit.event.Event; import org.bukkit.event.HandlerList; /** -* -* @author Xephi59 -*/ + * + * @author Xephi59 + */ public class CustomEvent extends Event implements Cancellable { - private boolean isCancelled; - private static final HandlerList handlers = new HandlerList(); - private static Server s; + private boolean isCancelled; + private static final HandlerList handlers = new HandlerList(); + private static Server s; - public HandlerList getHandlers() { - return handlers; - } + public HandlerList getHandlers() { + return handlers; + } public static HandlerList getHandlerList() { return handlers; } - public boolean isCancelled() { - return this.isCancelled; - } + public boolean isCancelled() { + return this.isCancelled; + } - public void setCancelled(boolean cancelled) { - this.isCancelled = cancelled; - } + public void setCancelled(boolean cancelled) { + this.isCancelled = cancelled; + } - public static Server getServer() { - return s; - } + public static Server getServer() { + return s; + } } diff --git a/src/main/java/fr/xephi/authme/events/ProtectInventoryEvent.java b/src/main/java/fr/xephi/authme/events/ProtectInventoryEvent.java index 0ff9f6ea..1c91931c 100644 --- a/src/main/java/fr/xephi/authme/events/ProtectInventoryEvent.java +++ b/src/main/java/fr/xephi/authme/events/ProtectInventoryEvent.java @@ -4,51 +4,52 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; /** -* -* @author Xephi59 -*/ + * + * @author Xephi59 + */ public class ProtectInventoryEvent extends CustomEvent { - private ItemStack[] storedinventory; - private ItemStack[] storedarmor; - private ItemStack[] emptyInventory = null; - private ItemStack[] emptyArmor = null; - private Player player; + 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; - this.emptyInventory = new ItemStack[36]; - this.emptyArmor = new ItemStack[4]; - } + public ProtectInventoryEvent(Player player, ItemStack[] storedinventory, + ItemStack[] storedarmor) { + this.player = player; + this.storedinventory = storedinventory; + this.storedarmor = storedarmor; + this.emptyInventory = new ItemStack[36]; + this.emptyArmor = new ItemStack[4]; + } - public ItemStack[] getStoredInventory() { - return this.storedinventory; - } + public ItemStack[] getStoredInventory() { + return this.storedinventory; + } - public ItemStack[] getStoredArmor() { - return this.storedarmor; - } + public ItemStack[] getStoredArmor() { + return this.storedarmor; + } - public Player getPlayer() { - return this.player; - } + public Player getPlayer() { + return this.player; + } - public void setNewInventory(ItemStack[] emptyInventory) { - this.emptyInventory = emptyInventory; - } + public void setNewInventory(ItemStack[] emptyInventory) { + this.emptyInventory = emptyInventory; + } - public ItemStack[] getEmptyInventory() { - return this.emptyInventory; - } + public ItemStack[] getEmptyInventory() { + return this.emptyInventory; + } - public void setNewArmor(ItemStack[] emptyArmor) { - this.emptyArmor = emptyArmor; - } + public void setNewArmor(ItemStack[] emptyArmor) { + this.emptyArmor = emptyArmor; + } - public ItemStack[] getEmptyArmor() { - return this.emptyArmor; - } + public ItemStack[] getEmptyArmor() { + return this.emptyArmor; + } } diff --git a/src/main/java/fr/xephi/authme/events/RegisterTeleportEvent.java b/src/main/java/fr/xephi/authme/events/RegisterTeleportEvent.java index 5185eb2d..aa6ed3f9 100644 --- a/src/main/java/fr/xephi/authme/events/RegisterTeleportEvent.java +++ b/src/main/java/fr/xephi/authme/events/RegisterTeleportEvent.java @@ -4,31 +4,35 @@ import org.bukkit.Location; import org.bukkit.entity.Player; /** -* -* @author Xephi59 -*/ + * + * @author Xephi59 + */ public class RegisterTeleportEvent extends CustomEvent { - private Player player; - private Location to; - private Location from; + private Player player; + private Location to; + private Location from; - public RegisterTeleportEvent(Player player, Location to) { - this.player = player; - this.from = player.getLocation(); - this.to = to; - } - public Player getPlayer() { - return player; - } - public void setTo(Location to) { - this.to = to; - } - public Location getTo() { - return to; - } - public Location getFrom() { - return from; - } + public RegisterTeleportEvent(Player player, Location to) { + this.player = player; + this.from = player.getLocation(); + this.to = to; + } + + public Player getPlayer() { + return player; + } + + public void setTo(Location to) { + this.to = to; + } + + public Location getTo() { + return to; + } + + public Location getFrom() { + return from; + } } diff --git a/src/main/java/fr/xephi/authme/events/ResetInventoryEvent.java b/src/main/java/fr/xephi/authme/events/ResetInventoryEvent.java index 1a8c2361..3d664664 100644 --- a/src/main/java/fr/xephi/authme/events/ResetInventoryEvent.java +++ b/src/main/java/fr/xephi/authme/events/ResetInventoryEvent.java @@ -3,23 +3,23 @@ package fr.xephi.authme.events; import org.bukkit.entity.Player; /** -* -* @author Xephi59 -*/ + * + * @author Xephi59 + */ public class ResetInventoryEvent extends CustomEvent { - private Player player; + private Player player; - public ResetInventoryEvent(Player player) { - this.player = player; - } + public ResetInventoryEvent(Player player) { + this.player = player; + } - public Player getPlayer() { - return this.player; - } + public Player getPlayer() { + return this.player; + } - public void setPlayer(Player player) { - this.player = player; - } + public void setPlayer(Player player) { + this.player = player; + } } diff --git a/src/main/java/fr/xephi/authme/events/RestoreInventoryEvent.java b/src/main/java/fr/xephi/authme/events/RestoreInventoryEvent.java index 5ae4334a..394f92a2 100644 --- a/src/main/java/fr/xephi/authme/events/RestoreInventoryEvent.java +++ b/src/main/java/fr/xephi/authme/events/RestoreInventoryEvent.java @@ -4,43 +4,44 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; /** -* -* @author Xephi59 -*/ + * + * @author Xephi59 + */ public class RestoreInventoryEvent extends CustomEvent { - private ItemStack[] inventory; - private ItemStack[] armor; - private Player player; + private ItemStack[] inventory; + private ItemStack[] armor; + private Player player; - public RestoreInventoryEvent(Player player, ItemStack[] inventory, ItemStack[] armor) { - this.player = player; - this.inventory = inventory; - this.armor = armor; - } + public RestoreInventoryEvent(Player player, ItemStack[] inventory, + ItemStack[] armor) { + this.player = player; + this.inventory = inventory; + this.armor = armor; + } - public ItemStack[] getInventory() { - return this.inventory; - } + public ItemStack[] getInventory() { + return this.inventory; + } - public void setInventory(ItemStack[] inventory) { - this.inventory = inventory; - } + public void setInventory(ItemStack[] inventory) { + this.inventory = inventory; + } - public ItemStack[] getArmor() { - return this.armor; - } + public ItemStack[] getArmor() { + return this.armor; + } - public void setArmor(ItemStack[] armor) { - this.armor = armor; - } + public void setArmor(ItemStack[] armor) { + this.armor = armor; + } - public Player getPlayer() { - return this.player; - } + public Player getPlayer() { + return this.player; + } - public void setPlayer(Player player) { - this.player = player; - } + public void setPlayer(Player player) { + this.player = player; + } } diff --git a/src/main/java/fr/xephi/authme/events/SessionEvent.java b/src/main/java/fr/xephi/authme/events/SessionEvent.java index 8cefc846..f78ed378 100644 --- a/src/main/java/fr/xephi/authme/events/SessionEvent.java +++ b/src/main/java/fr/xephi/authme/events/SessionEvent.java @@ -3,29 +3,29 @@ package fr.xephi.authme.events; import fr.xephi.authme.cache.auth.PlayerAuth; /** -* -* @author Xephi59 -*/ + * + * @author Xephi59 + */ public class SessionEvent extends CustomEvent { - private PlayerAuth player; - private boolean isLogin; + private PlayerAuth player; + private boolean isLogin; - public SessionEvent(PlayerAuth auth, boolean isLogin) { - this.player = auth; - this.isLogin = isLogin; - } + public SessionEvent(PlayerAuth auth, boolean isLogin) { + this.player = auth; + this.isLogin = isLogin; + } - public PlayerAuth getPlayerAuth() { - return this.player; - } + public PlayerAuth getPlayerAuth() { + return this.player; + } - public void setPlayer(PlayerAuth player) { - this.player = player; - } + public void setPlayer(PlayerAuth player) { + this.player = player; + } - public boolean isLogin() { - return isLogin; - } + public boolean isLogin() { + return isLogin; + } } diff --git a/src/main/java/fr/xephi/authme/events/SpawnTeleportEvent.java b/src/main/java/fr/xephi/authme/events/SpawnTeleportEvent.java index 3685b36a..ef85c778 100644 --- a/src/main/java/fr/xephi/authme/events/SpawnTeleportEvent.java +++ b/src/main/java/fr/xephi/authme/events/SpawnTeleportEvent.java @@ -4,36 +4,42 @@ import org.bukkit.Location; import org.bukkit.entity.Player; /** -* -* @author Xephi59 -*/ + * + * @author Xephi59 + */ public class SpawnTeleportEvent extends CustomEvent { - private Player player; - private Location to; - private Location from; - private boolean isAuthenticated; + 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; - this.to = to; - this.isAuthenticated = isAuthenticated; - } - public Player getPlayer() { - return player; - } - public void setTo(Location to) { - this.to = to; - } - public Location getTo() { - return to; - } - public Location getFrom() { - return from; - } - public boolean isAuthenticated() { - return isAuthenticated; - } + public SpawnTeleportEvent(Player player, Location from, Location to, + boolean isAuthenticated) { + this.player = player; + this.from = from; + this.to = to; + this.isAuthenticated = isAuthenticated; + } + + public Player getPlayer() { + return player; + } + + public void setTo(Location to) { + this.to = to; + } + + public Location getTo() { + return to; + } + + public Location getFrom() { + return from; + } + + public boolean isAuthenticated() { + return isAuthenticated; + } } diff --git a/src/main/java/fr/xephi/authme/events/StoreInventoryEvent.java b/src/main/java/fr/xephi/authme/events/StoreInventoryEvent.java index 82463378..13cd0942 100644 --- a/src/main/java/fr/xephi/authme/events/StoreInventoryEvent.java +++ b/src/main/java/fr/xephi/authme/events/StoreInventoryEvent.java @@ -5,51 +5,52 @@ import org.bukkit.inventory.ItemStack; import fr.xephi.authme.cache.backup.FileCache; - /** -* -* @author Xephi59 -*/ + * + * @author Xephi59 + */ public class StoreInventoryEvent extends CustomEvent { - private ItemStack[] inventory; - private ItemStack[] armor; - private Player player; + 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) { + 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(); - this.armor = fileCache.readCache(player.getName().toLowerCase()).getArmour(); - } + public StoreInventoryEvent(Player player, FileCache fileCache) { + this.player = player; + this.inventory = fileCache.readCache(player.getName().toLowerCase()) + .getInventory(); + this.armor = fileCache.readCache(player.getName().toLowerCase()) + .getArmour(); + } - public ItemStack[] getInventory() { - return this.inventory; - } + public ItemStack[] getInventory() { + return this.inventory; + } - public void setInventory(ItemStack[] inventory) { - this.inventory = inventory; - } + public void setInventory(ItemStack[] inventory) { + this.inventory = inventory; + } - public ItemStack[] getArmor() { - return this.armor; - } + public ItemStack[] getArmor() { + return this.armor; + } - public void setArmor(ItemStack[] armor) { - this.armor = armor; - } + public void setArmor(ItemStack[] armor) { + this.armor = armor; + } - public Player getPlayer() { - return this.player; - } + public Player getPlayer() { + return this.player; + } - public void setPlayer(Player player) { - this.player = player; - } + public void setPlayer(Player player) { + this.player = player; + } } diff --git a/src/main/java/fr/xephi/authme/gui/Clickable.java b/src/main/java/fr/xephi/authme/gui/Clickable.java index 5321a238..943bee51 100644 --- a/src/main/java/fr/xephi/authme/gui/Clickable.java +++ b/src/main/java/fr/xephi/authme/gui/Clickable.java @@ -3,5 +3,5 @@ package fr.xephi.authme.gui; import org.getspout.spoutapi.event.screen.ButtonClickEvent; public interface Clickable { - public void handleClick(ButtonClickEvent event); + public void handleClick(ButtonClickEvent event); } diff --git a/src/main/java/fr/xephi/authme/gui/CustomButton.java b/src/main/java/fr/xephi/authme/gui/CustomButton.java index 8bf5002a..ad9dfde5 100644 --- a/src/main/java/fr/xephi/authme/gui/CustomButton.java +++ b/src/main/java/fr/xephi/authme/gui/CustomButton.java @@ -3,26 +3,21 @@ package fr.xephi.authme.gui; import org.getspout.spoutapi.event.screen.ButtonClickEvent; import org.getspout.spoutapi.gui.GenericButton; -public class CustomButton extends GenericButton -{ - public Clickable handleRef = null; +public class CustomButton extends GenericButton { + public Clickable handleRef = null; - public CustomButton(Clickable c) { - handleRef = c; - } + public CustomButton(Clickable c) { + handleRef = c; + } - @Override - public void onButtonClick(ButtonClickEvent event) { - handleRef.handleClick(event); - } + @Override + public void onButtonClick(ButtonClickEvent event) { + handleRef.handleClick(event); + } - public CustomButton setMidPos(int x, int y) - { - this.setX(x) - .setY(y) - .shiftXPos(-(width / 2)) - .shiftYPos(-(height / 2)); - return this; - } + public CustomButton setMidPos(int x, int y) { + this.setX(x).setY(y).shiftXPos(-(width / 2)).shiftYPos(-(height / 2)); + return this; + } } diff --git a/src/main/java/fr/xephi/authme/gui/screens/LoginScreen.java b/src/main/java/fr/xephi/authme/gui/screens/LoginScreen.java index c5758890..3c787c32 100644 --- a/src/main/java/fr/xephi/authme/gui/screens/LoginScreen.java +++ b/src/main/java/fr/xephi/authme/gui/screens/LoginScreen.java @@ -20,112 +20,86 @@ import fr.xephi.authme.gui.Clickable; import fr.xephi.authme.gui.CustomButton; import fr.xephi.authme.settings.SpoutCfg; +public class LoginScreen extends GenericPopup implements Clickable { -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; + private GenericLabel titleLbl; + private GenericLabel textLbl; + private GenericLabel errorLbl; - public AuthMe plugin = AuthMe.getInstance(); - private SpoutCfg spoutCfg = SpoutCfg.getInstance(); - private CustomButton exitBtn; - private CustomButton loginBtn; - private GenericTextField passBox; - private GenericLabel titleLbl; - private GenericLabel textLbl; - private GenericLabel errorLbl; - - 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; + 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(); - } + public LoginScreen(SpoutPlayer player) { + this.splayer = player; + createScreen(); + } - private void createScreen() { - 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) - .setTextColor(new Color(1.0F, 0, 0, 1.0F)) - .setAlign(WidgetAnchor.TOP_CENTER) - .setHeight(h) - .setWidth(w) - .setX(maxWidth / 2 ) - .setY(25); - this.attachWidget(plugin, titleLbl); - int ystart = 25 + h + part/2; - for (int x=0; x gameMode = new HashMap(); public static HashMap joinMessage = new HashMap(); - private Utils utils = Utils.getInstance(); + private Utils utils = Utils.getInstance(); private Messages m = Messages.getInstance(); public AuthMe plugin; private DataSource data; @@ -82,69 +81,61 @@ public class AuthMePlayerListener implements Listener { @EventHandler(priority = EventPriority.LOWEST) public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) { - if (event.isCancelled() || event.getPlayer() == null) - return; + if (event.isCancelled() || event.getPlayer() == null) return; Player player = event.getPlayer(); String name = player.getName().toLowerCase(); - if (Utils.getInstance().isUnrestricted(player)) - return; + if (Utils.getInstance().isUnrestricted(player)) return; - if (PlayerCache.getInstance().isAuthenticated(name)) - return; + if (PlayerCache.getInstance().isAuthenticated(name)) return; - if (!data.isAuthAvailable(name)) - if (!Settings.isForcedRegistrationEnabled) - return; + if (!data.isAuthAvailable(name)) if (!Settings.isForcedRegistrationEnabled) return; String msg = event.getMessage(); - //WorldEdit GUI Shit - if (msg.equalsIgnoreCase("/worldedit cui")) - return; + // WorldEdit GUI Shit + if (msg.equalsIgnoreCase("/worldedit cui")) return; String cmd = msg.split(" ")[0]; - 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.useEssentialsMotd && cmd.equalsIgnoreCase("/motd")) - return; - if (Settings.allowCommands.contains(cmd)) - return; + 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.useEssentialsMotd && cmd.equalsIgnoreCase("/motd")) return; + if (Settings.allowCommands.contains(cmd)) return; event.setMessage("/notloggedin"); event.setCancelled(true); } - @EventHandler( priority = EventPriority.NORMAL) + @EventHandler(priority = EventPriority.NORMAL) public void onPlayerNormalChat(AsyncPlayerChatEvent event) { - if (event.isCancelled() || event.getPlayer() == null) - return; + if (event.isCancelled() || event.getPlayer() == null) return; final Player player = event.getPlayer(); final String name = player.getName().toLowerCase(); - if (Utils.getInstance().isUnrestricted(player)) - return; + if (Utils.getInstance().isUnrestricted(player)) return; - if (PlayerCache.getInstance().isAuthenticated(name)) - return; + if (PlayerCache.getInstance().isAuthenticated(name)) return; String cmd = event.getMessage().split(" ")[0]; - - if (data.isAuthAvailable(name)) { - m._(player, "login_msg"); - } else { - if (!Settings.isForcedRegistrationEnabled) { - return; - } + + if (data.isAuthAvailable(name)) { + m._(player, "login_msg"); + } else { + if (!Settings.isForcedRegistrationEnabled) { + return; + } if (Settings.emailRegistration) { - m._(player, "reg_email_msg"); + m._(player, "reg_email_msg"); return; - } else { - m._(player, "reg_msg"); + } else { + m._(player, "reg_msg"); return; - } - } + } + } if (!Settings.isChatAllowed && !(Settings.allowCommands.contains(cmd))) { event.setCancelled(true); @@ -152,36 +143,33 @@ public class AuthMePlayerListener implements Listener { } } - @EventHandler( priority = EventPriority.HIGH) + @EventHandler(priority = EventPriority.HIGH) public void onPlayerHighChat(AsyncPlayerChatEvent event) { - if (event.isCancelled() || event.getPlayer() == null) - return; + if (event.isCancelled() || event.getPlayer() == null) return; final Player player = event.getPlayer(); final String name = player.getName().toLowerCase(); - if (Utils.getInstance().isUnrestricted(player)) - return; + if (Utils.getInstance().isUnrestricted(player)) return; - if (PlayerCache.getInstance().isAuthenticated(name)) - return; + if (PlayerCache.getInstance().isAuthenticated(name)) return; String cmd = event.getMessage().split(" ")[0]; - - if (data.isAuthAvailable(name)) { - m._(player, "login_msg"); - } else { - if (!Settings.isForcedRegistrationEnabled) { - return; - } + + if (data.isAuthAvailable(name)) { + m._(player, "login_msg"); + } else { + if (!Settings.isForcedRegistrationEnabled) { + return; + } if (Settings.emailRegistration) { m._(player, "reg_email_msg"); return; - } else { + } else { m._(player, "reg_msg"); return; - } - } + } + } if (!Settings.isChatAllowed && !(Settings.allowCommands.contains(cmd))) { event.setCancelled(true); @@ -189,36 +177,33 @@ public class AuthMePlayerListener implements Listener { } } - @EventHandler( priority = EventPriority.MONITOR) + @EventHandler(priority = EventPriority.MONITOR) public void onPlayerChat(AsyncPlayerChatEvent event) { - if (event.isCancelled() || event.getPlayer() == null) - return; + if (event.isCancelled() || event.getPlayer() == null) return; final Player player = event.getPlayer(); final String name = player.getName().toLowerCase(); - if (Utils.getInstance().isUnrestricted(player)) - return; + if (Utils.getInstance().isUnrestricted(player)) return; - if (PlayerCache.getInstance().isAuthenticated(name)) - return; + if (PlayerCache.getInstance().isAuthenticated(name)) return; String cmd = event.getMessage().split(" ")[0]; - - if (data.isAuthAvailable(name)) { - m._(player, "login_msg"); - } else { - if (!Settings.isForcedRegistrationEnabled) { - return; - } + + if (data.isAuthAvailable(name)) { + m._(player, "login_msg"); + } else { + if (!Settings.isForcedRegistrationEnabled) { + return; + } if (Settings.emailRegistration) { m._(player, "reg_email_msg"); return; - } else { + } else { m._(player, "reg_msg"); return; - } - } + } + } if (!Settings.isChatAllowed && !(Settings.allowCommands.contains(cmd))) { event.setCancelled(true); @@ -226,36 +211,33 @@ public class AuthMePlayerListener implements Listener { } } - @EventHandler( priority = EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.HIGHEST) public void onPlayerHighestChat(AsyncPlayerChatEvent event) { - if (event.isCancelled() || event.getPlayer() == null) - return; + if (event.isCancelled() || event.getPlayer() == null) return; final Player player = event.getPlayer(); final String name = player.getName().toLowerCase(); - if (Utils.getInstance().isUnrestricted(player)) - return; + if (Utils.getInstance().isUnrestricted(player)) return; - if (PlayerCache.getInstance().isAuthenticated(name)) - return; + if (PlayerCache.getInstance().isAuthenticated(name)) return; String cmd = event.getMessage().split(" ")[0]; - - if (data.isAuthAvailable(name)) { - m._(player, "login_msg"); - } else { - if (!Settings.isForcedRegistrationEnabled) { - return; - } + + if (data.isAuthAvailable(name)) { + m._(player, "login_msg"); + } else { + if (!Settings.isForcedRegistrationEnabled) { + return; + } if (Settings.emailRegistration) { m._(player, "reg_email_msg"); return; - } else { + } else { m._(player, "reg_msg"); return; - } - } + } + } if (!Settings.isChatAllowed && !(Settings.allowCommands.contains(cmd))) { event.setCancelled(true); @@ -263,36 +245,33 @@ public class AuthMePlayerListener implements Listener { } } - @EventHandler( priority = EventPriority.LOWEST) + @EventHandler(priority = EventPriority.LOWEST) public void onPlayerEarlyChat(AsyncPlayerChatEvent event) { - if (event.isCancelled() || event.getPlayer() == null) - return; + if (event.isCancelled() || event.getPlayer() == null) return; final Player player = event.getPlayer(); final String name = player.getName().toLowerCase(); - if (Utils.getInstance().isUnrestricted(player)) - return; + if (Utils.getInstance().isUnrestricted(player)) return; - if (PlayerCache.getInstance().isAuthenticated(name)) - return; + if (PlayerCache.getInstance().isAuthenticated(name)) return; String cmd = event.getMessage().split(" ")[0]; - - if (data.isAuthAvailable(name)) { - m._(player, "login_msg"); - } else { - if (!Settings.isForcedRegistrationEnabled) { - return; - } + + if (data.isAuthAvailable(name)) { + m._(player, "login_msg"); + } else { + if (!Settings.isForcedRegistrationEnabled) { + return; + } if (Settings.emailRegistration) { m._(player, "reg_email_msg"); return; - } else { + } else { m._(player, "reg_msg"); return; - } - } + } + } if (!Settings.isChatAllowed && !(Settings.allowCommands.contains(cmd))) { event.setCancelled(true); @@ -300,34 +279,31 @@ public class AuthMePlayerListener implements Listener { } } - @EventHandler( priority = EventPriority.LOW) + @EventHandler(priority = EventPriority.LOW) public void onPlayerLowChat(AsyncPlayerChatEvent event) { - if (event.isCancelled() || event.getPlayer() == null) - return; + if (event.isCancelled() || event.getPlayer() == null) return; final Player player = event.getPlayer(); final String name = player.getName().toLowerCase(); - if (Utils.getInstance().isUnrestricted(player)) - return; + if (Utils.getInstance().isUnrestricted(player)) return; - if (PlayerCache.getInstance().isAuthenticated(name)) - return; + if (PlayerCache.getInstance().isAuthenticated(name)) return; String cmd = event.getMessage().split(" ")[0]; - - if (data.isAuthAvailable(name)) { - m._(player, "login_msg"); - } else { - if (!Settings.isForcedRegistrationEnabled) { - return; - } + + if (data.isAuthAvailable(name)) { + m._(player, "login_msg"); + } else { + if (!Settings.isForcedRegistrationEnabled) { + return; + } if (Settings.emailRegistration) { m._(player, "reg_email_msg"); - } else { + } else { m._(player, "reg_msg"); - } - } + } + } if (!Settings.isChatAllowed && !(Settings.allowCommands.contains(cmd))) { event.setCancelled(true); @@ -344,7 +320,9 @@ public class AuthMePlayerListener implements Listener { Player player = event.getPlayer(); String name = player.getName().toLowerCase(); - if (plugin.getCitizensCommunicator().isNPC(player, plugin) || Utils.getInstance().isUnrestricted(player) || CombatTagComunicator.isNPC(player)) { + if (plugin.getCitizensCommunicator().isNPC(player, plugin) + || Utils.getInstance().isUnrestricted(player) + || CombatTagComunicator.isNPC(player)) { return; } @@ -369,10 +347,10 @@ public class AuthMePlayerListener implements Listener { Location spawn = plugin.getSpawnLocation(player); if (!event.getPlayer().getWorld().equals(spawn.getWorld())) { - event.getPlayer().teleport(spawn); - return; + event.getPlayer().teleport(spawn); + return; } - if ((spawn.distance(player.getLocation()) > radius) ) { + if ((spawn.distance(player.getLocation()) > radius)) { event.getPlayer().teleport(spawn); return; } @@ -384,54 +362,75 @@ public class AuthMePlayerListener implements Listener { final Player player = event.getPlayer(); final String name = player.getName().toLowerCase(); - if (plugin.getCitizensCommunicator().isNPC(player, plugin) || Utils.getInstance().isUnrestricted(player) || CombatTagComunicator.isNPC(player)) { + if (plugin.getCitizensCommunicator().isNPC(player, plugin) + || Utils.getInstance().isUnrestricted(player) + || CombatTagComunicator.isNPC(player)) { return; } if (!Settings.countriesBlacklist.isEmpty()) { - String code = plugin.getCountryCode(event.getAddress().getHostAddress()); - if (((code == null) || (Settings.countriesBlacklist.contains(code) && !API.isRegistered(name))) && !plugin.authmePermissible(player, "authme.bypassantibot")) { - event.disallow(PlayerLoginEvent.Result.KICK_OTHER, m._("country_banned")[0]); - return; - } + String code = plugin.getCountryCode(event.getAddress() + .getHostAddress()); + if (((code == null) || (Settings.countriesBlacklist.contains(code) && !API + .isRegistered(name))) + && !plugin + .authmePermissible(player, "authme.bypassantibot")) { + event.disallow(PlayerLoginEvent.Result.KICK_OTHER, + m._("country_banned")[0]); + return; + } } if (Settings.enableProtection && !Settings.countries.isEmpty()) { - String code = plugin.getCountryCode(event.getAddress().getHostAddress()); - if (((code == null) || (!Settings.countries.contains(code) && !API.isRegistered(name))) && !plugin.authmePermissible(player, "authme.bypassantibot")) { - event.disallow(PlayerLoginEvent.Result.KICK_OTHER, m._("country_banned")[0]); - return; - } + String code = plugin.getCountryCode(event.getAddress() + .getHostAddress()); + if (((code == null) || (!Settings.countries.contains(code) && !API + .isRegistered(name))) + && !plugin + .authmePermissible(player, "authme.bypassantibot")) { + event.disallow(PlayerLoginEvent.Result.KICK_OTHER, + m._("country_banned")[0]); + return; + } } if (Settings.isKickNonRegisteredEnabled) { - if (!data.isAuthAvailable(name)) { - event.disallow(PlayerLoginEvent.Result.KICK_OTHER, m._("reg_only")[0]); + if (!data.isAuthAvailable(name)) { + event.disallow(PlayerLoginEvent.Result.KICK_OTHER, + m._("reg_only")[0]); return; } } if (player.isOnline() && Settings.isForceSingleSessionEnabled) { - event.disallow(PlayerLoginEvent.Result.KICK_OTHER, m._("same_nick")[0]); + event.disallow(PlayerLoginEvent.Result.KICK_OTHER, + m._("same_nick")[0]); return; } - if(data.isAuthAvailable(name) && !LimboCache.getInstance().hasLimboPlayer(name)) { - if(!Settings.isSessionsEnabled) { - } else if(PlayerCache.getInstance().isAuthenticated(name)) { - if(!Settings.sessionExpireOnIpChange) - if(LimboCache.getInstance().hasLimboPlayer(player.getName().toLowerCase())) { - LimboCache.getInstance().deleteLimboPlayer(name); - } - } + if (data.isAuthAvailable(name) + && !LimboCache.getInstance().hasLimboPlayer(name)) { + if (!Settings.isSessionsEnabled) { + } else if (PlayerCache.getInstance().isAuthenticated(name)) { + if (!Settings.sessionExpireOnIpChange) if (LimboCache + .getInstance().hasLimboPlayer( + player.getName().toLowerCase())) { + LimboCache.getInstance().deleteLimboPlayer(name); + } + } } - //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()); - event.disallow(PlayerLoginEvent.Result.KICK_OTHER, m._("same_nick")[0]); - if(PlayerCache.getInstance().isAuthenticated(player.getName().toLowerCase())) { - utils.addNormal(player, limbo.getGroup()); - LimboCache.getInstance().deleteLimboPlayer(player.getName().toLowerCase()); - } + // 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()); + event.disallow(PlayerLoginEvent.Result.KICK_OTHER, + m._("same_nick")[0]); + if (PlayerCache.getInstance().isAuthenticated( + player.getName().toLowerCase())) { + utils.addNormal(player, limbo.getGroup()); + LimboCache.getInstance().deleteLimboPlayer( + player.getName().toLowerCase()); + } return; } @@ -441,33 +440,39 @@ public class AuthMePlayerListener implements Listener { if (name.length() > max || name.length() < min) { - event.disallow(PlayerLoginEvent.Result.KICK_OTHER, m._("name_len")[0]); + event.disallow(PlayerLoginEvent.Result.KICK_OTHER, + m._("name_len")[0]); return; } try { if (!player.getName().matches(regex) || name.equals("Player")) { try { - event.disallow(PlayerLoginEvent.Result.KICK_OTHER, m._("regex")[0].replace("REG_EX", regex)); + event.disallow(PlayerLoginEvent.Result.KICK_OTHER, + m._("regex")[0].replace("REG_EX", regex)); } catch (Exception exc) { - event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "allowed char : " + regex); + event.disallow(PlayerLoginEvent.Result.KICK_OTHER, + "allowed char : " + regex); } return; } } catch (PatternSyntaxException pse) { - if (regex == null || regex.isEmpty()) { - event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "Your nickname do not match"); - return; - } + if (regex == null || regex.isEmpty()) { + event.disallow(PlayerLoginEvent.Result.KICK_OTHER, + "Your nickname do not match"); + return; + } try { - event.disallow(PlayerLoginEvent.Result.KICK_OTHER, m._("regex")[0].replace("REG_EX", regex)); + event.disallow(PlayerLoginEvent.Result.KICK_OTHER, + m._("regex")[0].replace("REG_EX", regex)); } catch (Exception exc) { - event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "allowed char : " + regex); + event.disallow(PlayerLoginEvent.Result.KICK_OTHER, + "allowed char : " + regex); } return; } if (event.getResult() == PlayerLoginEvent.Result.ALLOWED) { - checkAntiBotMod(event); + checkAntiBotMod(event); if (Settings.bungee) { final ByteArrayOutputStream b = new ByteArrayOutputStream(); DataOutputStream out = new DataOutputStream(b); @@ -478,61 +483,64 @@ public class AuthMePlayerListener implements Listener { } player.sendPluginMessage(plugin, "BungeeCord", b.toByteArray()); } - return; + return; } if (event.getResult() != PlayerLoginEvent.Result.KICK_FULL) return; if (player.isBanned()) return; if (!plugin.authmePermissible(player, "authme.vip")) { - event.disallow(Result.KICK_FULL, m._("kick_fullserver")[0]); - return; + event.disallow(Result.KICK_FULL, m._("kick_fullserver")[0]); + return; } - if (plugin.getServer().getOnlinePlayers().length > plugin.getServer().getMaxPlayers()) { - event.allow(); - return; + if (plugin.getServer().getOnlinePlayers().length > plugin.getServer() + .getMaxPlayers()) { + event.allow(); + return; } else { - final Player pl = plugin.generateKickPlayer(plugin.getServer().getOnlinePlayers()); - if (pl != null) { - pl.kickPlayer(m._("kick_forvip")[0]); - event.allow(); - return; - } else { - ConsoleLogger.info("The player " + player.getName() + " wants to join, but the server is full"); - event.disallow(Result.KICK_FULL, m._("kick_fullserver")[0]); - return; - } + final Player pl = plugin.generateKickPlayer(plugin.getServer() + .getOnlinePlayers()); + if (pl != null) { + pl.kickPlayer(m._("kick_forvip")[0]); + event.allow(); + return; + } else { + ConsoleLogger.info("The player " + player.getName() + + " wants to join, but the server is full"); + event.disallow(Result.KICK_FULL, m._("kick_fullserver")[0]); + return; + } } } private void checkAntiBotMod(final PlayerLoginEvent event) { - if (plugin.delayedAntiBot || plugin.antibotMod) - return; - if (plugin.authmePermissible(event.getPlayer(), "authme.bypassantibot")) - return; - if (antibot.keySet().size() > Settings.antiBotSensibility) { - plugin.switchAntiBotMod(true); - for (String s : m._("antibot_auto_enabled")) - Bukkit.broadcastMessage(s); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable(){ - @Override - public void run() { - if (plugin.antibotMod) { - plugin.switchAntiBotMod(false); - antibot.clear(); - for (String s : m._("antibot_auto_disabled")) - Bukkit.broadcastMessage(s.replace("%m", "" + Settings.antiBotDuration)); - } - } - }, Settings.antiBotDuration * 1200); - return; - } - antibot.put(event.getPlayer().getName().toLowerCase(), event); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable(){ - @Override - public void run() { - antibot.remove(event.getPlayer().getName().toLowerCase()); - } - }, 300); + if (plugin.delayedAntiBot || plugin.antibotMod) return; + if (plugin.authmePermissible(event.getPlayer(), "authme.bypassantibot")) return; + if (antibot.keySet().size() > Settings.antiBotSensibility) { + plugin.switchAntiBotMod(true); + for (String s : m._("antibot_auto_enabled")) + Bukkit.broadcastMessage(s); + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, + new Runnable() { + @Override + public void run() { + if (plugin.antibotMod) { + plugin.switchAntiBotMod(false); + antibot.clear(); + for (String s : m._("antibot_auto_disabled")) + Bukkit.broadcastMessage(s.replace("%m", "" + + Settings.antiBotDuration)); + } + } + }, Settings.antiBotDuration * 1200); + return; + } + antibot.put(event.getPlayer().getName().toLowerCase(), event); + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + antibot.remove(event.getPlayer().getName().toLowerCase()); + } + }, 300); } @EventHandler(priority = EventPriority.HIGHEST) @@ -547,32 +555,37 @@ public class AuthMePlayerListener implements Listener { gameMode.put(name, gm); BukkitScheduler sched = plugin.getServer().getScheduler(); - if (plugin.getCitizensCommunicator().isNPC(player, plugin) || Utils.getInstance().isUnrestricted(player) || CombatTagComunicator.isNPC(player)) { + if (plugin.getCitizensCommunicator().isNPC(player, plugin) + || Utils.getInstance().isUnrestricted(player) + || CombatTagComunicator.isNPC(player)) { return; } if (plugin.ess != null && Settings.disableSocialSpy) { - try { - plugin.ess.getUser(player.getName()).setSocialSpyEnabled(false); - } catch (Exception e) {} + try { + plugin.ess.getUser(player.getName()).setSocialSpyEnabled(false); + } catch (Exception e) { + } } String ip = plugin.getIP(player); - if(Settings.isAllowRestrictedIp && !Settings.getRestrictedIp(name, ip)) { + if (Settings.isAllowRestrictedIp && !Settings.getRestrictedIp(name, ip)) { GameMode gM = gameMode.get(name); this.causeByAuthMe = true; - player.setGameMode(gM); - this.causeByAuthMe = false; + player.setGameMode(gM); + this.causeByAuthMe = false; player.kickPlayer("You are not the Owner of this account, please try another name!"); - if (Settings.banUnsafeIp) - plugin.getServer().banIP(ip); - return; + if (Settings.banUnsafeIp) plugin.getServer().banIP(ip); + return; } - if(Settings.getMaxJoinPerIp > 0 && !plugin.authmePermissible(player, "authme.allow2accounts") && !ip.equalsIgnoreCase("127.0.0.1") && !ip.equalsIgnoreCase("localhost")) { - if (plugin.hasJoinedIp(player.getName(), ip)) { - player.kickPlayer("A player with the same IP is already in game!"); - return; - } + if (Settings.getMaxJoinPerIp > 0 + && !plugin.authmePermissible(player, "authme.allow2accounts") + && !ip.equalsIgnoreCase("127.0.0.1") + && !ip.equalsIgnoreCase("localhost")) { + if (plugin.hasJoinedIp(player.getName(), ip)) { + player.kickPlayer("A player with the same IP is already in game!"); + return; + } } if (data.isAuthAvailable(name)) { if (Settings.isSessionsEnabled) { @@ -580,142 +593,168 @@ public class AuthMePlayerListener implements Listener { 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) ) { - if(PlayerCache.getInstance().getAuth(name) != null) { - PlayerCache.getInstance().updatePlayer(auth); - } else { - PlayerCache.getInstance().addPlayer(auth); - data.setLogged(name); - } - m._(player, "valid_session"); - // Restore Permission Group - utils.setGroup(player, Utils.groupType.LOGGEDIN); - plugin.getServer().getPluginManager().callEvent(new SessionEvent(auth, true)); - return; - } else if (!Settings.sessionExpireOnIpChange){ - GameMode gM = gameMode.get(name); - this.causeByAuthMe = true; - player.setGameMode(gM); - this.causeByAuthMe = false; - player.kickPlayer(m._("unvalid_session")[0]); - return; - } else if (auth.getNickname().equalsIgnoreCase(name)){ - if (Settings.isForceSurvivalModeEnabled && !Settings.forceOnlyAfterLogin) { - this.causeByAuthMe = true; - Utils.forceGM(player); - this.causeByAuthMe = false; - } - //Player change his IP between 2 relog-in - PlayerCache.getInstance().removePlayer(name); - data.setUnlogged(name); - } else { - GameMode gM = gameMode.get(name); - this.causeByAuthMe = true; - player.setGameMode(gM); - this.causeByAuthMe = false; - player.kickPlayer(m._("unvalid_session")[0]); - return; - } - } else { - //Session is ended correctly - PlayerCache.getInstance().removePlayer(name); - data.setUnlogged(name); - } - } - // isent in session or session was ended correctly - if (Settings.isForceSurvivalModeEnabled && !Settings.forceOnlyAfterLogin) { - this.causeByAuthMe = true; - Utils.forceGM(player); - this.causeByAuthMe = false; - } - if (!Settings.noTeleport) - 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); - if(!tpEvent.isCancelled()) { - if (player != null && player.isOnline() && tpEvent.getTo() != null) { - player.teleport(tpEvent.getTo()); + if ((cur - lastLogin < timeout || timeout == 0) + && !auth.getIp().equals("198.18.0.1")) { + if (auth.getNickname().equalsIgnoreCase(name) + && auth.getIp().equals(ip)) { + if (PlayerCache.getInstance().getAuth(name) != null) { + PlayerCache.getInstance().updatePlayer(auth); + } else { + PlayerCache.getInstance().addPlayer(auth); + data.setLogged(name); } + m._(player, "valid_session"); + // Restore Permission Group + utils.setGroup(player, Utils.groupType.LOGGEDIN); + plugin.getServer().getPluginManager() + .callEvent(new SessionEvent(auth, true)); + return; + } else if (!Settings.sessionExpireOnIpChange) { + GameMode gM = gameMode.get(name); + this.causeByAuthMe = true; + player.setGameMode(gM); + this.causeByAuthMe = false; + player.kickPlayer(m._("unvalid_session")[0]); + return; + } else if (auth.getNickname().equalsIgnoreCase(name)) { + if (Settings.isForceSurvivalModeEnabled + && !Settings.forceOnlyAfterLogin) { + this.causeByAuthMe = true; + Utils.forceGM(player); + this.causeByAuthMe = false; + } + // Player change his IP between 2 relog-in + PlayerCache.getInstance().removePlayer(name); + data.setUnlogged(name); + } else { + GameMode gM = gameMode.get(name); + this.causeByAuthMe = true; + player.setGameMode(gM); + this.causeByAuthMe = false; + player.kickPlayer(m._("unvalid_session")[0]); + return; + } + } else { + // Session is ended correctly + PlayerCache.getInstance().removePlayer(name); + data.setUnlogged(name); + } + } + // isent in session or session was ended correctly + if (Settings.isForceSurvivalModeEnabled + && !Settings.forceOnlyAfterLogin) { + this.causeByAuthMe = true; + Utils.forceGM(player); + this.causeByAuthMe = false; + } + if (!Settings.noTeleport) 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); + if (!tpEvent.isCancelled()) { + if (player != null && player.isOnline() + && tpEvent.getTo() != null) { + player.teleport(tpEvent.getTo()); } } + } placePlayerSafely(player, spawnLoc); LimboCache.getInstance().updateLimboPlayer(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(),LimboCache.getInstance().getLimboPlayer(name).isFlying()); + 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(), LimboCache + .getInstance().getLimboPlayer(name).isFlying()); } else { - if (Settings.isForceSurvivalModeEnabled && !Settings.forceOnlyAfterLogin) { - this.causeByAuthMe = true; - Utils.forceGM(player); - this.causeByAuthMe = false; + if (Settings.isForceSurvivalModeEnabled + && !Settings.forceOnlyAfterLogin) { + this.causeByAuthMe = true; + Utils.forceGM(player); + this.causeByAuthMe = false; } - if(!Settings.unRegisteredGroup.isEmpty()){ - utils.setGroup(player, Utils.groupType.UNREGISTERED); + if (!Settings.unRegisteredGroup.isEmpty()) { + utils.setGroup(player, Utils.groupType.UNREGISTERED); } - if (!Settings.noTeleport) - 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); - if(!tpEvent.isCancelled()) { - if (player != null && player.isOnline() && tpEvent.getTo() != null) { - player.teleport(tpEvent.getTo()); - } + if (!Settings.noTeleport) 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); + if (!tpEvent.isCancelled()) { + if (player != null && player.isOnline() + && tpEvent.getTo() != null) { + player.teleport(tpEvent.getTo()); } } + } if (!Settings.isForcedRegistrationEnabled) { return; } - + } - if(Settings.protectInventoryBeforeLogInEnabled) { - try { - LimboPlayer limbo = LimboCache.getInstance().getLimboPlayer(player.getName().toLowerCase()); - ProtectInventoryEvent ev = new ProtectInventoryEvent(player, limbo.getInventory(), limbo.getArmour()); - plugin.getServer().getPluginManager().callEvent(ev); - if (ev.isCancelled()) { - if (!Settings.noConsoleSpam) - ConsoleLogger.info("ProtectInventoryEvent has been cancelled for " + player.getName() + " ..."); - } else { - API.setPlayerInventory(player, ev.getEmptyInventory(), ev.getEmptyArmor()); - } - } catch (NullPointerException ex) { - } + if (Settings.protectInventoryBeforeLogInEnabled) { + try { + LimboPlayer limbo = LimboCache.getInstance().getLimboPlayer( + player.getName().toLowerCase()); + ProtectInventoryEvent ev = new ProtectInventoryEvent(player, + limbo.getInventory(), limbo.getArmour()); + plugin.getServer().getPluginManager().callEvent(ev); + if (ev.isCancelled()) { + if (!Settings.noConsoleSpam) ConsoleLogger + .info("ProtectInventoryEvent has been cancelled for " + + player.getName() + " ..."); + } else { + API.setPlayerInventory(player, ev.getEmptyInventory(), + ev.getEmptyArmor()); + } + } catch (NullPointerException ex) { + } } String[] msg; - if(Settings.emailRegistration) { - msg = data.isAuthAvailable(name) ? m._("login_msg") : m._("reg_email_msg"); + if (Settings.emailRegistration) { + msg = data.isAuthAvailable(name) ? m._("login_msg") : m + ._("reg_email_msg"); } else { - msg = data.isAuthAvailable(name) ? m._("login_msg") : m._("reg_msg"); + msg = data.isAuthAvailable(name) ? m._("login_msg") : m + ._("reg_msg"); } int time = Settings.getRegistrationTimeout * 20; int msgInterval = Settings.getWarnMessageInterval; if (time != 0) { - int id = sched.scheduleSyncDelayedTask(plugin, new TimeoutTask(plugin, name), time); - if(!LimboCache.getInstance().hasLimboPlayer(name)) - LimboCache.getInstance().addLimboPlayer(player); + int id = sched.scheduleSyncDelayedTask(plugin, new TimeoutTask( + plugin, name), time); + if (!LimboCache.getInstance().hasLimboPlayer(name)) LimboCache + .getInstance().addLimboPlayer(player); LimboCache.getInstance().getLimboPlayer(name).setTimeoutTaskId(id); } - if(!LimboCache.getInstance().hasLimboPlayer(name)) - LimboCache.getInstance().addLimboPlayer(player); + if (!LimboCache.getInstance().hasLimboPlayer(name)) LimboCache + .getInstance().addLimboPlayer(player); if (data.isAuthAvailable(name)) { - utils.setGroup(player, groupType.NOTLOGGEDIN); + utils.setGroup(player, groupType.NOTLOGGEDIN); } else { - utils.setGroup(player, groupType.UNREGISTERED); + utils.setGroup(player, groupType.UNREGISTERED); } - if(player.isOp()) - player.setOp(false); + if (player.isOp()) player.setOp(false); if (!Settings.isMovementAllowed) { player.setAllowFlight(true); player.setFlying(true); } - int msgT = sched.scheduleSyncDelayedTask(plugin, new MessageTask(plugin, name, msg, msgInterval)); + int msgT = sched.scheduleSyncDelayedTask(plugin, new MessageTask( + plugin, name, msg, msgInterval)); LimboCache.getInstance().getLimboPlayer(name).setMessageTaskId(msgT); player.setNoDamageTicks(Settings.getRegistrationTimeout * 20); - if (Settings.useEssentialsMotd) - player.performCommand("motd"); - if (Settings.applyBlindEffect) - player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, Settings.getRegistrationTimeout * 20, 2)); - + if (Settings.useEssentialsMotd) player.performCommand("motd"); + if (Settings.applyBlindEffect) player.addPotionEffect(new PotionEffect( + PotionEffectType.BLINDNESS, + Settings.getRegistrationTimeout * 20, 2)); + // Remove the join message while the player isn't logging in if (Settings.enableProtection || Settings.delayJoinMessage) { joinMessage.put(name, event.getJoinMessage()); @@ -723,25 +762,32 @@ public class AuthMePlayerListener implements Listener { } } - private void placePlayerSafely(Player player, Location spawnLoc) { - if (!Settings.noTeleport) return; - if (Settings.isTeleportToSpawnEnabled || (Settings.isForceSpawnLocOnJoinEnabled && Settings.getForcedWorlds.contains(player.getWorld().getName()))) - return; - Block b = player.getLocation().getBlock(); - if (b.getType() == Material.PORTAL || b.getType() == Material.ENDER_PORTAL || b.getType() == Material.LAVA || b.getType() == Material.STATIONARY_LAVA) { - m._(player, "unsafe_spawn"); - player.teleport(spawnLoc); - return; - } - Block c = player.getLocation().add(0D, 1D, 0D).getBlock(); - if (c.getType() == Material.PORTAL || c.getType() == Material.ENDER_PORTAL || c.getType() == Material.LAVA || c.getType() == Material.STATIONARY_LAVA) { - m._(player, "unsafe_spawn"); - player.teleport(spawnLoc); - return; - } - } + private void placePlayerSafely(Player player, Location spawnLoc) { + if (!Settings.noTeleport) return; + if (Settings.isTeleportToSpawnEnabled + || (Settings.isForceSpawnLocOnJoinEnabled && Settings.getForcedWorlds + .contains(player.getWorld().getName()))) return; + Block b = player.getLocation().getBlock(); + if (b.getType() == Material.PORTAL + || b.getType() == Material.ENDER_PORTAL + || b.getType() == Material.LAVA + || b.getType() == Material.STATIONARY_LAVA) { + m._(player, "unsafe_spawn"); + player.teleport(spawnLoc); + return; + } + Block c = player.getLocation().add(0D, 1D, 0D).getBlock(); + if (c.getType() == Material.PORTAL + || c.getType() == Material.ENDER_PORTAL + || c.getType() == Material.LAVA + || c.getType() == Material.STATIONARY_LAVA) { + m._(player, "unsafe_spawn"); + player.teleport(spawnLoc); + return; + } + } - @EventHandler(priority = EventPriority.MONITOR) + @EventHandler(priority = EventPriority.MONITOR) public void onPlayerQuit(PlayerQuitEvent event) { if (event.getPlayer() == null) { return; @@ -751,142 +797,171 @@ public class AuthMePlayerListener implements Listener { String name = player.getName().toLowerCase(); Location loc = player.getLocation(); - if (plugin.getCitizensCommunicator().isNPC(player, plugin) || Utils.getInstance().isUnrestricted(player) || CombatTagComunicator.isNPC(player)) { + if (plugin.getCitizensCommunicator().isNPC(player, plugin) + || Utils.getInstance().isUnrestricted(player) + || CombatTagComunicator.isNPC(player)) { return; } String ip = plugin.getIP(player); if (PlayerCache.getInstance().isAuthenticated(name) && !player.isDead()) { - if(Settings.isSaveQuitLocationEnabled && data.isAuthAvailable(name)) { - final PlayerAuth auth = new PlayerAuth(name,loc.getX(),loc.getY(),loc.getZ(),loc.getWorld().getName()); - try { - data.updateQuitLoc(auth); - } catch (NullPointerException npe) { } - } - PlayerAuth auth = new PlayerAuth(name, ip, System.currentTimeMillis()); - data.updateSession(auth); + if (Settings.isSaveQuitLocationEnabled + && data.isAuthAvailable(name)) { + final PlayerAuth auth = new PlayerAuth(name, loc.getX(), + loc.getY(), loc.getZ(), loc.getWorld().getName()); + try { + data.updateQuitLoc(auth); + } catch (NullPointerException npe) { + } + } + PlayerAuth auth = new PlayerAuth(name, ip, + System.currentTimeMillis()); + data.updateSession(auth); } - if (data.getAuth(name) != null && !PlayerCache.getInstance().isAuthenticated(name) && Settings.enableProtection) - event.setQuitMessage(null); + if (data.getAuth(name) != null + && !PlayerCache.getInstance().isAuthenticated(name) + && Settings.enableProtection) event.setQuitMessage(null); if (LimboCache.getInstance().hasLimboPlayer(name)) { LimboPlayer limbo = LimboCache.getInstance().getLimboPlayer(name); - if(Settings.protectInventoryBeforeLogInEnabled && player.hasPlayedBefore()) { - RestoreInventoryEvent ev = new RestoreInventoryEvent(player, limbo.getInventory(), limbo.getArmour()); - plugin.getServer().getPluginManager().callEvent(ev); - if (!ev.isCancelled()) { - API.setPlayerInventory(player, ev.getInventory(), ev.getArmor()); - } + if (Settings.protectInventoryBeforeLogInEnabled + && player.hasPlayedBefore()) { + RestoreInventoryEvent ev = new RestoreInventoryEvent(player, + limbo.getInventory(), limbo.getArmour()); + plugin.getServer().getPluginManager().callEvent(ev); + if (!ev.isCancelled()) { + API.setPlayerInventory(player, ev.getInventory(), + ev.getArmor()); + } } utils.addNormal(player, limbo.getGroup()); player.setOp(limbo.getOperator()); - if (player.getGameMode() != GameMode.CREATIVE && !Settings.isMovementAllowed) { + if (player.getGameMode() != GameMode.CREATIVE + && !Settings.isMovementAllowed) { player.setAllowFlight(limbo.isFlying()); player.setFlying(limbo.isFlying()); } - this.plugin.getServer().getScheduler().cancelTask(limbo.getTimeoutTaskId()); - this.plugin.getServer().getScheduler().cancelTask(limbo.getMessageTaskId()); + this.plugin.getServer().getScheduler() + .cancelTask(limbo.getTimeoutTaskId()); + this.plugin.getServer().getScheduler() + .cancelTask(limbo.getMessageTaskId()); LimboCache.getInstance().deleteLimboPlayer(name); - if(playerBackup.doesCacheExist(name)) { - playerBackup.removeCache(name); + if (playerBackup.doesCacheExist(name)) { + playerBackup.removeCache(name); } } - PlayerCache.getInstance().removePlayer(name); - data.setUnlogged(name); + PlayerCache.getInstance().removePlayer(name); + data.setUnlogged(name); try { - player.getVehicle().eject(); + player.getVehicle().eject(); } catch (NullPointerException ex) { } if (gameMode.containsKey(name)) gameMode.remove(name); player.saveData(); } - @EventHandler(priority=EventPriority.MONITOR) + @EventHandler(priority = EventPriority.MONITOR) public void onPlayerKick(PlayerKickEvent event) { - if (event.getPlayer() == null) { - return; - } - if (event.isCancelled()) { - return; - } + if (event.getPlayer() == null) { + return; + } + if (event.isCancelled()) { + return; + } - Player player = event.getPlayer(); - Location loc = player.getLocation(); + Player player = event.getPlayer(); + Location loc = player.getLocation(); - if ((plugin.getCitizensCommunicator().isNPC(player, plugin)) || (Utils.getInstance().isUnrestricted(player)) || (CombatTagComunicator.isNPC(player))) { - return; - } + if ((plugin.getCitizensCommunicator().isNPC(player, plugin)) + || (Utils.getInstance().isUnrestricted(player)) + || (CombatTagComunicator.isNPC(player))) { + return; + } - if ((Settings.isForceSingleSessionEnabled) && - (event.getReason().contains("You logged in from another location"))) { - event.setCancelled(true); - return; - } + if ((Settings.isForceSingleSessionEnabled) + && (event.getReason() + .contains("You logged in from another location"))) { + event.setCancelled(true); + return; + } - String name = player.getName().toLowerCase(); + String name = player.getName().toLowerCase(); - String ip = plugin.getIP(player); - if ((PlayerCache.getInstance().isAuthenticated(name)) && (!player.isDead())) { - if ((Settings.isSaveQuitLocationEnabled) && data.isAuthAvailable(name)){ - final PlayerAuth auth = new PlayerAuth(name, loc.getX(), loc.getY(), loc.getZ(),loc.getWorld().getName()); - try { - data.updateQuitLoc(auth); - } catch (NullPointerException npe) { } - } - PlayerAuth auth = new PlayerAuth(name, ip, System.currentTimeMillis()); - data.updateSession(auth); - } + String ip = plugin.getIP(player); + if ((PlayerCache.getInstance().isAuthenticated(name)) + && (!player.isDead())) { + if ((Settings.isSaveQuitLocationEnabled) + && data.isAuthAvailable(name)) { + final PlayerAuth auth = new PlayerAuth(name, loc.getX(), + loc.getY(), loc.getZ(), loc.getWorld().getName()); + try { + data.updateQuitLoc(auth); + } catch (NullPointerException npe) { + } + } + PlayerAuth auth = new PlayerAuth(name, ip, + System.currentTimeMillis()); + data.updateSession(auth); + } - if (data.getAuth(name) != null && !PlayerCache.getInstance().isAuthenticated(name) && Settings.enableProtection) - event.setLeaveMessage(null); + if (data.getAuth(name) != null + && !PlayerCache.getInstance().isAuthenticated(name) + && Settings.enableProtection) event.setLeaveMessage(null); - if (LimboCache.getInstance().hasLimboPlayer(name)) - { - LimboPlayer limbo = LimboCache.getInstance().getLimboPlayer(name); - if (Settings.protectInventoryBeforeLogInEnabled) { - try { - RestoreInventoryEvent ev = new RestoreInventoryEvent(player, limbo.getInventory(), limbo.getArmour()); - plugin.getServer().getPluginManager().callEvent(ev); - if (!ev.isCancelled()) { - API.setPlayerInventory(player, ev.getInventory(), ev.getArmor()); - } - } catch (NullPointerException npe){ - ConsoleLogger.showError("Problem while restore " + name + " inventory after a kick"); - } - } - if (!Settings.noTeleport) - try { - AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(player, limbo.getLoc()); - plugin.getServer().getPluginManager().callEvent(tpEvent); - if(!tpEvent.isCancelled()) { - if (player != null && player.isOnline() && tpEvent.getTo() != null) { - player.teleport(tpEvent.getTo()); - } - } - } catch (NullPointerException npe) { - } - this.utils.addNormal(player, limbo.getGroup()); - player.setOp(limbo.getOperator()); - if (player.getGameMode() != GameMode.CREATIVE && !Settings.isMovementAllowed) { - player.setAllowFlight(limbo.isFlying()); - player.setFlying(limbo.isFlying()); - } - this.plugin.getServer().getScheduler().cancelTask(limbo.getTimeoutTaskId()); - this.plugin.getServer().getScheduler().cancelTask(limbo.getMessageTaskId()); - LimboCache.getInstance().deleteLimboPlayer(name); - if (this.playerBackup.doesCacheExist(name)) { - this.playerBackup.removeCache(name); - } - } - PlayerCache.getInstance().removePlayer(name); - data.setUnlogged(name); - if (gameMode.containsKey(name)) gameMode.remove(name); - try { - player.getVehicle().eject(); - } catch (NullPointerException ex) {} - player.saveData(); + if (LimboCache.getInstance().hasLimboPlayer(name)) { + LimboPlayer limbo = LimboCache.getInstance().getLimboPlayer(name); + if (Settings.protectInventoryBeforeLogInEnabled) { + try { + RestoreInventoryEvent ev = new RestoreInventoryEvent( + player, limbo.getInventory(), limbo.getArmour()); + plugin.getServer().getPluginManager().callEvent(ev); + if (!ev.isCancelled()) { + API.setPlayerInventory(player, ev.getInventory(), + ev.getArmor()); + } + } catch (NullPointerException npe) { + ConsoleLogger.showError("Problem while restore " + name + + " inventory after a kick"); + } + } + if (!Settings.noTeleport) try { + AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(player, + limbo.getLoc()); + plugin.getServer().getPluginManager().callEvent(tpEvent); + if (!tpEvent.isCancelled()) { + if (player != null && player.isOnline() + && tpEvent.getTo() != null) { + player.teleport(tpEvent.getTo()); + } + } + } catch (NullPointerException npe) { + } + this.utils.addNormal(player, limbo.getGroup()); + player.setOp(limbo.getOperator()); + if (player.getGameMode() != GameMode.CREATIVE + && !Settings.isMovementAllowed) { + player.setAllowFlight(limbo.isFlying()); + player.setFlying(limbo.isFlying()); + } + this.plugin.getServer().getScheduler() + .cancelTask(limbo.getTimeoutTaskId()); + this.plugin.getServer().getScheduler() + .cancelTask(limbo.getMessageTaskId()); + LimboCache.getInstance().deleteLimboPlayer(name); + if (this.playerBackup.doesCacheExist(name)) { + this.playerBackup.removeCache(name); + } + } + PlayerCache.getInstance().removePlayer(name); + data.setUnlogged(name); + if (gameMode.containsKey(name)) gameMode.remove(name); + try { + player.getVehicle().eject(); + } catch (NullPointerException ex) { + } + player.saveData(); } @EventHandler(priority = EventPriority.MONITOR) @@ -902,16 +977,16 @@ public class AuthMePlayerListener implements Listener { return; } - if(plugin.getCitizensCommunicator().isNPC(player, plugin)) - return; + if (plugin.getCitizensCommunicator().isNPC(player, plugin)) return; - if (PlayerCache.getInstance().isAuthenticated(player.getName().toLowerCase())) { + if (PlayerCache.getInstance().isAuthenticated( + player.getName().toLowerCase())) { return; } if (!data.isAuthAvailable(name)) { - if (!Settings.isForcedRegistrationEnabled) { - return; + if (!Settings.isForcedRegistrationEnabled) { + return; } } @@ -929,10 +1004,10 @@ public class AuthMePlayerListener implements Listener { return; } - if(plugin.getCitizensCommunicator().isNPC(player, plugin)) - return; + if (plugin.getCitizensCommunicator().isNPC(player, plugin)) return; - if (PlayerCache.getInstance().isAuthenticated(player.getName().toLowerCase())) { + if (PlayerCache.getInstance().isAuthenticated( + player.getName().toLowerCase())) { return; } @@ -941,8 +1016,9 @@ public class AuthMePlayerListener implements Listener { return; } } - if (event.getClickedBlock() != null && event.getClickedBlock().getType() != Material.AIR) - event.setUseInteractedBlock(org.bukkit.event.Event.Result.DENY); + if (event.getClickedBlock() != null + && event.getClickedBlock().getType() != Material.AIR) event + .setUseInteractedBlock(org.bukkit.event.Event.Result.DENY); event.setUseItemInHand(org.bukkit.event.Event.Result.DENY); event.setCancelled(true); } @@ -957,10 +1033,10 @@ public class AuthMePlayerListener implements Listener { return; } - if(plugin.getCitizensCommunicator().isNPC(player, plugin)) - return; + if (plugin.getCitizensCommunicator().isNPC(player, plugin)) return; - if (PlayerCache.getInstance().isAuthenticated(player.getName().toLowerCase())) { + if (PlayerCache.getInstance().isAuthenticated( + player.getName().toLowerCase())) { return; } @@ -984,10 +1060,10 @@ public class AuthMePlayerListener implements Listener { return; } - if(plugin.getCitizensCommunicator().isNPC(player, plugin)) - return; + if (plugin.getCitizensCommunicator().isNPC(player, plugin)) return; - if (PlayerCache.getInstance().isAuthenticated(player.getName().toLowerCase())) { + if (PlayerCache.getInstance().isAuthenticated( + player.getName().toLowerCase())) { return; } @@ -1009,11 +1085,14 @@ public class AuthMePlayerListener implements Listener { Player player = event.getPlayer(); String name = player.getName().toLowerCase(); - if (plugin.getCitizensCommunicator().isNPC(player, plugin) || Utils.getInstance().isUnrestricted(player) || CombatTagComunicator.isNPC(player)) { + if (plugin.getCitizensCommunicator().isNPC(player, plugin) + || Utils.getInstance().isUnrestricted(player) + || CombatTagComunicator.isNPC(player)) { return; } - if (PlayerCache.getInstance().isAuthenticated(player.getName().toLowerCase())) { + if (PlayerCache.getInstance().isAuthenticated( + player.getName().toLowerCase())) { return; } @@ -1033,14 +1112,15 @@ public class AuthMePlayerListener implements Listener { Player player = event.getPlayer(); String name = player.getName().toLowerCase(); - if (Utils.getInstance().isUnrestricted(player) || CombatTagComunicator.isNPC(player)) { + if (Utils.getInstance().isUnrestricted(player) + || CombatTagComunicator.isNPC(player)) { return; } - if(plugin.getCitizensCommunicator().isNPC(player, plugin)) - return; + if (plugin.getCitizensCommunicator().isNPC(player, plugin)) return; - if (PlayerCache.getInstance().isAuthenticated(player.getName().toLowerCase())) { + if (PlayerCache.getInstance().isAuthenticated( + player.getName().toLowerCase())) { return; } @@ -1064,7 +1144,8 @@ public class AuthMePlayerListener implements Listener { return; } - if (PlayerCache.getInstance().isAuthenticated(player.getName().toLowerCase())) { + if (PlayerCache.getInstance().isAuthenticated( + player.getName().toLowerCase())) { return; } @@ -1106,60 +1187,49 @@ public class AuthMePlayerListener implements Listener { Player player = event.getPlayer(); String name = player.getName().toLowerCase(); - if (Utils.getInstance().isUnrestricted(player) || CombatTagComunicator.isNPC(player)) - return; + if (Utils.getInstance().isUnrestricted(player) + || CombatTagComunicator.isNPC(player)) return; - if(plugin.getCitizensCommunicator().isNPC(player, plugin)) - return; + if (plugin.getCitizensCommunicator().isNPC(player, plugin)) return; - if (PlayerCache.getInstance().isAuthenticated(name)) - return; + if (PlayerCache.getInstance().isAuthenticated(name)) return; + + if (!data.isAuthAvailable(name)) if (!Settings.isForcedRegistrationEnabled) return; - if (!data.isAuthAvailable(name)) - if (!Settings.isForcedRegistrationEnabled) - return; - Location spawn = plugin.getSpawnLocation(player); - if(Settings.isSaveQuitLocationEnabled && data.isAuthAvailable(name)) { - final PlayerAuth auth = new PlayerAuth(name,spawn.getX(),spawn.getY(),spawn.getZ(),spawn.getWorld().getName()); - try { - data.updateQuitLoc(auth); - } catch (NullPointerException npe) { } - } + if (Settings.isSaveQuitLocationEnabled && data.isAuthAvailable(name)) { + final PlayerAuth auth = new PlayerAuth(name, spawn.getX(), + spawn.getY(), spawn.getZ(), spawn.getWorld().getName()); + try { + data.updateQuitLoc(auth); + } catch (NullPointerException npe) { + } + } event.setRespawnLocation(spawn); } - @EventHandler (priority = EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.HIGHEST) public void onPlayerGameModeChange(PlayerGameModeChangeEvent event) { - if (event.isCancelled()) - return; - if (event.getPlayer() == null || event == null) - return; - if (!Settings.isForceSurvivalModeEnabled) - return; + if (event.isCancelled()) return; + if (event.getPlayer() == null || event == null) return; + if (!Settings.isForceSurvivalModeEnabled) return; Player player = event.getPlayer(); - - if (plugin.authmePermissible(player, "authme.bypassforcesurvival")) - return; + + if (plugin.authmePermissible(player, "authme.bypassforcesurvival")) return; String name = player.getName().toLowerCase(); - if (Utils.getInstance().isUnrestricted(player) || CombatTagComunicator.isNPC(player)) - return; + if (Utils.getInstance().isUnrestricted(player) + || CombatTagComunicator.isNPC(player)) return; - if(plugin.getCitizensCommunicator().isNPC(player, plugin)) - return; + if (plugin.getCitizensCommunicator().isNPC(player, plugin)) return; - if (PlayerCache.getInstance().isAuthenticated(name)) - return; + if (PlayerCache.getInstance().isAuthenticated(name)) return; - if (!data.isAuthAvailable(name)) - if (!Settings.isForcedRegistrationEnabled) - return; - - if (this.causeByAuthMe) - return; + if (!data.isAuthAvailable(name)) if (!Settings.isForcedRegistrationEnabled) return; + + if (this.causeByAuthMe) return; event.setCancelled(true); } } diff --git a/src/main/java/fr/xephi/authme/listener/AuthMeServerListener.java b/src/main/java/fr/xephi/authme/listener/AuthMeServerListener.java index 42eed321..29dbcf48 100644 --- a/src/main/java/fr/xephi/authme/listener/AuthMeServerListener.java +++ b/src/main/java/fr/xephi/authme/listener/AuthMeServerListener.java @@ -18,80 +18,80 @@ public class AuthMeServerListener implements Listener { private Messages m = Messages.getInstance(); public AuthMeServerListener(AuthMe plugin) { - this.plugin = plugin; + this.plugin = plugin; } @EventHandler(priority = EventPriority.HIGHEST) public void onServerPing(ServerListPingEvent event) { - if (!Settings.enableProtection) return; - if (Settings.countries.isEmpty()) return; - if (!Settings.countriesBlacklist.isEmpty()) { - if(Settings.countriesBlacklist.contains(plugin.getCountryCode(event.getAddress().getHostAddress()))) - event.setMotd(m._("country_banned")[0]); - } - if(Settings.countries.contains(plugin.getCountryCode(event.getAddress().getHostAddress()))) { - event.setMotd(plugin.getServer().getMotd()); - } else { - event.setMotd(m._("country_banned")[0]); - } + if (!Settings.enableProtection) return; + if (Settings.countries.isEmpty()) return; + if (!Settings.countriesBlacklist.isEmpty()) { + if (Settings.countriesBlacklist.contains(plugin + .getCountryCode(event.getAddress().getHostAddress()))) event + .setMotd(m._("country_banned")[0]); + } + if (Settings.countries.contains(plugin.getCountryCode(event + .getAddress().getHostAddress()))) { + event.setMotd(plugin.getServer().getMotd()); + } else { + event.setMotd(m._("country_banned")[0]); + } } @EventHandler(priority = EventPriority.HIGHEST) public void onPluginDisable(PluginDisableEvent event) { - String pluginName = event.getPlugin().getName(); - if(pluginName.equalsIgnoreCase("Essentials")) { - plugin.ess = null; - ConsoleLogger.info("Essentials has been disabled, unhook!"); - return; - } - if(pluginName.equalsIgnoreCase("EssentialsSpawn")) { - plugin.essentialsSpawn = null; - ConsoleLogger.info("EssentialsSpawn has been disabled, unhook!"); - return; - } - if(pluginName.equalsIgnoreCase("Multiverse-Core")) { - plugin.multiverse = null; - ConsoleLogger.info("Multiverse-Core has been disabled, unhook!"); - return; - } - if(pluginName.equalsIgnoreCase("Notifications")) { - plugin.notifications = null; - ConsoleLogger.info("Notifications has been disabled, unhook!"); - } - if(pluginName.equalsIgnoreCase("ChestShop")) { - plugin.ChestShop = 0; - ConsoleLogger.info("ChestShop has been disabled, unhook!"); - } - if(pluginName.equalsIgnoreCase("CombatTag")) { - plugin.CombatTag = 0; - ConsoleLogger.info("CombatTag has been disabled, unhook!"); - } - if(pluginName.equalsIgnoreCase("Citizens")) { - plugin.CitizensVersion = 0; - ConsoleLogger.info("Citizens has been disabled, unhook!"); - } - if(pluginName.equalsIgnoreCase("Vault")) { - plugin.permission = null; - ConsoleLogger.showError("Vault has been disabled, unhook permissions!"); - } + String pluginName = event.getPlugin().getName(); + if (pluginName.equalsIgnoreCase("Essentials")) { + plugin.ess = null; + ConsoleLogger.info("Essentials has been disabled, unhook!"); + return; + } + if (pluginName.equalsIgnoreCase("EssentialsSpawn")) { + plugin.essentialsSpawn = null; + ConsoleLogger.info("EssentialsSpawn has been disabled, unhook!"); + return; + } + if (pluginName.equalsIgnoreCase("Multiverse-Core")) { + plugin.multiverse = null; + ConsoleLogger.info("Multiverse-Core has been disabled, unhook!"); + return; + } + if (pluginName.equalsIgnoreCase("Notifications")) { + plugin.notifications = null; + ConsoleLogger.info("Notifications has been disabled, unhook!"); + } + if (pluginName.equalsIgnoreCase("ChestShop")) { + plugin.ChestShop = 0; + ConsoleLogger.info("ChestShop has been disabled, unhook!"); + } + if (pluginName.equalsIgnoreCase("CombatTag")) { + plugin.CombatTag = 0; + ConsoleLogger.info("CombatTag has been disabled, unhook!"); + } + if (pluginName.equalsIgnoreCase("Citizens")) { + plugin.CitizensVersion = 0; + ConsoleLogger.info("Citizens has been disabled, unhook!"); + } + if (pluginName.equalsIgnoreCase("Vault")) { + plugin.permission = null; + ConsoleLogger + .showError("Vault has been disabled, unhook permissions!"); + } } @EventHandler(priority = EventPriority.HIGHEST) public void onPluginEnable(PluginEnableEvent event) { - String pluginName = event.getPlugin().getName(); - if(pluginName.equalsIgnoreCase("Essentials") || pluginName.equalsIgnoreCase("EssentialsSpawn")) - plugin.checkEssentials(); - if(pluginName.equalsIgnoreCase("Multiverse-Core")) - plugin.checkMultiverse(); - if(pluginName.equalsIgnoreCase("Notifications")) - plugin.checkNotifications(); - if(pluginName.equalsIgnoreCase("ChestShop")) - plugin.checkChestShop(); - if(pluginName.equalsIgnoreCase("CombatTag")) - plugin.combatTag(); - if(pluginName.equalsIgnoreCase("Citizens")) - plugin.citizensVersion(); - if(pluginName.equalsIgnoreCase("Vault")) - plugin.checkVault(); + String pluginName = event.getPlugin().getName(); + if (pluginName.equalsIgnoreCase("Essentials") + || pluginName.equalsIgnoreCase("EssentialsSpawn")) plugin + .checkEssentials(); + if (pluginName.equalsIgnoreCase("Multiverse-Core")) plugin + .checkMultiverse(); + if (pluginName.equalsIgnoreCase("Notifications")) plugin + .checkNotifications(); + if (pluginName.equalsIgnoreCase("ChestShop")) plugin.checkChestShop(); + if (pluginName.equalsIgnoreCase("CombatTag")) plugin.combatTag(); + if (pluginName.equalsIgnoreCase("Citizens")) plugin.citizensVersion(); + if (pluginName.equalsIgnoreCase("Vault")) plugin.checkVault(); } } diff --git a/src/main/java/fr/xephi/authme/listener/AuthMeSpoutListener.java b/src/main/java/fr/xephi/authme/listener/AuthMeSpoutListener.java index 8d7776c1..fe29b711 100644 --- a/src/main/java/fr/xephi/authme/listener/AuthMeSpoutListener.java +++ b/src/main/java/fr/xephi/authme/listener/AuthMeSpoutListener.java @@ -10,18 +10,21 @@ import fr.xephi.authme.gui.screens.LoginScreen; import fr.xephi.authme.settings.SpoutCfg; public class AuthMeSpoutListener implements Listener { - private DataSource data; + private DataSource data; public AuthMeSpoutListener(DataSource data) { - this.data = 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())); - } - } - } + @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())); + } + } + } } diff --git a/src/main/java/fr/xephi/authme/plugin/manager/BungeeCordMessage.java b/src/main/java/fr/xephi/authme/plugin/manager/BungeeCordMessage.java index 8d533eb3..f7ad284c 100644 --- a/src/main/java/fr/xephi/authme/plugin/manager/BungeeCordMessage.java +++ b/src/main/java/fr/xephi/authme/plugin/manager/BungeeCordMessage.java @@ -13,25 +13,27 @@ public class BungeeCordMessage implements PluginMessageListener { public AuthMe plugin; - public BungeeCordMessage(AuthMe plugin) - { + public BungeeCordMessage(AuthMe plugin) { this.plugin = plugin; } @Override - public void onPluginMessageReceived(String channel, Player player, byte[] message) { + public void onPluginMessageReceived(String channel, Player player, + byte[] message) { if (!channel.equals("BungeeCord")) { return; } try { - final DataInputStream in = new DataInputStream(new ByteArrayInputStream(message)); + final DataInputStream in = new DataInputStream( + new ByteArrayInputStream(message)); String subchannel = in.readUTF(); - if (subchannel.equals("IP")) { //We need only the IP channel - String ip = in.readUTF(); - plugin.realIp.put(player.getName().toLowerCase(), ip); //Put the IP (only the ip not the port) in the hashmap + if (subchannel.equals("IP")) { // We need only the IP channel + String ip = in.readUTF(); + plugin.realIp.put(player.getName().toLowerCase(), ip); + // Put the IP (only the ip not the port) in the hashmap } } catch (IOException ex) { } } -} \ No newline at end of file +} diff --git a/src/main/java/fr/xephi/authme/plugin/manager/CitizensCommunicator.java b/src/main/java/fr/xephi/authme/plugin/manager/CitizensCommunicator.java index a2c67a20..a1ec110b 100644 --- a/src/main/java/fr/xephi/authme/plugin/manager/CitizensCommunicator.java +++ b/src/main/java/fr/xephi/authme/plugin/manager/CitizensCommunicator.java @@ -12,22 +12,22 @@ public class CitizensCommunicator { public AuthMe instance; public CitizensCommunicator(AuthMe instance) { - this.instance = instance; + this.instance = instance; } public boolean isNPC(final Entity player, AuthMe instance) { - try { - if (instance.CitizensVersion == 1) { - return CitizensManager.isNPC(player); - } else if (instance.CitizensVersion == 2) { - return CitizensAPI.getNPCRegistry().isNPC(player); - } else { - return false; - } - } catch (NoClassDefFoundError ncdfe) { - return false; - } catch (Exception npe) { - return false; - } + try { + if (instance.CitizensVersion == 1) { + return CitizensManager.isNPC(player); + } else if (instance.CitizensVersion == 2) { + return CitizensAPI.getNPCRegistry().isNPC(player); + } else { + return false; + } + } catch (NoClassDefFoundError ncdfe) { + return false; + } catch (Exception npe) { + return false; + } } } diff --git a/src/main/java/fr/xephi/authme/plugin/manager/CombatTagComunicator.java b/src/main/java/fr/xephi/authme/plugin/manager/CombatTagComunicator.java index f3c57651..e16baf20 100644 --- a/src/main/java/fr/xephi/authme/plugin/manager/CombatTagComunicator.java +++ b/src/main/java/fr/xephi/authme/plugin/manager/CombatTagComunicator.java @@ -12,13 +12,15 @@ public abstract class CombatTagComunicator { /** * 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")); + if (Bukkit.getServer().getPluginManager().getPlugin("CombatTag") != null) { + combatApi = new CombatTagApi((CombatTag) Bukkit.getServer() + .getPluginManager().getPlugin("CombatTag")); try { combatApi.getClass().getMethod("isNPC"); } catch (Exception e) { diff --git a/src/main/java/fr/xephi/authme/plugin/manager/EssSpawn.java b/src/main/java/fr/xephi/authme/plugin/manager/EssSpawn.java index 0b593a4e..7ab5a089 100644 --- a/src/main/java/fr/xephi/authme/plugin/manager/EssSpawn.java +++ b/src/main/java/fr/xephi/authme/plugin/manager/EssSpawn.java @@ -9,32 +9,39 @@ import fr.xephi.authme.settings.CustomConfiguration; public class EssSpawn extends CustomConfiguration { - private static EssSpawn spawn; + private static EssSpawn spawn; - public EssSpawn() { - super(new File("./plugins/Essentials/spawn.yml")); - spawn = this; - load(); - } + public EssSpawn() { + super(new File("./plugins/Essentials/spawn.yml")); + spawn = this; + load(); + } - public static EssSpawn getInstance() { + public static EssSpawn getInstance() { if (spawn == null) { spawn = new EssSpawn(); - } + } return spawn; } - public Location getLocation() { - try { - if (!this.contains("spawns.default.world")) return null; - if (this.getString("spawns.default.world").isEmpty() || this.getString("spawns.default.world") == "") return null; - Location location = new Location(Bukkit.getWorld(this.getString("spawns.default.world")), this.getDouble("spawns.default.x"), this.getDouble("spawns.default.y"), this.getDouble("spawns.default.z"), Float.parseFloat(this.getString("spawns.default.yaw")), Float.parseFloat(this.getString("spawns.default.pitch"))); - return location; - } catch (NullPointerException npe) { - return null; - } catch (NumberFormatException nfe) { - return null; - } - } + public Location getLocation() { + try { + if (!this.contains("spawns.default.world")) return null; + if (this.getString("spawns.default.world").isEmpty() + || this.getString("spawns.default.world") == "") return null; + Location location = new Location(Bukkit.getWorld(this + .getString("spawns.default.world")), + this.getDouble("spawns.default.x"), + this.getDouble("spawns.default.y"), + this.getDouble("spawns.default.z"), Float.parseFloat(this + .getString("spawns.default.yaw")), + Float.parseFloat(this.getString("spawns.default.pitch"))); + return location; + } catch (NullPointerException npe) { + return null; + } catch (NumberFormatException nfe) { + return null; + } + } } diff --git a/src/main/java/fr/xephi/authme/process/Management.java b/src/main/java/fr/xephi/authme/process/Management.java index 5f463908..fc52dd74 100644 --- a/src/main/java/fr/xephi/authme/process/Management.java +++ b/src/main/java/fr/xephi/authme/process/Management.java @@ -12,7 +12,8 @@ import fr.xephi.authme.settings.Settings; /** * - * @authors Xephi59, Possible + * @authors Xephi59, Possible * */ public class Management extends Thread { @@ -30,11 +31,15 @@ public class Management extends Thread { public void run() { } - public void performLogin(final Player player, final String password, final boolean forceLogin) { - new AsyncronousLogin(player, password, forceLogin, plugin, database).process(); + public void performLogin(final Player player, final String password, + final boolean forceLogin) { + new AsyncronousLogin(player, password, forceLogin, plugin, database) + .process(); } - public void performRegister(final Player player, final String password, final String email) { - new AsyncronousRegister(player, password, email, plugin, database).process(); + public void performRegister(final Player player, final String password, + final String email) { + new AsyncronousRegister(player, password, email, plugin, database) + .process(); } } diff --git a/src/main/java/fr/xephi/authme/process/login/AsyncronousLogin.java b/src/main/java/fr/xephi/authme/process/login/AsyncronousLogin.java index d3b9f691..a72a5051 100644 --- a/src/main/java/fr/xephi/authme/process/login/AsyncronousLogin.java +++ b/src/main/java/fr/xephi/authme/process/login/AsyncronousLogin.java @@ -32,7 +32,8 @@ public class AsyncronousLogin { private static RandomString rdm = new RandomString(Settings.captchaLength); private Messages m = Messages.getInstance(); - public AsyncronousLogin(Player player, String password, boolean forceLogin, AuthMe plugin, DataSource data) { + public AsyncronousLogin(Player player, String password, boolean forceLogin, + AuthMe plugin, DataSource data) { this.player = player; this.password = password; name = player.getName().toLowerCase(); @@ -43,8 +44,9 @@ public class AsyncronousLogin { } protected String getIP() { - return plugin.getIP(player); + return plugin.getIP(player); } + protected boolean needsCaptcha() { if (Settings.useCaptcha) { if (!plugin.captcha.containsKey(name)) { @@ -54,13 +56,17 @@ public class AsyncronousLogin { plugin.captcha.remove(name); plugin.captcha.put(name, i); } - if (plugin.captcha.containsKey(name) && plugin.captcha.get(name) >= Settings.maxLoginTry) { + if (plugin.captcha.containsKey(name) + && plugin.captcha.get(name) >= Settings.maxLoginTry) { plugin.cap.put(name, rdm.nextString()); for (String s : m._("usage_captcha")) { - player.sendMessage(s.replace("THE_CAPTCHA", plugin.cap.get(name)).replace("", plugin.cap.get(name))); + player.sendMessage(s.replace("THE_CAPTCHA", + plugin.cap.get(name)).replace("", + plugin.cap.get(name))); } return true; - } else if (plugin.captcha.containsKey(name) && plugin.captcha.get(name) >= Settings.maxLoginTry) { + } else if (plugin.captcha.containsKey(name) + && plugin.captcha.get(name) >= Settings.maxLoginTry) { try { plugin.captcha.remove(name); plugin.cap.remove(name); @@ -72,41 +78,52 @@ public class AsyncronousLogin { } /** - * Checks the precondition for authentication (like user known) and returns the playerAuth-State + * Checks the precondition for authentication (like user known) and returns + * the playerAuth-State */ protected PlayerAuth preAuth() { if (PlayerCache.getInstance().isAuthenticated(name)) { - m._(player, "logged_in"); + m._(player, "logged_in"); return null; } if (!database.isAuthAvailable(name)) { - m._(player, "user_unknown"); - if(LimboCache.getInstance().hasLimboPlayer(name)) { - Bukkit.getScheduler().cancelTask(LimboCache.getInstance().getLimboPlayer(name).getMessageTaskId()); - String[] msg; - if(Settings.emailRegistration) { - msg = m._("reg_email_msg"); + m._(player, "user_unknown"); + if (LimboCache.getInstance().hasLimboPlayer(name)) { + Bukkit.getScheduler().cancelTask( + LimboCache.getInstance().getLimboPlayer(name) + .getMessageTaskId()); + String[] msg; + if (Settings.emailRegistration) { + msg = m._("reg_email_msg"); } else { - msg = m._("reg_msg"); + msg = m._("reg_msg"); } - int msgT = Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new MessageTask(plugin, name, msg, Settings.getWarnMessageInterval)); - LimboCache.getInstance().getLimboPlayer(name).setMessageTaskId(msgT); - } + int msgT = Bukkit.getScheduler().scheduleSyncDelayedTask( + plugin, + new MessageTask(plugin, name, msg, + Settings.getWarnMessageInterval)); + LimboCache.getInstance().getLimboPlayer(name) + .setMessageTaskId(msgT); + } return null; } - if (Settings.getMaxLoginPerIp > 0 && !plugin.authmePermissible(player, "authme.allow2accounts") && !getIP().equalsIgnoreCase("127.0.0.1") && !getIP().equalsIgnoreCase("localhost")) { - if (plugin.isLoggedIp(realName, getIP())) { - m._(player, "logged_in"); - return null; - } + if (Settings.getMaxLoginPerIp > 0 + && !plugin.authmePermissible(player, "authme.allow2accounts") + && !getIP().equalsIgnoreCase("127.0.0.1") + && !getIP().equalsIgnoreCase("localhost")) { + if (plugin.isLoggedIp(realName, getIP())) { + m._(player, "logged_in"); + return null; + } } PlayerAuth pAuth = database.getAuth(name); if (pAuth == null) { - m._(player, "user_unknown"); + m._(player, "user_unknown"); return null; } - if (!Settings.getMySQLColumnGroup.isEmpty() && pAuth.getGroupId() == Settings.getNonActivatedGroup) { - m._(player, "vb_nonActiv"); + if (!Settings.getMySQLColumnGroup.isEmpty() + && pAuth.getGroupId() == Settings.getNonActivatedGroup) { + m._(player, "vb_nonActiv"); return null; } return pAuth; @@ -114,22 +131,22 @@ public class AsyncronousLogin { public void process() { PlayerAuth pAuth = preAuth(); - if (pAuth == null || needsCaptcha()) - return; + if (pAuth == null || needsCaptcha()) return; String hash = pAuth.getHash(); String email = pAuth.getEmail(); boolean passwordVerified = true; - if (!forceLogin) - try { - passwordVerified = PasswordSecurity.comparePasswordWithHash(password, hash, realName); - } catch (Exception ex) { - ConsoleLogger.showError(ex.getMessage()); - m._(player, "error"); - return; - } + if (!forceLogin) try { + passwordVerified = PasswordSecurity.comparePasswordWithHash( + password, hash, realName); + } catch (Exception ex) { + ConsoleLogger.showError(ex.getMessage()); + m._(player, "error"); + return; + } if (passwordVerified && player.isOnline()) { - PlayerAuth auth = new PlayerAuth(name, hash, getIP(), new Date().getTime(), email, realName); + PlayerAuth auth = new PlayerAuth(name, hash, getIP(), + new Date().getTime(), email, realName); database.updateSession(auth); if (Settings.useCaptcha) { @@ -146,11 +163,12 @@ public class AsyncronousLogin { displayOtherAccounts(auth, player); - if (!Settings.noConsoleSpam) - ConsoleLogger.info(player.getName() + " logged in!"); + if (!Settings.noConsoleSpam) ConsoleLogger.info(player.getName() + + " logged in!"); if (plugin.notifications != null) { - plugin.notifications.showNotification(new Notification("[AuthMe] " + player.getName() + " logged in!")); + plugin.notifications.showNotification(new Notification( + "[AuthMe] " + player.getName() + " logged in!")); } // makes player isLoggedin via API @@ -158,36 +176,53 @@ public class AsyncronousLogin { database.setLogged(name); plugin.otherAccounts.addPlayer(player.getUniqueId()); - // As the scheduling executes the Task most likely after the current task, we schedule it in the end - // so that we can be sure, and have not to care if it might be processed in other order. - ProcessSyncronousPlayerLogin syncronousPlayerLogin = new ProcessSyncronousPlayerLogin(player, plugin, database); + // As the scheduling executes the Task most likely after the current + // task, we schedule it in the end + // so that we can be sure, and have not to care if it might be + // processed in other order. + ProcessSyncronousPlayerLogin syncronousPlayerLogin = new ProcessSyncronousPlayerLogin( + player, plugin, database); if (syncronousPlayerLogin.getLimbo() != null) { - player.getServer().getScheduler().cancelTask(syncronousPlayerLogin.getLimbo().getTimeoutTaskId()); - player.getServer().getScheduler().cancelTask(syncronousPlayerLogin.getLimbo().getMessageTaskId()); + player.getServer() + .getScheduler() + .cancelTask( + syncronousPlayerLogin.getLimbo() + .getTimeoutTaskId()); + player.getServer() + .getScheduler() + .cancelTask( + syncronousPlayerLogin.getLimbo() + .getMessageTaskId()); } - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, syncronousPlayerLogin); + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, + syncronousPlayerLogin); } else if (player.isOnline()) { - if (!Settings.noConsoleSpam) - ConsoleLogger.info(player.getName() + " used the wrong password"); + if (!Settings.noConsoleSpam) ConsoleLogger.info(player.getName() + + " used the wrong password"); if (Settings.isKickOnWrongPasswordEnabled) { - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - if (AuthMePlayerListener.gameMode != null && AuthMePlayerListener.gameMode.containsKey(name)) { - player.setGameMode(AuthMePlayerListener.gameMode.get(name)); - } - player.kickPlayer(m._("wrong_pwd")[0]); - } - }); + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, + new Runnable() { + @Override + public void run() { + if (AuthMePlayerListener.gameMode != null + && AuthMePlayerListener.gameMode + .containsKey(name)) { + player.setGameMode(AuthMePlayerListener.gameMode + .get(name)); + } + player.kickPlayer(m._("wrong_pwd")[0]); + } + }); } else { - m._(player, "wrong_pwd"); + m._(player, "wrong_pwd"); return; } } else { - ConsoleLogger.showError("Player " + name + " wasn't online during login process, aborted... "); + ConsoleLogger.showError("Player " + name + + " wasn't online during login process, aborted... "); } } - + public void displayOtherAccounts(PlayerAuth auth, Player p) { if (!Settings.displayOtherAccounts) { return; @@ -196,7 +231,8 @@ public class AsyncronousLogin { return; } List auths = this.database.getAllAuthsByName(auth); - //List uuidlist = plugin.otherAccounts.getAllPlayersByUUID(player.getUniqueId()); + // List uuidlist = + // plugin.otherAccounts.getAllPlayersByUUID(player.getUniqueId()); if (auths.isEmpty() || auths == null) { return; } @@ -204,7 +240,8 @@ public class AsyncronousLogin { return; } String message = "[AuthMe] "; - //String uuidaccounts = "[AuthMe] PlayerNames has %size% links to this UUID : "; + // String uuidaccounts = + // "[AuthMe] PlayerNames has %size% links to this UUID : "; int i = 0; for (String account : auths) { i++; @@ -215,23 +252,19 @@ public class AsyncronousLogin { message = message + "."; } } - /*TODO: Active uuid system - i = 0; - for (String account : uuidlist) { - i++; - uuidaccounts = uuidaccounts + account; - if (i != auths.size()) { - uuidaccounts = uuidaccounts + ", "; - } else { - uuidaccounts = uuidaccounts + "."; - } - }*/ + /* + * TODO: Active uuid system i = 0; for (String account : uuidlist) { + * i++; uuidaccounts = uuidaccounts + account; if (i != auths.size()) { + * uuidaccounts = uuidaccounts + ", "; } else { uuidaccounts = + * uuidaccounts + "."; } } + */ for (Player player : plugin.getServer().getOnlinePlayers()) { if (plugin.authmePermissible(player, "authme.seeOtherAccounts")) { - player.sendMessage("[AuthMe] The player " + auth.getNickname() + " has " - + auths.size() + " accounts"); + player.sendMessage("[AuthMe] The player " + auth.getNickname() + + " has " + auths.size() + " accounts"); player.sendMessage(message); - //player.sendMessage(uuidaccounts.replace("%size%", ""+uuidlist.size())); + // player.sendMessage(uuidaccounts.replace("%size%", + // ""+uuidlist.size())); } } } diff --git a/src/main/java/fr/xephi/authme/process/login/ProcessSyncronousPlayerLogin.java b/src/main/java/fr/xephi/authme/process/login/ProcessSyncronousPlayerLogin.java index d409dfbe..21b1a31c 100644 --- a/src/main/java/fr/xephi/authme/process/login/ProcessSyncronousPlayerLogin.java +++ b/src/main/java/fr/xephi/authme/process/login/ProcessSyncronousPlayerLogin.java @@ -33,10 +33,11 @@ public class ProcessSyncronousPlayerLogin implements Runnable { private PluginManager pm; private FileCache playerCache = new FileCache(); - public ProcessSyncronousPlayerLogin(Player player, AuthMe plugin, DataSource data) { - this.plugin = plugin; - this.database = data; - this.pm = plugin.getServer().getPluginManager(); + public ProcessSyncronousPlayerLogin(Player player, AuthMe plugin, + DataSource data) { + this.plugin = plugin; + this.database = data; + this.pm = plugin.getServer().getPluginManager(); this.player = player; this.name = player.getName().toLowerCase(); this.limbo = LimboCache.getInstance().getLimboPlayer(name); @@ -49,18 +50,21 @@ public class ProcessSyncronousPlayerLogin implements Runnable { protected void restoreOpState() { player.setOp(limbo.getOperator()); - if (player.getGameMode() != GameMode.CREATIVE && !Settings.isMovementAllowed) { + if (player.getGameMode() != GameMode.CREATIVE + && !Settings.isMovementAllowed) { player.setAllowFlight(limbo.isFlying()); player.setFlying(limbo.isFlying()); } } protected void packQuitLocation() { - Utils.getInstance().packCoords(auth.getQuitLocX(), auth.getQuitLocY(), auth.getQuitLocZ(), auth.getWorld(), player); + Utils.getInstance().packCoords(auth.getQuitLocX(), auth.getQuitLocY(), + auth.getQuitLocZ(), auth.getWorld(), player); } protected void teleportBackFromSpawn() { - AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(player, limbo.getLoc()); + AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(player, + limbo.getLoc()); pm.callEvent(tpEvent); if (!tpEvent.isCancelled()) { Location fLoc = tpEvent.getTo(); @@ -73,7 +77,8 @@ public class ProcessSyncronousPlayerLogin implements Runnable { protected void teleportToSpawn() { Location spawnL = plugin.getSpawnLocation(player); - SpawnTeleportEvent tpEvent = new SpawnTeleportEvent(player, player.getLocation(), spawnL, true); + SpawnTeleportEvent tpEvent = new SpawnTeleportEvent(player, + player.getLocation(), spawnL, true); pm.callEvent(tpEvent); if (!tpEvent.isCancelled()) { Location fLoc = tpEvent.getTo(); @@ -85,49 +90,57 @@ public class ProcessSyncronousPlayerLogin implements Runnable { } protected void restoreInventory() { - RestoreInventoryEvent event = new RestoreInventoryEvent(player, limbo.getInventory(), limbo.getArmour()); + RestoreInventoryEvent event = new RestoreInventoryEvent(player, + limbo.getInventory(), limbo.getArmour()); Bukkit.getServer().getPluginManager().callEvent(event); if (!event.isCancelled()) { - API.setPlayerInventory(player, event.getInventory(), event.getArmor()); + API.setPlayerInventory(player, event.getInventory(), + event.getArmor()); } } protected void forceCommands() { - for (String command : Settings.forceCommands) { - try { - player.performCommand(command.replace("%p", player.getName())); - } catch (Exception e) {} - } - for (String command : Settings.forceCommandsAsConsole) { - Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), command.replace("%p", player.getName())); - } + for (String command : Settings.forceCommands) { + try { + player.performCommand(command.replace("%p", player.getName())); + } catch (Exception e) { + } + } + for (String command : Settings.forceCommandsAsConsole) { + Bukkit.getServer().dispatchCommand( + Bukkit.getServer().getConsoleSender(), + command.replace("%p", player.getName())); + } } @Override public void run() { - // Limbo contains the State of the Player before /login + // Limbo contains the State of the Player before /login if (limbo != null) { // Op & Flying restoreOpState(); /* - * Restore Inventories and GameMode - * We need to restore them before teleport the player - * Cause in AuthMePlayerListener, we call ProtectInventoryEvent after Teleporting - * Also it's the current world inventory ! + * Restore Inventories and GameMode We need to restore them before + * teleport the player Cause in AuthMePlayerListener, we call + * ProtectInventoryEvent after Teleporting Also it's the current + * world inventory ! */ if (!Settings.forceOnlyAfterLogin) { - player.setGameMode(limbo.getGameMode()); - // Inventory - Make it after restore GameMode , cause we need to restore the + player.setGameMode(limbo.getGameMode()); + // Inventory - Make it after restore GameMode , cause we need to + // restore the // right inventory in the right gamemode - if (Settings.protectInventoryBeforeLogInEnabled && player.hasPlayedBefore()) { + if (Settings.protectInventoryBeforeLogInEnabled + && player.hasPlayedBefore()) { restoreInventory(); } - } - else { - // Inventory - Make it before force the survival GameMode to cancel all - // inventory problem - if (Settings.protectInventoryBeforeLogInEnabled && player.hasPlayedBefore()) { + } else { + // Inventory - Make it before force the survival GameMode to + // cancel all + // inventory problem + if (Settings.protectInventoryBeforeLogInEnabled + && player.hasPlayedBefore()) { restoreInventory(); } player.setGameMode(GameMode.SURVIVAL); @@ -135,25 +148,32 @@ public class ProcessSyncronousPlayerLogin implements Runnable { if (!Settings.noTeleport) { // Teleport - if (Settings.isTeleportToSpawnEnabled && !Settings.isForceSpawnLocOnJoinEnabled && Settings.getForcedWorlds.contains(player.getWorld().getName())) { - if (Settings.isSaveQuitLocationEnabled && auth.getQuitLocY() != 0) { + if (Settings.isTeleportToSpawnEnabled + && !Settings.isForceSpawnLocOnJoinEnabled + && Settings.getForcedWorlds.contains(player.getWorld() + .getName())) { + if (Settings.isSaveQuitLocationEnabled + && auth.getQuitLocY() != 0) { packQuitLocation(); } else { teleportBackFromSpawn(); } - } else if (Settings.isForceSpawnLocOnJoinEnabled && Settings.getForcedWorlds.contains(player.getWorld().getName())) { + } else if (Settings.isForceSpawnLocOnJoinEnabled + && Settings.getForcedWorlds.contains(player.getWorld() + .getName())) { teleportToSpawn(); - } else if (Settings.isSaveQuitLocationEnabled && auth.getQuitLocY() != 0) { + } else if (Settings.isSaveQuitLocationEnabled + && auth.getQuitLocY() != 0) { packQuitLocation(); } else { teleportBackFromSpawn(); } } - // Re-Force Survival GameMode if we need due to world change specification - if (Settings.isForceSurvivalModeEnabled) - Utils.forceGM(player); - + // Re-Force Survival GameMode if we need due to world change + // specification + if (Settings.isForceSurvivalModeEnabled) Utils.forceGM(player); + // Restore Permission Group Utils.getInstance().setGroup(player, groupType.LOGGEDIN); @@ -165,32 +185,35 @@ public class ProcessSyncronousPlayerLogin implements Runnable { } // We can now display the join message - if (AuthMePlayerListener.joinMessage.containsKey(name) && AuthMePlayerListener.joinMessage.get(name) != null && !AuthMePlayerListener.joinMessage.get(name).isEmpty()) { - for (Player p : Bukkit.getServer().getOnlinePlayers()) { - if (p.isOnline()) - p.sendMessage(AuthMePlayerListener.joinMessage.get(name)); - } - AuthMePlayerListener.joinMessage.remove(name); + if (AuthMePlayerListener.joinMessage.containsKey(name) + && AuthMePlayerListener.joinMessage.get(name) != null + && !AuthMePlayerListener.joinMessage.get(name).isEmpty()) { + for (Player p : Bukkit.getServer().getOnlinePlayers()) { + if (p.isOnline()) p + .sendMessage(AuthMePlayerListener.joinMessage.get(name)); + } + AuthMePlayerListener.joinMessage.remove(name); } - if (Settings.applyBlindEffect) - player.removePotionEffect(PotionEffectType.BLINDNESS); + if (Settings.applyBlindEffect) player + .removePotionEffect(PotionEffectType.BLINDNESS); // The Loginevent now fires (as intended) after everything is processed - Bukkit.getServer().getPluginManager().callEvent(new LoginEvent(player, true)); + Bukkit.getServer().getPluginManager() + .callEvent(new LoginEvent(player, true)); player.saveData(); // Login is finish, display welcome message - if(Settings.useWelcomeMessage) - if(Settings.broadcastWelcomeMessage) { - for (String s : Settings.welcomeMsg) { - Bukkit.getServer().broadcastMessage(plugin.replaceAllInfos(s, player)); - } - } else { - for (String s : Settings.welcomeMsg) { - player.sendMessage(plugin.replaceAllInfos(s, player)); - } + if (Settings.useWelcomeMessage) if (Settings.broadcastWelcomeMessage) { + for (String s : Settings.welcomeMsg) { + Bukkit.getServer().broadcastMessage( + plugin.replaceAllInfos(s, player)); } + } else { + for (String s : Settings.welcomeMsg) { + player.sendMessage(plugin.replaceAllInfos(s, player)); + } + } // Login is now finish , we can force all commands forceCommands(); diff --git a/src/main/java/fr/xephi/authme/process/register/AsyncronousRegister.java b/src/main/java/fr/xephi/authme/process/register/AsyncronousRegister.java index a071cf74..96fd05e0 100644 --- a/src/main/java/fr/xephi/authme/process/register/AsyncronousRegister.java +++ b/src/main/java/fr/xephi/authme/process/register/AsyncronousRegister.java @@ -26,7 +26,8 @@ public class AsyncronousRegister { private DataSource database; private Messages m = Messages.getInstance(); - public AsyncronousRegister(Player player, String password, String email, AuthMe plugin, DataSource data) { + public AsyncronousRegister(Player player, String password, String email, + AuthMe plugin, DataSource data) { this.player = player; this.password = password; name = player.getName().toLowerCase(); @@ -38,11 +39,11 @@ public class AsyncronousRegister { } protected String getIp() { - return plugin.getIP(player); + return plugin.getIP(player); } protected void preRegister() { - if (PlayerCache.getInstance().isAuthenticated(name)) { + if (PlayerCache.getInstance().isAuthenticated(name)) { m._(player, "logged_in"); allowRegister = false; } @@ -54,8 +55,9 @@ public class AsyncronousRegister { String lowpass = password.toLowerCase(); if ((lowpass.contains("delete") || lowpass.contains("where") - || lowpass.contains("insert") || lowpass.contains("modify") || lowpass.contains("from") - || lowpass.contains("select") || lowpass.contains(";") || lowpass.contains("null")) + || lowpass.contains("insert") || lowpass.contains("modify") + || lowpass.contains("from") || lowpass.contains("select") + || lowpass.contains(";") || lowpass.contains("null")) || !lowpass.matches(Settings.getPassRegex)) { m._(player, "password_error"); allowRegister = false; @@ -63,102 +65,122 @@ public class AsyncronousRegister { if (database.isAuthAvailable(player.getName().toLowerCase())) { m._(player, "user_regged"); - if (plugin.pllog.getStringList("players").contains(player.getName())) { - plugin.pllog.getStringList("players").remove(player.getName()); + if (plugin.pllog.getStringList("players") + .contains(player.getName())) { + plugin.pllog.getStringList("players").remove(player.getName()); } allowRegister = false; } - if(Settings.getmaxRegPerIp > 0 ){ - if(!plugin.authmePermissible(player, "authme.allow2accounts") && database.getAllAuthsByIp(getIp()).size() >= Settings.getmaxRegPerIp && !getIp().equalsIgnoreCase("127.0.0.1") && !getIp().equalsIgnoreCase("localhost")) { - m._(player, "max_reg"); - allowRegister = false; - } + if (Settings.getmaxRegPerIp > 0) { + if (!plugin.authmePermissible(player, "authme.allow2accounts") + && database.getAllAuthsByIp(getIp()).size() >= Settings.getmaxRegPerIp + && !getIp().equalsIgnoreCase("127.0.0.1") + && !getIp().equalsIgnoreCase("localhost")) { + m._(player, "max_reg"); + allowRegister = false; + } } - + } public void process() { - preRegister(); - if(!allowRegister) return; - if(!email.isEmpty() && email != "") { - if(Settings.getmaxRegPerEmail > 0) { - if (!plugin.authmePermissible(player, "authme.allow2accounts") && database.getAllAuthsByEmail(email).size() >= Settings.getmaxRegPerEmail) { - m._(player, "max_reg"); - return; - } - } - emailRegister(); - return; - } - passwordRegister(); + preRegister(); + if (!allowRegister) return; + if (!email.isEmpty() && email != "") { + if (Settings.getmaxRegPerEmail > 0) { + if (!plugin.authmePermissible(player, "authme.allow2accounts") + && database.getAllAuthsByEmail(email).size() >= Settings.getmaxRegPerEmail) { + m._(player, "max_reg"); + return; + } + } + emailRegister(); + return; + } + passwordRegister(); } protected void emailRegister() { - if(Settings.getmaxRegPerEmail > 0) { - if (!plugin.authmePermissible(player, "authme.allow2accounts") && database.getAllAuthsByEmail(email).size() >= Settings.getmaxRegPerEmail) { - m._(player, "max_reg"); - return; - } - } - PlayerAuth auth = null; - try { - final String hashnew = PasswordSecurity.getHash(Settings.getPasswordHash, password, name); - auth = new PlayerAuth(name, hashnew, getIp(), new Date().getTime(), (int) player.getLocation().getX() , (int) player.getLocation().getY(), (int) player.getLocation().getZ(), player.getLocation().getWorld().getName(), email, realName); - } catch (NoSuchAlgorithmException e) { - ConsoleLogger.showError(e.getMessage()); - m._(player, "error"); - return; - } - if (PasswordSecurity.userSalt.containsKey(name)) { - auth.setSalt(PasswordSecurity.userSalt.get(name)); - } + if (Settings.getmaxRegPerEmail > 0) { + if (!plugin.authmePermissible(player, "authme.allow2accounts") + && database.getAllAuthsByEmail(email).size() >= Settings.getmaxRegPerEmail) { + m._(player, "max_reg"); + return; + } + } + PlayerAuth auth = null; + try { + final String hashnew = PasswordSecurity.getHash( + Settings.getPasswordHash, password, name); + auth = new PlayerAuth(name, hashnew, getIp(), new Date().getTime(), + (int) player.getLocation().getX(), (int) player + .getLocation().getY(), (int) player.getLocation() + .getZ(), player.getLocation().getWorld().getName(), + email, realName); + } catch (NoSuchAlgorithmException e) { + ConsoleLogger.showError(e.getMessage()); + m._(player, "error"); + return; + } + if (PasswordSecurity.userSalt.containsKey(name)) { + auth.setSalt(PasswordSecurity.userSalt.get(name)); + } database.saveAuth(auth); - database.updateEmail(auth); - database.updateSession(auth); - plugin.mail.main(auth, password); - ProcessSyncronousEmailRegister syncronous = new ProcessSyncronousEmailRegister(player, plugin); - plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, syncronous); - return; + database.updateEmail(auth); + database.updateSession(auth); + plugin.mail.main(auth, password); + ProcessSyncronousEmailRegister syncronous = new ProcessSyncronousEmailRegister( + player, plugin); + plugin.getServer().getScheduler() + .scheduleSyncDelayedTask(plugin, syncronous); + return; } protected void passwordRegister() { - if(password.length() < Settings.getPasswordMinLen || password.length() > Settings.passwordMaxLength) { - m._(player, "pass_len"); + if (password.length() < Settings.getPasswordMinLen + || password.length() > Settings.passwordMaxLength) { + m._(player, "pass_len"); return; } - if(!Settings.unsafePasswords.isEmpty()) { - if (Settings.unsafePasswords.contains(password.toLowerCase())) { - m._(player, "password_error"); - return; - } + if (!Settings.unsafePasswords.isEmpty()) { + if (Settings.unsafePasswords.contains(password.toLowerCase())) { + m._(player, "password_error"); + return; + } } PlayerAuth auth = null; String hash = ""; - try { - hash = PasswordSecurity.getHash(Settings.getPasswordHash, password, name); - } catch (NoSuchAlgorithmException e) { - ConsoleLogger.showError(e.getMessage()); - m._(player, "error"); - return; - } - if (Settings.getMySQLColumnSalt.isEmpty() && !PasswordSecurity.userSalt.containsKey(name)) - { - auth = new PlayerAuth(name, hash, getIp(), new Date().getTime(), "your@email.com", player.getName()); + try { + hash = PasswordSecurity.getHash(Settings.getPasswordHash, password, + name); + } catch (NoSuchAlgorithmException e) { + ConsoleLogger.showError(e.getMessage()); + m._(player, "error"); + return; + } + if (Settings.getMySQLColumnSalt.isEmpty() + && !PasswordSecurity.userSalt.containsKey(name)) { + auth = new PlayerAuth(name, hash, getIp(), new Date().getTime(), + "your@email.com", player.getName()); } else { - auth = new PlayerAuth(name, hash, PasswordSecurity.userSalt.get(name), getIp(), new Date().getTime(), player.getName()); + auth = new PlayerAuth(name, hash, + PasswordSecurity.userSalt.get(name), getIp(), + new Date().getTime(), player.getName()); } if (!database.saveAuth(auth)) { - m._(player, "error"); + m._(player, "error"); return; } if (!Settings.forceRegLogin) { PlayerCache.getInstance().addPlayer(auth); - database.setLogged(name); + database.setLogged(name); } plugin.otherAccounts.addPlayer(player.getUniqueId()); - ProcessSyncronousPasswordRegister syncronous = new ProcessSyncronousPasswordRegister(player, plugin); - plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, syncronous); + ProcessSyncronousPasswordRegister syncronous = new ProcessSyncronousPasswordRegister( + player, plugin); + plugin.getServer().getScheduler() + .scheduleSyncDelayedTask(plugin, syncronous); return; } } diff --git a/src/main/java/fr/xephi/authme/process/register/ProcessSyncronousEmailRegister.java b/src/main/java/fr/xephi/authme/process/register/ProcessSyncronousEmailRegister.java index cd387593..9428d96d 100644 --- a/src/main/java/fr/xephi/authme/process/register/ProcessSyncronousEmailRegister.java +++ b/src/main/java/fr/xephi/authme/process/register/ProcessSyncronousEmailRegister.java @@ -20,56 +20,69 @@ import fr.xephi.authme.task.TimeoutTask; public class ProcessSyncronousEmailRegister implements Runnable { - protected Player player; - protected String name; - private AuthMe plugin; - private Messages m = Messages.getInstance(); - public ProcessSyncronousEmailRegister(Player player, AuthMe plugin) { - this.player = player; - this.name = player.getName().toLowerCase(); - this.plugin = plugin; - } - @Override - public void run() { - if(!Settings.getRegisteredGroup.isEmpty()){ + protected Player player; + protected String name; + private AuthMe plugin; + private Messages m = Messages.getInstance(); + + public ProcessSyncronousEmailRegister(Player player, AuthMe plugin) { + this.player = player; + this.name = player.getName().toLowerCase(); + this.plugin = plugin; + } + + @Override + public void run() { + if (!Settings.getRegisteredGroup.isEmpty()) { Utils.getInstance().setGroup(player, Utils.groupType.REGISTERED); } m._(player, "vb_nonActiv"); - int time = Settings.getRegistrationTimeout * 20; - int msgInterval = Settings.getWarnMessageInterval; + int time = Settings.getRegistrationTimeout * 20; + int msgInterval = Settings.getWarnMessageInterval; if (time != 0) { - Bukkit.getScheduler().cancelTask(LimboCache.getInstance().getLimboPlayer(name).getTimeoutTaskId()); - int id = Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new TimeoutTask(plugin, name), time); + Bukkit.getScheduler().cancelTask( + LimboCache.getInstance().getLimboPlayer(name) + .getTimeoutTaskId()); + int id = Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, + new TimeoutTask(plugin, name), time); LimboCache.getInstance().getLimboPlayer(name).setTimeoutTaskId(id); } - Bukkit.getScheduler().cancelTask(LimboCache.getInstance().getLimboPlayer(name).getMessageTaskId()); - int nwMsg = Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new MessageTask(plugin, name, m._("login_msg"), msgInterval)); + Bukkit.getScheduler().cancelTask( + LimboCache.getInstance().getLimboPlayer(name) + .getMessageTaskId()); + int nwMsg = Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, + new MessageTask(plugin, name, m._("login_msg"), msgInterval)); LimboCache.getInstance().getLimboPlayer(name).setMessageTaskId(nwMsg); if (Settings.isTeleportToSpawnEnabled && !Settings.noTeleport) { - Location loca = plugin.getSpawnLocation(player); - RegisterTeleportEvent tpEvent = new RegisterTeleportEvent(player, loca); + Location loca = plugin.getSpawnLocation(player); + RegisterTeleportEvent tpEvent = new RegisterTeleportEvent(player, + loca); plugin.getServer().getPluginManager().callEvent(tpEvent); - if(!tpEvent.isCancelled()) { - if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).isLoaded()) { - tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load(); - } - player.teleport(tpEvent.getTo()); + if (!tpEvent.isCancelled()) { + if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()) + .isLoaded()) { + tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()) + .load(); + } + player.teleport(tpEvent.getTo()); } } - if (player.getGameMode() != GameMode.CREATIVE && !Settings.isMovementAllowed) { + if (player.getGameMode() != GameMode.CREATIVE + && !Settings.isMovementAllowed) { player.setAllowFlight(false); player.setFlying(false); } - if (Settings.applyBlindEffect) - player.removePotionEffect(PotionEffectType.BLINDNESS); + if (Settings.applyBlindEffect) player + .removePotionEffect(PotionEffectType.BLINDNESS); player.saveData(); - if (!Settings.noConsoleSpam) - ConsoleLogger.info(player.getName() + " registered "+plugin.getIP(player)); - if(plugin.notifications != null) { - plugin.notifications.showNotification(new Notification("[AuthMe] " + player.getName() + " has registered by email!")); + if (!Settings.noConsoleSpam) ConsoleLogger.info(player.getName() + + " registered " + plugin.getIP(player)); + if (plugin.notifications != null) { + plugin.notifications.showNotification(new Notification("[AuthMe] " + + player.getName() + " has registered by email!")); } - } + } } diff --git a/src/main/java/fr/xephi/authme/process/register/ProcessSyncronousPasswordRegister.java b/src/main/java/fr/xephi/authme/process/register/ProcessSyncronousPasswordRegister.java index de500151..ed8d2872 100644 --- a/src/main/java/fr/xephi/authme/process/register/ProcessSyncronousPasswordRegister.java +++ b/src/main/java/fr/xephi/authme/process/register/ProcessSyncronousPasswordRegister.java @@ -24,125 +24,138 @@ import fr.xephi.authme.task.TimeoutTask; public class ProcessSyncronousPasswordRegister implements Runnable { - protected Player player; - protected String name; - private AuthMe plugin; - private Messages m = Messages.getInstance(); - public ProcessSyncronousPasswordRegister(Player player, AuthMe plugin) { - this.player = player; - this.name = player.getName().toLowerCase(); - this.plugin = plugin; - } - - protected void forceCommands(Player player) { - for (String command : Settings.forceCommands) { - try { - player.performCommand(command.replace("%p", player.getName())); - } catch (Exception e) {} - } + protected Player player; + protected String name; + private AuthMe plugin; + private Messages m = Messages.getInstance(); + + public ProcessSyncronousPasswordRegister(Player player, AuthMe plugin) { + this.player = player; + this.name = player.getName().toLowerCase(); + this.plugin = plugin; } - protected void forceLogin(Player player) { - if (Settings.isTeleportToSpawnEnabled && !Settings.noTeleport) { - Location spawnLoc = plugin.getSpawnLocation(player); - AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(player, spawnLoc); - plugin.getServer().getPluginManager().callEvent(tpEvent); - if(!tpEvent.isCancelled()) { - if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).isLoaded()) { - tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load(); - } - player.teleport(tpEvent.getTo()); + protected void forceCommands(Player player) { + for (String command : Settings.forceCommands) { + try { + player.performCommand(command.replace("%p", player.getName())); + } catch (Exception e) { } } - if (LimboCache.getInstance().hasLimboPlayer(name)) - LimboCache.getInstance().deleteLimboPlayer(name); + } + + protected void forceLogin(Player player) { + if (Settings.isTeleportToSpawnEnabled && !Settings.noTeleport) { + Location spawnLoc = plugin.getSpawnLocation(player); + AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(player, + spawnLoc); + plugin.getServer().getPluginManager().callEvent(tpEvent); + if (!tpEvent.isCancelled()) { + if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()) + .isLoaded()) { + tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()) + .load(); + } + player.teleport(tpEvent.getTo()); + } + } + if (LimboCache.getInstance().hasLimboPlayer(name)) LimboCache + .getInstance().deleteLimboPlayer(name); LimboCache.getInstance().addLimboPlayer(player); int delay = Settings.getRegistrationTimeout * 20; int interval = Settings.getWarnMessageInterval; BukkitScheduler sched = plugin.getServer().getScheduler(); if (delay != 0) { - int id = sched.scheduleSyncDelayedTask(plugin, new TimeoutTask(plugin, name), delay); + int id = sched.scheduleSyncDelayedTask(plugin, new TimeoutTask( + plugin, name), delay); LimboCache.getInstance().getLimboPlayer(name).setTimeoutTaskId(id); } - int msgT = sched.scheduleSyncDelayedTask(plugin, new MessageTask(plugin, name, m._("login_msg"), interval)); + int msgT = sched.scheduleSyncDelayedTask(plugin, new MessageTask( + plugin, name, m._("login_msg"), interval)); LimboCache.getInstance().getLimboPlayer(name).setMessageTaskId(msgT); try { - plugin.pllog.removePlayer(name); - if (player.isInsideVehicle()) - player.getVehicle().eject(); + plugin.pllog.removePlayer(name); + if (player.isInsideVehicle()) player.getVehicle().eject(); } catch (NullPointerException npe) { } - } - - @Override - public void run() { - LimboPlayer limbo = LimboCache.getInstance().getLimboPlayer(name); - if (limbo != null) { - player.setGameMode(limbo.getGameMode()); - if (Settings.isTeleportToSpawnEnabled && !Settings.noTeleport) { - Location loca = plugin.getSpawnLocation(player); - RegisterTeleportEvent tpEvent = new RegisterTeleportEvent(player, loca); - plugin.getServer().getPluginManager().callEvent(tpEvent); - if(!tpEvent.isCancelled()) { - if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).isLoaded()) { - tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load(); - } - player.teleport(tpEvent.getTo()); - } - } - plugin.getServer().getScheduler().cancelTask(limbo.getTimeoutTaskId()); - plugin.getServer().getScheduler().cancelTask(limbo.getMessageTaskId()); - LimboCache.getInstance().deleteLimboPlayer(name); - } + } - if(!Settings.getRegisteredGroup.isEmpty()){ - Utils.getInstance().setGroup(player, Utils.groupType.REGISTERED); - } - m._(player, "registered"); - if (!Settings.getmailAccount.isEmpty()) - m._(player, "add_email"); - if (player.getGameMode() != GameMode.CREATIVE && !Settings.isMovementAllowed) { - player.setAllowFlight(false); - player.setFlying(false); - } - if (Settings.applyBlindEffect) - player.removePotionEffect(PotionEffectType.BLINDNESS); - // The Loginevent now fires (as intended) after everything is processed - Bukkit.getServer().getPluginManager().callEvent(new LoginEvent(player, true)); - player.saveData(); - - if (!Settings.noConsoleSpam) - ConsoleLogger.info(player.getName() + " registered "+plugin.getIP(player)); - if(plugin.notifications != null) { - plugin.notifications.showNotification(new Notification("[AuthMe] " + player.getName() + " has registered!")); - } + @Override + public void run() { + LimboPlayer limbo = LimboCache.getInstance().getLimboPlayer(name); + if (limbo != null) { + player.setGameMode(limbo.getGameMode()); + if (Settings.isTeleportToSpawnEnabled && !Settings.noTeleport) { + Location loca = plugin.getSpawnLocation(player); + RegisterTeleportEvent tpEvent = new RegisterTeleportEvent( + player, loca); + plugin.getServer().getPluginManager().callEvent(tpEvent); + if (!tpEvent.isCancelled()) { + if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()) + .isLoaded()) { + tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()) + .load(); + } + player.teleport(tpEvent.getTo()); + } + } + plugin.getServer().getScheduler() + .cancelTask(limbo.getTimeoutTaskId()); + plugin.getServer().getScheduler() + .cancelTask(limbo.getMessageTaskId()); + LimboCache.getInstance().deleteLimboPlayer(name); + } - // Kick Player after Registration is enabled, kick the player - if (Settings.forceRegKick) { - player.kickPlayer(m._("registered")[0]); - return; - } + if (!Settings.getRegisteredGroup.isEmpty()) { + Utils.getInstance().setGroup(player, Utils.groupType.REGISTERED); + } + m._(player, "registered"); + if (!Settings.getmailAccount.isEmpty()) m._(player, "add_email"); + if (player.getGameMode() != GameMode.CREATIVE + && !Settings.isMovementAllowed) { + player.setAllowFlight(false); + player.setFlying(false); + } + if (Settings.applyBlindEffect) player + .removePotionEffect(PotionEffectType.BLINDNESS); + // The Loginevent now fires (as intended) after everything is processed + Bukkit.getServer().getPluginManager() + .callEvent(new LoginEvent(player, true)); + player.saveData(); - // Request Login after Registation - if (Settings.forceRegLogin) { - forceLogin(player); - return; - } + if (!Settings.noConsoleSpam) ConsoleLogger.info(player.getName() + + " registered " + plugin.getIP(player)); + if (plugin.notifications != null) { + plugin.notifications.showNotification(new Notification("[AuthMe] " + + player.getName() + " has registered!")); + } - // Register is finish and player is logged, display welcome message - if(Settings.useWelcomeMessage) - if(Settings.broadcastWelcomeMessage) { - for (String s : Settings.welcomeMsg) { - Bukkit.getServer().broadcastMessage(plugin.replaceAllInfos(s, player)); - } - } else { - for (String s : Settings.welcomeMsg) { - player.sendMessage(plugin.replaceAllInfos(s, player)); - } - } + // Kick Player after Registration is enabled, kick the player + if (Settings.forceRegKick) { + player.kickPlayer(m._("registered")[0]); + return; + } - // Register is now finish , we can force all commands - forceCommands(player); + // Request Login after Registation + if (Settings.forceRegLogin) { + forceLogin(player); + return; + } - } + // Register is finish and player is logged, display welcome message + if (Settings.useWelcomeMessage) if (Settings.broadcastWelcomeMessage) { + for (String s : Settings.welcomeMsg) { + Bukkit.getServer().broadcastMessage( + plugin.replaceAllInfos(s, player)); + } + } else { + for (String s : Settings.welcomeMsg) { + player.sendMessage(plugin.replaceAllInfos(s, player)); + } + } + + // Register is now finish , we can force all commands + forceCommands(player); + + } } diff --git a/src/main/java/fr/xephi/authme/security/PasswordSecurity.java b/src/main/java/fr/xephi/authme/security/PasswordSecurity.java index 13826c01..c92c48b9 100644 --- a/src/main/java/fr/xephi/authme/security/PasswordSecurity.java +++ b/src/main/java/fr/xephi/authme/security/PasswordSecurity.java @@ -15,7 +15,6 @@ import fr.xephi.authme.security.crypts.BCRYPT; import fr.xephi.authme.security.crypts.EncryptionMethod; import fr.xephi.authme.settings.Settings; - public class PasswordSecurity { private static SecureRandom rnd = new SecureRandom(); @@ -27,145 +26,157 @@ public class PasswordSecurity { MessageDigest sha1 = MessageDigest.getInstance("SHA1"); sha1.reset(); byte[] digest = sha1.digest(msg); - return String.format("%0" + (digest.length << 1) + "x", new BigInteger(1,digest)).substring(0, length); + return String.format("%0" + (digest.length << 1) + "x", + new BigInteger(1, digest)).substring(0, length); } - public static String getHash(HashAlgorithm alg, String password, String playerName) throws NoSuchAlgorithmException { - EncryptionMethod method; - try { - if (alg != HashAlgorithm.CUSTOM) - method = (EncryptionMethod) alg.getclass().newInstance(); - else method = null; - } catch (InstantiationException e) { - throw new NoSuchAlgorithmException("Problem with this hash algorithm"); - } catch (IllegalAccessException e) { - throw new NoSuchAlgorithmException("Problem with this hash algorithm"); - } - String salt = ""; - switch (alg) { - case SHA256: - salt = createSalt(16); - break; - case MD5VB: - salt = createSalt(16); - break; - case XAUTH: - salt = createSalt(12); - break; - case MYBB: - salt = createSalt(8); - userSalt.put(playerName, salt); - break; - case IPB3: - salt = createSalt(5); - userSalt.put(playerName, salt); - break; - case PHPFUSION: - salt = createSalt(12); - userSalt.put(playerName, salt); - break; - case SALTED2MD5: - salt = createSalt(Settings.saltLength); - userSalt.put(playerName, salt); - break; - case JOOMLA: - salt = createSalt(32); - userSalt.put(playerName, salt); - break; - case BCRYPT: - salt = BCRYPT.gensalt(Settings.bCryptLog2Rounds); - userSalt.put(playerName, salt); - break; - case WBB3: - salt = createSalt(40); - userSalt.put(playerName, salt); - break; - case WBB4: - salt = BCRYPT.gensalt(8); - userSalt.put(playerName, salt); - break; - case PBKDF2: - salt = createSalt(12); - userSalt.put(playerName, salt); - break; - case SMF: - return method.getHash(password, null, playerName); - case PHPBB: - salt = createSalt(16); - userSalt.put(playerName, salt); - break; - case MD5: - case SHA1: - case WHIRLPOOL: - case PLAINTEXT: - case XENFORO: - case SHA512: - case ROYALAUTH: - case CRAZYCRYPT1: - case DOUBLEMD5: - case WORDPRESS: - case CUSTOM: - break; - default: - throw new NoSuchAlgorithmException("Unknown hash algorithm"); + public static String getHash(HashAlgorithm alg, String password, + String playerName) throws NoSuchAlgorithmException { + EncryptionMethod method; + try { + if (alg != HashAlgorithm.CUSTOM) method = (EncryptionMethod) alg + .getclass().newInstance(); + else method = null; + } catch (InstantiationException e) { + throw new NoSuchAlgorithmException( + "Problem with this hash algorithm"); + } catch (IllegalAccessException e) { + throw new NoSuchAlgorithmException( + "Problem with this hash algorithm"); } - PasswordEncryptionEvent event = new PasswordEncryptionEvent(method, playerName); + String salt = ""; + switch (alg) { + case SHA256: + salt = createSalt(16); + break; + case MD5VB: + salt = createSalt(16); + break; + case XAUTH: + salt = createSalt(12); + break; + case MYBB: + salt = createSalt(8); + userSalt.put(playerName, salt); + break; + case IPB3: + salt = createSalt(5); + userSalt.put(playerName, salt); + break; + case PHPFUSION: + salt = createSalt(12); + userSalt.put(playerName, salt); + break; + case SALTED2MD5: + salt = createSalt(Settings.saltLength); + userSalt.put(playerName, salt); + break; + case JOOMLA: + salt = createSalt(32); + userSalt.put(playerName, salt); + break; + case BCRYPT: + salt = BCRYPT.gensalt(Settings.bCryptLog2Rounds); + userSalt.put(playerName, salt); + break; + case WBB3: + salt = createSalt(40); + userSalt.put(playerName, salt); + break; + case WBB4: + salt = BCRYPT.gensalt(8); + userSalt.put(playerName, salt); + break; + case PBKDF2: + salt = createSalt(12); + userSalt.put(playerName, salt); + break; + case SMF: + return method.getHash(password, null, playerName); + case PHPBB: + salt = createSalt(16); + userSalt.put(playerName, salt); + break; + case MD5: + case SHA1: + case WHIRLPOOL: + case PLAINTEXT: + case XENFORO: + case SHA512: + case ROYALAUTH: + case CRAZYCRYPT1: + case DOUBLEMD5: + case WORDPRESS: + case CUSTOM: + break; + default: + throw new NoSuchAlgorithmException("Unknown hash algorithm"); + } + PasswordEncryptionEvent event = new PasswordEncryptionEvent(method, + playerName); Bukkit.getPluginManager().callEvent(event); method = event.getMethod(); - if (method == null) - throw new NoSuchAlgorithmException("Unknown hash algorithm"); + if (method == null) throw new NoSuchAlgorithmException( + "Unknown hash algorithm"); return method.getHash(password, salt, playerName); } - public static boolean comparePasswordWithHash(String password, String hash, String playerName) throws NoSuchAlgorithmException { - HashAlgorithm algo = Settings.getPasswordHash; - EncryptionMethod method; - try { - if (algo != HashAlgorithm.CUSTOM) - method = (EncryptionMethod) algo.getclass().newInstance(); - else method = null; - } catch (InstantiationException e) { - throw new NoSuchAlgorithmException("Problem with this hash algorithm"); - } catch (IllegalAccessException e) { - throw new NoSuchAlgorithmException("Problem with this hash algorithm"); - } - PasswordEncryptionEvent event = new PasswordEncryptionEvent(method, playerName); + public static boolean comparePasswordWithHash(String password, String hash, + String playerName) throws NoSuchAlgorithmException { + HashAlgorithm algo = Settings.getPasswordHash; + EncryptionMethod method; + try { + if (algo != HashAlgorithm.CUSTOM) method = (EncryptionMethod) algo + .getclass().newInstance(); + else method = null; + } catch (InstantiationException e) { + throw new NoSuchAlgorithmException( + "Problem with this hash algorithm"); + } catch (IllegalAccessException e) { + throw new NoSuchAlgorithmException( + "Problem with this hash algorithm"); + } + PasswordEncryptionEvent event = new PasswordEncryptionEvent(method, + playerName); Bukkit.getPluginManager().callEvent(event); method = event.getMethod(); - if (method == null) - throw new NoSuchAlgorithmException("Unknown hash algorithm"); + if (method == null) throw new NoSuchAlgorithmException( + "Unknown hash algorithm"); try { - if (method.comparePassword(hash, password, playerName)) - return true; + if (method.comparePassword(hash, password, playerName)) return true; } catch (Exception e) { } if (Settings.supportOldPassword) { - try { - if (compareWithAllEncryptionMethod(password, hash, playerName)) - return true; - } catch (Exception e) {} + try { + if (compareWithAllEncryptionMethod(password, hash, playerName)) return true; + } catch (Exception e) { + } } return false; } - private static boolean compareWithAllEncryptionMethod(String password, String hash, String playerName) throws NoSuchAlgorithmException { - for (HashAlgorithm algo : HashAlgorithm.values()) { - if (algo != HashAlgorithm.CUSTOM) - try { - EncryptionMethod method = (EncryptionMethod) algo.getclass().newInstance(); - if (method.comparePassword(hash, password, playerName)) { - PlayerAuth nAuth = AuthMe.getInstance().database.getAuth(playerName); - if (nAuth != null) { - nAuth.setHash(getHash(Settings.getPasswordHash, password, playerName)); - nAuth.setSalt(userSalt.get(playerName)); - AuthMe.getInstance().database.updatePassword(nAuth); - AuthMe.getInstance().database.updateSalt(nAuth); - } - return true; - } - } catch (Exception e) {} - } - return false; + private static boolean compareWithAllEncryptionMethod(String password, + String hash, String playerName) throws NoSuchAlgorithmException { + for (HashAlgorithm algo : HashAlgorithm.values()) { + if (algo != HashAlgorithm.CUSTOM) try { + EncryptionMethod method = (EncryptionMethod) algo.getclass() + .newInstance(); + if (method.comparePassword(hash, password, playerName)) { + PlayerAuth nAuth = AuthMe.getInstance().database + .getAuth(playerName); + if (nAuth != null) { + nAuth.setHash(getHash(Settings.getPasswordHash, + password, playerName)); + nAuth.setSalt(userSalt.get(playerName)); + AuthMe.getInstance().database.updatePassword(nAuth); + AuthMe.getInstance().database.updateSalt(nAuth); + } + return true; + } + } catch (Exception e) { + } + } + return false; } } diff --git a/src/main/java/fr/xephi/authme/security/RandomString.java b/src/main/java/fr/xephi/authme/security/RandomString.java index 7ffb2859..d504f4e9 100644 --- a/src/main/java/fr/xephi/authme/security/RandomString.java +++ b/src/main/java/fr/xephi/authme/security/RandomString.java @@ -3,37 +3,34 @@ package fr.xephi.authme.security; import java.util.Random; /** -* -* @author Xephi59 -*/ -public class RandomString -{ + * + * @author Xephi59 + */ +public class RandomString { - private static final char[] chars = new char[36]; + private static final char[] chars = new char[36]; - static { - for (int idx = 0; idx < 10; ++idx) - chars[idx] = (char) ('0' + idx); - for (int idx = 10; idx < 36; ++idx) - chars[idx] = (char) ('a' + idx - 10); - } + static { + for (int idx = 0; idx < 10; ++idx) + chars[idx] = (char) ('0' + idx); + for (int idx = 10; idx < 36; ++idx) + chars[idx] = (char) ('a' + idx - 10); + } - private final Random random = new Random(); + private final Random random = new Random(); - private final char[] buf; + private final char[] buf; - public RandomString(int length) - { - if (length < 1) - throw new IllegalArgumentException("length < 1: " + length); - buf = new char[length]; - } + public RandomString(int length) { + if (length < 1) throw new IllegalArgumentException("length < 1: " + + length); + buf = new char[length]; + } - public String nextString() - { - for (int idx = 0; idx < buf.length; ++idx) - buf[idx] = chars[random.nextInt(chars.length)]; - return new String(buf); - } + public String nextString() { + for (int idx = 0; idx < buf.length; ++idx) + buf[idx] = chars[random.nextInt(chars.length)]; + return new String(buf); + } } diff --git a/src/main/java/fr/xephi/authme/security/crypts/BCRYPT.java b/src/main/java/fr/xephi/authme/security/crypts/BCRYPT.java index ab470244..f9881604 100644 --- a/src/main/java/fr/xephi/authme/security/crypts/BCRYPT.java +++ b/src/main/java/fr/xephi/authme/security/crypts/BCRYPT.java @@ -1,4 +1,4 @@ -//Copyright (c) 2006 Damien Miller +// Copyright (c) 2006 Damien Miller // // Permission to use, copy, modify, and distribute this software for any // purpose with or without fee is hereby granted, provided that the above @@ -19,25 +19,24 @@ import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; /** - * BCrypt implements OpenBSD-style Blowfish password hashing using - * the scheme described in "A Future-Adaptable Password Scheme" by - * Niels Provos and David Mazieres. + * BCrypt implements OpenBSD-style Blowfish password hashing using the scheme + * described in "A Future-Adaptable Password Scheme" by Niels Provos and David + * Mazieres. *

- * This password hashing system tries to thwart off-line password - * cracking using a computationally-intensive hashing algorithm, - * based on Bruce Schneier's Blowfish cipher. The work factor of - * the algorithm is parameterised, so it can be increased as - * computers get faster. + * This password hashing system tries to thwart off-line password cracking using + * a computationally-intensive hashing algorithm, based on Bruce Schneier's + * Blowfish cipher. The work factor of the algorithm is parameterised, so it can + * be increased as computers get faster. *

- * Usage is really simple. To hash a password for the first time, - * call the hashpw method with a random salt, like this: + * Usage is really simple. To hash a password for the first time, call the + * hashpw method with a random salt, like this: *

* * String pw_hash = BCrypt.hashpw(plain_password, BCrypt.gensalt());
*
*

- * To check whether a plaintext password matches one that has been - * hashed previously, use the checkpw method: + * To check whether a plaintext password matches one that has been hashed + * previously, use the checkpw method: *

* * if (BCrypt.checkpw(candidate_password, stored_hash))
@@ -46,719 +45,675 @@ import java.security.SecureRandom; *     System.out.println("It does not match");
*
*

- * The gensalt() method takes an optional parameter (log_rounds) - * that determines the computational complexity of the hashing: + * The gensalt() method takes an optional parameter (log_rounds) that determines + * the computational complexity of the hashing: *

* * String strong_salt = BCrypt.gensalt(10)
* String stronger_salt = BCrypt.gensalt(12)
*
*

- * The amount of work increases exponentially (2**log_rounds), so - * each increment is twice as much work. The default log_rounds is - * 10, and the valid range is 4 to 31. + * The amount of work increases exponentially (2**log_rounds), so each increment + * is twice as much work. The default log_rounds is 10, and the valid range is 4 + * to 31. * * @author Damien Miller * @version 0.2 */ public class BCRYPT implements EncryptionMethod { - // BCrypt parameters - private static final int GENSALT_DEFAULT_LOG2_ROUNDS = 10; - private static final int BCRYPT_SALT_LEN = 16; + // BCrypt parameters + private static final int GENSALT_DEFAULT_LOG2_ROUNDS = 10; + private static final int BCRYPT_SALT_LEN = 16; - // Blowfish parameters - private static final int BLOWFISH_NUM_ROUNDS = 16; + // Blowfish parameters + private static final int BLOWFISH_NUM_ROUNDS = 16; - // Initial contents of key schedule - private static final int P_orig[] = { - 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, - 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89, - 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, - 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, - 0x9216d5d9, 0x8979fb1b - }; - private static final int S_orig[] = { - 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, - 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99, - 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, - 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, - 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, - 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013, - 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, - 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e, - 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, - 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, - 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, - 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a, - 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, - 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677, - 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, - 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, - 0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, - 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239, - 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, - 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0, - 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, - 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, - 0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, - 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe, - 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, - 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, - 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, - 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, - 0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba, - 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463, - 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, - 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09, - 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, - 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, - 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, - 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, - 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, - 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82, - 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, - 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, - 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, - 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b, - 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, - 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8, - 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, - 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, - 0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, - 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c, - 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, - 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1, - 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, - 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, - 0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, - 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf, - 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, - 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af, - 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, - 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, - 0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, - 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915, - 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, - 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915, - 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, - 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a, - 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, - 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266, - 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, - 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e, - 0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6, - 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1, - 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, - 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1, - 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, - 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8, - 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff, - 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, - 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, - 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7, - 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, - 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, - 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, - 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af, - 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, - 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87, - 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, - 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, - 0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16, - 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd, - 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, - 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509, - 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, - 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, - 0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, - 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a, - 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, - 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960, - 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, - 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28, - 0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802, - 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84, - 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, - 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf, - 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, - 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, - 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50, - 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, - 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, - 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281, - 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, - 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696, - 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, - 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, - 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, - 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0, - 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, - 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, - 0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, - 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285, - 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, - 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061, - 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, - 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e, - 0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, - 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc, - 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, - 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340, - 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, - 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7, - 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, - 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068, - 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, - 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840, - 0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, - 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504, - 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, - 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb, - 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, - 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6, - 0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, - 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b, - 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, - 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb, - 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, - 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b, - 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, - 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c, - 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, - 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc, - 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, - 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564, - 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, - 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115, - 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, - 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728, - 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, - 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, - 0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, - 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d, - 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, - 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b, - 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, - 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb, - 0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, - 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c, - 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, - 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9, - 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, - 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe, - 0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, - 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc, - 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, - 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61, - 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, - 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9, - 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, - 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, - 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, - 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633, - 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, - 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169, - 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, - 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027, - 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, - 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62, - 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, - 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, - 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, - 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc, - 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, - 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c, - 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, - 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0, - 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, - 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe, - 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, - 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, - 0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, - 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6, - 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, - 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22, - 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, - 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, - 0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9, - 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59, - 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, - 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51, - 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, - 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, - 0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, - 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28, - 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, - 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd, - 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, - 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, - 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, - 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, - 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, - 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32, - 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, - 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, - 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, - 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb, - 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, - 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47, - 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, - 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, - 0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, - 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048, - 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, - 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd, - 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, - 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, - 0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, - 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f, - 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, - 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525, - 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, - 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, - 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, - 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e, - 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, - 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d, - 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, - 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, - 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, - 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, - 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, - 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a, - 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, - 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, - 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, - 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060, - 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, - 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9, - 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, - 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6 - }; + // Initial contents of key schedule + private static final int P_orig[] = { 0x243f6a88, 0x85a308d3, 0x13198a2e, + 0x03707344, 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89, + 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, 0xc0ac29b7, + 0xc97c50dd, 0x3f84d5b5, 0xb5470917, 0x9216d5d9, 0x8979fb1b }; + private static final int S_orig[] = { 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, + 0xd01adfb7, 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99, + 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, 0x636920d8, + 0x71574e69, 0xa458fea3, 0xf4933d7e, 0x0d95748f, 0x728eb658, + 0x718bcd58, 0x82154aee, 0x7b54a41d, 0xc25a59b5, 0x9c30d539, + 0x2af26013, 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, + 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e, 0xd71577c1, + 0xbd314b27, 0x78af2fda, 0x55605c60, 0xe65525f3, 0xaa55ab94, + 0x57489862, 0x63e81440, 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, + 0x1141e8ce, 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a, + 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, 0xafd6ba33, + 0x6c24cf5c, 0x7a325381, 0x28958677, 0x3b8f4898, 0x6b4bb9af, + 0xc4bfe81b, 0x66282193, 0x61d809cc, 0xfb21a991, 0x487cac60, + 0x5dec8032, 0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, + 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239, 0x2e0b4482, + 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a, + 0x670c9c61, 0xabd388f0, 0x6a51a0d2, 0xd8542f68, 0x960fa728, + 0xab5133a3, 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, + 0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, 0x8cee8619, + 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe, 0xe06f75d8, 0x85c12073, + 0x401a449f, 0x56c16aa6, 0x4ed3aa62, 0x363f7706, 0x1bfedf72, + 0x429b023d, 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, + 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, 0xe3fe501a, + 0xb6794c3b, 0x976ce0bd, 0x04c006ba, 0xc1a94fb6, 0x409f60c4, + 0x5e5c9ec2, 0x196a2463, 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, + 0x3b52ec6f, 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09, + 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, 0xc0cba857, + 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, 0x5579c0bd, 0x1a60320a, + 0xd6a100c6, 0x402c7279, 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, + 0xdb3222f8, 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, + 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82, 0x9e5c57bb, + 0xca6f8ca0, 0x1a87562e, 0xdf1769db, 0xd542a8f6, 0x287effc3, + 0xac6732c6, 0x8c4f5573, 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, + 0xb8f011a0, 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b, + 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, + 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8, 0xef20cada, 0x36774c01, + 0xd07e9efe, 0x2bf11fb4, 0x95dbda4d, 0xae909198, 0xeaad8e71, + 0x6b93d5a0, 0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, + 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c, 0x4fad5ea0, + 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777, + 0xea752dfe, 0x8b021fa1, 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, + 0xce89e299, 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, + 0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, 0xe6ad2065, + 0x77b5fa86, 0xc75442f5, 0xfb9d35cf, 0xebcdaf0c, 0x7b3e89a0, + 0xd6411bd3, 0xae1e7e49, 0x00250e2d, 0x2071b35e, 0x226800bb, + 0x57b8e0af, 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, + 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, 0x83260376, + 0x6295cfa9, 0x11c81968, 0x4e734a41, 0xb3472dca, 0x7b14a94a, + 0x1b510052, 0x9a532915, 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, + 0x81e67400, 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915, + 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, 0x53b02d5d, + 0xa99f8fa1, 0x08ba4799, 0x6e85076a, 0x4b7a70e9, 0xb5b32944, + 0xdb75092e, 0xc4192623, 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, + 0x8fedb266, 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, + 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e, 0x3f54989a, + 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6, 0xa1d29c07, 0xefe830f5, + 0x4d2d38e6, 0xf0255dc1, 0x4cdd2086, 0x8470eb26, 0x6382e9c6, + 0x021ecc5e, 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1, + 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, 0x3e07841c, + 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8, 0xb03ada37, 0xf0500c0d, + 0xf01c1f04, 0x0200b3ff, 0xae0cf51a, 0x3cb574b2, 0x25837a58, + 0xdc0921bd, 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, + 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7, 0xa9446146, + 0x0fd0030e, 0xecc8c73e, 0xa4751e41, 0xe238cd99, 0x3bea0e2f, + 0x3280bba1, 0x183eb331, 0x4e548b38, 0x4f6db908, 0x6f420d03, + 0xf60a04bf, 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af, + 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, 0x5512721f, + 0x2e6b7124, 0x501adde6, 0x9f84cd87, 0x7a584718, 0x7408da17, + 0xbc9f9abc, 0xe94b7d8c, 0xec7aec3a, 0xdb851dfa, 0x63094366, + 0xc464c3d2, 0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16, + 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd, 0x71dff89e, + 0x10314e55, 0x81ac77d6, 0x5f11199b, 0x043556f1, 0xd7a3c76b, + 0x3c11183b, 0x5924a509, 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, + 0x1e153c6e, 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, + 0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, 0x803e89d6, + 0x5266c825, 0x2e4cc978, 0x9c10b36a, 0xc6150eba, 0x94e2ea78, + 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d, 0x1939260f, + 0x19c27960, 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, + 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28, 0xc332ddef, + 0xbe6c5aa5, 0x65582185, 0x68ab9802, 0xeecea50f, 0xdb2f953b, + 0x2aef7dad, 0x5b6e2f84, 0x1521b628, 0x29076170, 0xecdd4775, + 0x619f1510, 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf, + 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, 0xeecc86bc, + 0x60622ca7, 0x9cab5cab, 0xb2f3846e, 0x648b1eaf, 0x19bdf0ca, + 0xa02369b9, 0x655abb50, 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, + 0xc021b8f7, 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, + 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281, 0x0e358829, + 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, 0x57f584a5, 0x1b227263, + 0x9b83c3ff, 0x1ac24696, 0xcdb30aeb, 0x532e3054, 0x8fd948e4, + 0x6dbc3128, 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, + 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, 0x45eee2b6, + 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0, 0xc742f442, 0xef6abbb5, + 0x654f3b1d, 0x41cd2105, 0xd81e799e, 0x86854dc7, 0xe44b476a, + 0x3d816250, 0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, + 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285, 0x095bbf00, + 0xad19489d, 0x1462b174, 0x23820e00, 0x58428d2a, 0x0c55f5ea, + 0x1dadf43e, 0x233f7061, 0x3372f092, 0x8d937e41, 0xd65fecf1, + 0x6c223bdb, 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e, + 0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, 0xa969a7aa, + 0xc50c06c2, 0x5a04abfc, 0x800bcadc, 0x9e447a2e, 0xc3453484, + 0xfdd56705, 0x0e1e9ec9, 0xdb73dbd3, 0x105588cd, 0x675fda79, + 0xe3674340, 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, + 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7, 0xe93d5a68, + 0x948140f7, 0xf64c261c, 0x94692934, 0x411520f7, 0x7602d4f7, + 0xbcf46b2e, 0xd4a20068, 0xd4082471, 0x3320f46a, 0x43b7d4b7, + 0x500061af, 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840, + 0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, + 0x03bd9785, 0x7fac6dd0, 0x31cb8504, 0x96eb27b3, 0x55fd3941, + 0xda2547e6, 0xabca0a9a, 0x28507825, 0x530429f4, 0x0a2c86da, + 0xe9b66dfb, 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, + 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6, 0xaace1e7c, + 0xd3375fec, 0xce78a399, 0x406b2a42, 0x20fe9e35, 0xd9f385b9, + 0xee39d7ab, 0x3b124e8b, 0x1dc9faf7, 0x4b6d1856, 0x26a36631, + 0xeae397b2, 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb, + 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, 0x55533a3a, + 0x20838d87, 0xfe6ba9b7, 0xd096954b, 0x55a867bc, 0xa1159a58, + 0xcca92963, 0x99e1db33, 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, + 0x9029317c, 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, + 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc, 0x07f9c9ee, + 0x41041f0f, 0x404779a4, 0x5d886e17, 0x325f51eb, 0xd59bc0d1, + 0xf2bcc18f, 0x41113564, 0x257b7834, 0x602a9c60, 0xdff8e8a3, + 0x1f636c1b, 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115, + 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, 0x85b2a20e, + 0xe6ba0d99, 0xde720c8c, 0x2da2f728, 0xd0127845, 0x95b794fd, + 0x647d0862, 0xe7ccf5f0, 0x5449a36f, 0x877d48fa, 0xc39dfd27, + 0xf33e8d1e, 0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, + 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d, 0xc67b5510, + 0x6d672c37, 0x2765d43b, 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3, + 0xb5390f92, 0x690fed0b, 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, + 0xd9155ea3, 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb, + 0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, 0x6842ada7, + 0xc66a2b3b, 0x12754ccc, 0x782ef11c, 0x6a124237, 0xb79251e7, + 0x06a1bbe6, 0x4bfb6350, 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, + 0xe2e1c3c9, 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, + 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe, 0x9dbc8057, + 0xf0f7c086, 0x60787bf8, 0x6003604d, 0xd1fd8346, 0xf6381fb0, + 0x7745ae04, 0xd736fccc, 0x83426b33, 0xf01eab71, 0xb0804187, + 0x3c005e5f, 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61, + 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, 0x5366f9c3, + 0xc8b38e74, 0xb475f255, 0x46fcd9b9, 0x7aeb2661, 0x8b1ddf84, + 0x846a0e79, 0x915f95e2, 0x466e598e, 0x20b45770, 0x8cd55591, + 0xc902de4c, 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, + 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633, 0xe85a1f02, + 0x09f0be8c, 0x4a99a025, 0x1d6efe10, 0x1ab93d1d, 0x0ba5a4df, + 0xa186f20f, 0x2868f169, 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, + 0x4fcd7f52, 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027, + 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, 0xf0177a28, + 0xc0f586e0, 0x006058aa, 0x30dc7d62, 0x11e69ed7, 0x2338ea63, + 0x53c2dd94, 0xc2c21634, 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, + 0xce591d76, 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, + 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc, 0xed545578, + 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8, + 0xa28514d9, 0x6c51133c, 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, + 0xddc6c837, 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0, + 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, 0x5cb0679e, + 0x4fa33742, 0xd3822740, 0x99bc9bbe, 0xd5118e9d, 0xbf0f7315, + 0xd62d1c7e, 0xc700c47b, 0xb78c1b6b, 0x21a19045, 0xb26eb1be, + 0x6a366eb4, 0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, + 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6, 0x2939bbdb, + 0xa9ba4650, 0xac9526e8, 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a, + 0x63ef8ce2, 0x9a86ee22, 0xc089c2b8, 0x43242ef6, 0xa51e03aa, + 0x9cf2d0a4, 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, + 0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9, 0xc72fefd3, + 0xf752f7da, 0x3f046f69, 0x77fa0a59, 0x80e4a915, 0x87b08601, + 0x9b09e6ad, 0x3b3ee593, 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, + 0x022b8b51, 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, + 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, 0xe029ac71, + 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, + 0xf8d56629, 0x79132e28, 0x785f0191, 0xed756055, 0xf7960e44, + 0xe3d35e8c, 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd, + 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, 0x1b3f6d9b, + 0x1e6321f5, 0xf59c66fb, 0x26dcf319, 0x7533d928, 0xb155fdf5, + 0x03563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, 0xabcc5167, + 0xccad925f, 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, + 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32, 0xa8b6e37e, + 0xc3293d46, 0x48de5369, 0x6413e680, 0xa2ae0810, 0xdd6db224, + 0x69852dfd, 0x09072166, 0xb39a460a, 0x6445c0dd, 0x586cdecf, + 0x1c20c8ae, 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb, + 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, + 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47, 0xd29be463, 0x542f5d9e, + 0xaec2771b, 0xf64e6370, 0x740e0d8d, 0xe75b1357, 0xf8721671, + 0xaf537d5d, 0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, + 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048, 0x6f3f3b82, + 0x3520ab82, 0x011a1d4b, 0x277227f8, 0x611560b1, 0xe7933fdc, + 0xbb3a792b, 0x344525bd, 0xa08839e1, 0x51ce794b, 0x2f32c9b7, + 0xa01fbac9, 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, + 0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, 0x0339c32a, + 0xc6913667, 0x8df9317c, 0xe0b12b4f, 0xf79e59b7, 0x43f5bb3a, + 0xf2d519ff, 0x27d9459c, 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, + 0x9b941525, 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, + 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, 0xe0ec6e0e, + 0x1698db3b, 0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, + 0xd3a0342b, 0x8971f21e, 0x1b0a7441, 0x4ba3348c, 0xc5be7120, + 0xc37632d8, 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d, + 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, 0x1618b166, + 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, 0xf523f357, 0xa6327623, + 0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, 0x6e163697, + 0x88d273cc, 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, + 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a, 0xc9aa53fd, + 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, 0x71126905, 0xb2040222, + 0xb6cbcf7c, 0xcd769c2b, 0x53113ec0, 0x1640e3d3, 0x38abbd60, + 0x2547adf0, 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060, + 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, + 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9, 0x90d4f869, 0xa65cdea0, + 0x3f09252d, 0xc208e69f, 0xb74e6132, 0xce77e25b, 0x578fdfe3, + 0x3ac372e6 }; - // bcrypt IV: "OrpheanBeholderScryDoubt" - static private final int bf_crypt_ciphertext[] = { - 0x4f727068, 0x65616e42, 0x65686f6c, - 0x64657253, 0x63727944, 0x6f756274 - }; + // bcrypt IV: "OrpheanBeholderScryDoubt" + static private final int bf_crypt_ciphertext[] = { 0x4f727068, 0x65616e42, + 0x65686f6c, 0x64657253, 0x63727944, 0x6f756274 }; - // Table for Base64 encoding - static private final char base64_code[] = { - '.', '/', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', - 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', - 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', - 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', - 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', - '6', '7', '8', '9' - }; + // Table for Base64 encoding + static private final char base64_code[] = { '.', '/', 'A', 'B', 'C', 'D', + 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', + 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', + 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', + 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', + '4', '5', '6', '7', '8', '9' }; - // Table for Base64 decoding - static private final byte index_64[] = { - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 0, 1, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, - -1, -1, -1, -1, -1, 2, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, - -1, -1, -1, -1, -1, -1, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, - 51, 52, 53, -1, -1, -1, -1, -1 - }; + // Table for Base64 decoding + static private final byte index_64[] = { -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 0, 1, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, -1, + -1, -1, -1, -1, -1, -1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, -1, -1, + -1, -1, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, -1, -1, -1, -1, -1 }; - // Expanded Blowfish key - private int P[]; - private int S[]; - - /** - * Encode a byte array using bcrypt's slightly-modified base64 - * encoding scheme. Note that this is *not* compatible with - * the standard MIME-base64 encoding. - * - * @param d the byte array to encode - * @param len the number of bytes to encode - * @return base64-encoded string - * @exception IllegalArgumentException if the length is invalid - */ - private static String encode_base64(byte d[], int len) - throws IllegalArgumentException { - int off = 0; - StringBuffer rs = new StringBuffer(); - int c1, c2; - - if (len <= 0 || len > d.length) - throw new IllegalArgumentException ("Invalid len"); - - while (off < len) { - c1 = d[off++] & 0xff; - rs.append(base64_code[(c1 >> 2) & 0x3f]); - c1 = (c1 & 0x03) << 4; - if (off >= len) { - rs.append(base64_code[c1 & 0x3f]); - break; - } - c2 = d[off++] & 0xff; - c1 |= (c2 >> 4) & 0x0f; - rs.append(base64_code[c1 & 0x3f]); - c1 = (c2 & 0x0f) << 2; - if (off >= len) { - rs.append(base64_code[c1 & 0x3f]); - break; - } - c2 = d[off++] & 0xff; - c1 |= (c2 >> 6) & 0x03; - rs.append(base64_code[c1 & 0x3f]); - rs.append(base64_code[c2 & 0x3f]); - } - return rs.toString(); - } - - /** - * Look up the 3 bits base64-encoded by the specified character, - * range-checking againt conversion table - * @param x the base64-encoded value - * @return the decoded value of x - */ - private static byte char64(char x) { - if ((int)x < 0 || (int)x > index_64.length) - return -1; - return index_64[(int)x]; - } - - /** - * Decode a string encoded using bcrypt's base64 scheme to a - * byte array. Note that this is *not* compatible with - * the standard MIME-base64 encoding. - * @param s the string to decode - * @param maxolen the maximum number of bytes to decode - * @return an array containing the decoded bytes - * @throws IllegalArgumentException if maxolen is invalid - */ - private static byte[] decode_base64(String s, int maxolen) - throws IllegalArgumentException { - StringBuffer rs = new StringBuffer(); - int off = 0, slen = s.length(), olen = 0; - byte ret[]; - byte c1, c2, c3, c4, o; - - if (maxolen <= 0) - throw new IllegalArgumentException ("Invalid maxolen"); - - while (off < slen - 1 && olen < maxolen) { - c1 = char64(s.charAt(off++)); - c2 = char64(s.charAt(off++)); - if (c1 == -1 || c2 == -1) - break; - o = (byte)(c1 << 2); - o |= (c2 & 0x30) >> 4; - rs.append((char)o); - if (++olen >= maxolen || off >= slen) - break; - c3 = char64(s.charAt(off++)); - if (c3 == -1) - break; - o = (byte)((c2 & 0x0f) << 4); - o |= (c3 & 0x3c) >> 2; - rs.append((char)o); - if (++olen >= maxolen || off >= slen) - break; - c4 = char64(s.charAt(off++)); - o = (byte)((c3 & 0x03) << 6); - o |= c4; - rs.append((char)o); - ++olen; - } - - ret = new byte[olen]; - for (off = 0; off < olen; off++) - ret[off] = (byte)rs.charAt(off); - return ret; - } - - /** - * Blowfish encipher a single 64-bit block encoded as - * two 32-bit halves - * @param lr an array containing the two 32-bit half blocks - * @param off the position in the array of the blocks - */ - private final void encipher(int lr[], int off) { - int i, n, l = lr[off], r = lr[off + 1]; - - l ^= P[0]; - for (i = 0; i <= BLOWFISH_NUM_ROUNDS - 2;) { - // Feistel substitution on left word - n = S[(l >> 24) & 0xff]; - n += S[0x100 | ((l >> 16) & 0xff)]; - n ^= S[0x200 | ((l >> 8) & 0xff)]; - n += S[0x300 | (l & 0xff)]; - r ^= n ^ P[++i]; - - // Feistel substitution on right word - n = S[(r >> 24) & 0xff]; - n += S[0x100 | ((r >> 16) & 0xff)]; - n ^= S[0x200 | ((r >> 8) & 0xff)]; - n += S[0x300 | (r & 0xff)]; - l ^= n ^ P[++i]; - } - lr[off] = r ^ P[BLOWFISH_NUM_ROUNDS + 1]; - lr[off + 1] = l; - } - - /** - * Cycically extract a word of key material - * @param data the string to extract the data from - * @param offp a "pointer" (as a one-entry array) to the - * current offset into data - * @return the next word of material from data - */ - private static int streamtoword(byte data[], int offp[]) { - int i; - int word = 0; - int off = offp[0]; - - for (i = 0; i < 4; i++) { - word = (word << 8) | (data[off] & 0xff); - off = (off + 1) % data.length; - } - - offp[0] = off; - return word; - } - - /** - * Initialise the Blowfish key schedule - */ - private void init_key() { - P = (int[])P_orig.clone(); - S = (int[])S_orig.clone(); - } - - /** - * Key the Blowfish cipher - * @param key an array containing the key - */ - private void key(byte key[]) { - int i; - int koffp[] = { 0 }; - int lr[] = { 0, 0 }; - int plen = P.length, slen = S.length; - - for (i = 0; i < plen; i++) - P[i] = P[i] ^ streamtoword(key, koffp); - - for (i = 0; i < plen; i += 2) { - encipher(lr, 0); - P[i] = lr[0]; - P[i + 1] = lr[1]; - } - - for (i = 0; i < slen; i += 2) { - encipher(lr, 0); - S[i] = lr[0]; - S[i + 1] = lr[1]; - } - } - - /** - * Perform the "enhanced key schedule" step described by - * Provos and Mazieres in "A Future-Adaptable Password Scheme" - * http://www.openbsd.org/papers/bcrypt-paper.ps - * @param data salt information - * @param key password information - */ - private void ekskey(byte data[], byte key[]) { - int i; - int koffp[] = { 0 }, doffp[] = { 0 }; - int lr[] = { 0, 0 }; - int plen = P.length, slen = S.length; - - for (i = 0; i < plen; i++) - P[i] = P[i] ^ streamtoword(key, koffp); - - for (i = 0; i < plen; i += 2) { - lr[0] ^= streamtoword(data, doffp); - lr[1] ^= streamtoword(data, doffp); - encipher(lr, 0); - P[i] = lr[0]; - P[i + 1] = lr[1]; - } - - for (i = 0; i < slen; i += 2) { - lr[0] ^= streamtoword(data, doffp); - lr[1] ^= streamtoword(data, doffp); - encipher(lr, 0); - S[i] = lr[0]; - S[i + 1] = lr[1]; - } - } - - /** - * Perform the central password hashing step in the - * bcrypt scheme - * @param password the password to hash - * @param salt the binary salt to hash with the password - * @param log_rounds the binary logarithm of the number - * of rounds of hashing to apply - * @return an array containing the binary hashed password - */ - private byte[] crypt_raw(byte password[], byte salt[], int log_rounds) { - int rounds, i, j; - int cdata[] = (int[])bf_crypt_ciphertext.clone(); - int clen = cdata.length; - byte ret[]; - - if (log_rounds < 4 || log_rounds > 31) - throw new IllegalArgumentException ("Bad number of rounds"); - rounds = 1 << log_rounds; - if (salt.length != BCRYPT_SALT_LEN) - throw new IllegalArgumentException ("Bad salt length"); - - init_key(); - ekskey(salt, password); - for (i = 0; i < rounds; i++) { - key(password); - key(salt); - } - - for (i = 0; i < 64; i++) { - for (j = 0; j < (clen >> 1); j++) - encipher(cdata, j << 1); - } - - ret = new byte[clen * 4]; - for (i = 0, j = 0; i < clen; i++) { - ret[j++] = (byte)((cdata[i] >> 24) & 0xff); - ret[j++] = (byte)((cdata[i] >> 16) & 0xff); - ret[j++] = (byte)((cdata[i] >> 8) & 0xff); - ret[j++] = (byte)(cdata[i] & 0xff); - } - return ret; - } - - /** - * Hash a password using the OpenBSD bcrypt scheme - * @param password the password to hash - * @param salt the salt to hash with (perhaps generated - * using BCrypt.gensalt) - * @return the hashed password - */ - public static String hashpw(String password, String salt) { - BCRYPT B; - String real_salt; - byte passwordb[], saltb[], hashed[]; - char minor = (char)0; - int rounds, off = 0; - StringBuffer rs = new StringBuffer(); - - if (salt.charAt(0) != '$' || salt.charAt(1) != '2') - throw new IllegalArgumentException ("Invalid salt version"); - if (salt.charAt(2) == '$') - off = 3; - else { - minor = salt.charAt(2); - if (minor != 'a' || salt.charAt(3) != '$') - throw new IllegalArgumentException ("Invalid salt revision"); - off = 4; - } - - // Extract number of rounds - if (salt.charAt(off + 2) > '$') - throw new IllegalArgumentException ("Missing salt rounds"); - rounds = Integer.parseInt(salt.substring(off, off + 2)); - - real_salt = salt.substring(off + 3, off + 25); - try { - passwordb = (password + (minor >= 'a' ? "\000" : "")).getBytes("UTF-8"); - } catch (UnsupportedEncodingException uee) { - throw new AssertionError("UTF-8 is not supported"); - } - - saltb = decode_base64(real_salt, BCRYPT_SALT_LEN); - - B = new BCRYPT(); - hashed = B.crypt_raw(passwordb, saltb, rounds); - - rs.append("$2"); - if (minor >= 'a') - rs.append(minor); - rs.append("$"); - if (rounds < 10) - rs.append("0"); - rs.append(Integer.toString(rounds)); - rs.append("$"); - rs.append(encode_base64(saltb, saltb.length)); - rs.append(encode_base64(hashed, - bf_crypt_ciphertext.length * 4 - 1)); - return rs.toString(); - } - - /** - * Generate a salt for use with the BCrypt.hashpw() method - * @param log_rounds the log2 of the number of rounds of - * hashing to apply - the work factor therefore increases as - * 2**log_rounds. - * @param random an instance of SecureRandom to use - * @return an encoded salt value - */ - public static String gensalt(int log_rounds, SecureRandom random) { - StringBuffer rs = new StringBuffer(); - byte rnd[] = new byte[BCRYPT_SALT_LEN]; - - random.nextBytes(rnd); - - rs.append("$2a$"); - if (log_rounds < 10) - rs.append("0"); - rs.append(Integer.toString(log_rounds)); - rs.append("$"); - rs.append(encode_base64(rnd, rnd.length)); - return rs.toString(); - } - - /** - * Generate a salt for use with the BCrypt.hashpw() method - * @param log_rounds the log2 of the number of rounds of - * hashing to apply - the work factor therefore increases as - * 2**log_rounds. - * @return an encoded salt value - */ - public static String gensalt(int log_rounds) { - return gensalt(log_rounds, new SecureRandom()); - } - - /** - * Generate a salt for use with the BCrypt.hashpw() method, - * selecting a reasonable default for the number of hashing - * rounds to apply - * @return an encoded salt value - */ - public static String gensalt() { - return gensalt(GENSALT_DEFAULT_LOG2_ROUNDS); - } - - /** - * Check that a plaintext password matches a previously hashed - * one - * @param plaintext the plaintext password to verify - * @param hashed the previously-hashed password - * @return true if the passwords match, false otherwise - */ - public static boolean checkpw(String plaintext, String hashed) { - return (hashed.compareTo(hashpw(plaintext, hashed)) == 0); - } + // Expanded Blowfish key + private int P[]; + private int S[]; /** - * Check that a text password matches a previously hashed - * one with the specified number of rounds using recursion - * - * @param text plaintext or hashed text - * @param hashed the previously-hashed password - * @param rounds number of rounds to hash the password - * @return - */ + * Encode a byte array using bcrypt's slightly-modified base64 encoding + * scheme. Note that this is *not* compatible with the standard MIME-base64 + * encoding. + * + * @param d + * the byte array to encode + * @param len + * the number of bytes to encode + * @return base64-encoded string + * @exception IllegalArgumentException + * if the length is invalid + */ + private static String encode_base64(byte d[], int len) + throws IllegalArgumentException { + int off = 0; + StringBuffer rs = new StringBuffer(); + int c1, c2; + + if (len <= 0 || len > d.length) throw new IllegalArgumentException( + "Invalid len"); + + while (off < len) { + c1 = d[off++] & 0xff; + rs.append(base64_code[(c1 >> 2) & 0x3f]); + c1 = (c1 & 0x03) << 4; + if (off >= len) { + rs.append(base64_code[c1 & 0x3f]); + break; + } + c2 = d[off++] & 0xff; + c1 |= (c2 >> 4) & 0x0f; + rs.append(base64_code[c1 & 0x3f]); + c1 = (c2 & 0x0f) << 2; + if (off >= len) { + rs.append(base64_code[c1 & 0x3f]); + break; + } + c2 = d[off++] & 0xff; + c1 |= (c2 >> 6) & 0x03; + rs.append(base64_code[c1 & 0x3f]); + rs.append(base64_code[c2 & 0x3f]); + } + return rs.toString(); + } + + /** + * Look up the 3 bits base64-encoded by the specified character, + * range-checking againt conversion table + * + * @param x + * the base64-encoded value + * @return the decoded value of x + */ + private static byte char64(char x) { + if ((int) x < 0 || (int) x > index_64.length) return -1; + return index_64[(int) x]; + } + + /** + * Decode a string encoded using bcrypt's base64 scheme to a byte array. + * Note that this is *not* compatible with the standard MIME-base64 + * encoding. + * + * @param s + * the string to decode + * @param maxolen + * the maximum number of bytes to decode + * @return an array containing the decoded bytes + * @throws IllegalArgumentException + * if maxolen is invalid + */ + private static byte[] decode_base64(String s, int maxolen) + throws IllegalArgumentException { + StringBuffer rs = new StringBuffer(); + int off = 0, slen = s.length(), olen = 0; + byte ret[]; + byte c1, c2, c3, c4, o; + + if (maxolen <= 0) throw new IllegalArgumentException("Invalid maxolen"); + + while (off < slen - 1 && olen < maxolen) { + c1 = char64(s.charAt(off++)); + c2 = char64(s.charAt(off++)); + if (c1 == -1 || c2 == -1) break; + o = (byte) (c1 << 2); + o |= (c2 & 0x30) >> 4; + rs.append((char) o); + if (++olen >= maxolen || off >= slen) break; + c3 = char64(s.charAt(off++)); + if (c3 == -1) break; + o = (byte) ((c2 & 0x0f) << 4); + o |= (c3 & 0x3c) >> 2; + rs.append((char) o); + if (++olen >= maxolen || off >= slen) break; + c4 = char64(s.charAt(off++)); + o = (byte) ((c3 & 0x03) << 6); + o |= c4; + rs.append((char) o); + ++olen; + } + + ret = new byte[olen]; + for (off = 0; off < olen; off++) + ret[off] = (byte) rs.charAt(off); + return ret; + } + + /** + * Blowfish encipher a single 64-bit block encoded as two 32-bit halves + * + * @param lr + * an array containing the two 32-bit half blocks + * @param off + * the position in the array of the blocks + */ + private final void encipher(int lr[], int off) { + int i, n, l = lr[off], r = lr[off + 1]; + + l ^= P[0]; + for (i = 0; i <= BLOWFISH_NUM_ROUNDS - 2;) { + // Feistel substitution on left word + n = S[(l >> 24) & 0xff]; + n += S[0x100 | ((l >> 16) & 0xff)]; + n ^= S[0x200 | ((l >> 8) & 0xff)]; + n += S[0x300 | (l & 0xff)]; + r ^= n ^ P[++i]; + + // Feistel substitution on right word + n = S[(r >> 24) & 0xff]; + n += S[0x100 | ((r >> 16) & 0xff)]; + n ^= S[0x200 | ((r >> 8) & 0xff)]; + n += S[0x300 | (r & 0xff)]; + l ^= n ^ P[++i]; + } + lr[off] = r ^ P[BLOWFISH_NUM_ROUNDS + 1]; + lr[off + 1] = l; + } + + /** + * Cycically extract a word of key material + * + * @param data + * the string to extract the data from + * @param offp + * a "pointer" (as a one-entry array) to the current offset into + * data + * @return the next word of material from data + */ + private static int streamtoword(byte data[], int offp[]) { + int i; + int word = 0; + int off = offp[0]; + + for (i = 0; i < 4; i++) { + word = (word << 8) | (data[off] & 0xff); + off = (off + 1) % data.length; + } + + offp[0] = off; + return word; + } + + /** + * Initialise the Blowfish key schedule + */ + private void init_key() { + P = (int[]) P_orig.clone(); + S = (int[]) S_orig.clone(); + } + + /** + * Key the Blowfish cipher + * + * @param key + * an array containing the key + */ + private void key(byte key[]) { + int i; + int koffp[] = { 0 }; + int lr[] = { 0, 0 }; + int plen = P.length, slen = S.length; + + for (i = 0; i < plen; i++) + P[i] = P[i] ^ streamtoword(key, koffp); + + for (i = 0; i < plen; i += 2) { + encipher(lr, 0); + P[i] = lr[0]; + P[i + 1] = lr[1]; + } + + for (i = 0; i < slen; i += 2) { + encipher(lr, 0); + S[i] = lr[0]; + S[i + 1] = lr[1]; + } + } + + /** + * Perform the "enhanced key schedule" step described by Provos and Mazieres + * in "A Future-Adaptable Password Scheme" + * http://www.openbsd.org/papers/bcrypt-paper.ps + * + * @param data + * salt information + * @param key + * password information + */ + private void ekskey(byte data[], byte key[]) { + int i; + int koffp[] = { 0 }, doffp[] = { 0 }; + int lr[] = { 0, 0 }; + int plen = P.length, slen = S.length; + + for (i = 0; i < plen; i++) + P[i] = P[i] ^ streamtoword(key, koffp); + + for (i = 0; i < plen; i += 2) { + lr[0] ^= streamtoword(data, doffp); + lr[1] ^= streamtoword(data, doffp); + encipher(lr, 0); + P[i] = lr[0]; + P[i + 1] = lr[1]; + } + + for (i = 0; i < slen; i += 2) { + lr[0] ^= streamtoword(data, doffp); + lr[1] ^= streamtoword(data, doffp); + encipher(lr, 0); + S[i] = lr[0]; + S[i + 1] = lr[1]; + } + } + + /** + * Perform the central password hashing step in the bcrypt scheme + * + * @param password + * the password to hash + * @param salt + * the binary salt to hash with the password + * @param log_rounds + * the binary logarithm of the number of rounds of hashing to + * apply + * @return an array containing the binary hashed password + */ + private byte[] crypt_raw(byte password[], byte salt[], int log_rounds) { + int rounds, i, j; + int cdata[] = (int[]) bf_crypt_ciphertext.clone(); + int clen = cdata.length; + byte ret[]; + + if (log_rounds < 4 || log_rounds > 31) throw new IllegalArgumentException( + "Bad number of rounds"); + rounds = 1 << log_rounds; + if (salt.length != BCRYPT_SALT_LEN) throw new IllegalArgumentException( + "Bad salt length"); + + init_key(); + ekskey(salt, password); + for (i = 0; i < rounds; i++) { + key(password); + key(salt); + } + + for (i = 0; i < 64; i++) { + for (j = 0; j < (clen >> 1); j++) + encipher(cdata, j << 1); + } + + ret = new byte[clen * 4]; + for (i = 0, j = 0; i < clen; i++) { + ret[j++] = (byte) ((cdata[i] >> 24) & 0xff); + ret[j++] = (byte) ((cdata[i] >> 16) & 0xff); + ret[j++] = (byte) ((cdata[i] >> 8) & 0xff); + ret[j++] = (byte) (cdata[i] & 0xff); + } + return ret; + } + + /** + * Hash a password using the OpenBSD bcrypt scheme + * + * @param password + * the password to hash + * @param salt + * the salt to hash with (perhaps generated using BCrypt.gensalt) + * @return the hashed password + */ + public static String hashpw(String password, String salt) { + BCRYPT B; + String real_salt; + byte passwordb[], saltb[], hashed[]; + char minor = (char) 0; + int rounds, off = 0; + StringBuffer rs = new StringBuffer(); + + if (salt.charAt(0) != '$' || salt.charAt(1) != '2') throw new IllegalArgumentException( + "Invalid salt version"); + if (salt.charAt(2) == '$') off = 3; + else { + minor = salt.charAt(2); + if (minor != 'a' || salt.charAt(3) != '$') throw new IllegalArgumentException( + "Invalid salt revision"); + off = 4; + } + + // Extract number of rounds + if (salt.charAt(off + 2) > '$') throw new IllegalArgumentException( + "Missing salt rounds"); + rounds = Integer.parseInt(salt.substring(off, off + 2)); + + real_salt = salt.substring(off + 3, off + 25); + try { + passwordb = (password + (minor >= 'a' ? "\000" : "")) + .getBytes("UTF-8"); + } catch (UnsupportedEncodingException uee) { + throw new AssertionError("UTF-8 is not supported"); + } + + saltb = decode_base64(real_salt, BCRYPT_SALT_LEN); + + B = new BCRYPT(); + hashed = B.crypt_raw(passwordb, saltb, rounds); + + rs.append("$2"); + if (minor >= 'a') rs.append(minor); + rs.append("$"); + if (rounds < 10) rs.append("0"); + rs.append(Integer.toString(rounds)); + rs.append("$"); + rs.append(encode_base64(saltb, saltb.length)); + rs.append(encode_base64(hashed, bf_crypt_ciphertext.length * 4 - 1)); + return rs.toString(); + } + + /** + * Generate a salt for use with the BCrypt.hashpw() method + * + * @param log_rounds + * the log2 of the number of rounds of hashing to apply - the + * work factor therefore increases as 2**log_rounds. + * @param random + * an instance of SecureRandom to use + * @return an encoded salt value + */ + public static String gensalt(int log_rounds, SecureRandom random) { + StringBuffer rs = new StringBuffer(); + byte rnd[] = new byte[BCRYPT_SALT_LEN]; + + random.nextBytes(rnd); + + rs.append("$2a$"); + if (log_rounds < 10) rs.append("0"); + rs.append(Integer.toString(log_rounds)); + rs.append("$"); + rs.append(encode_base64(rnd, rnd.length)); + return rs.toString(); + } + + /** + * Generate a salt for use with the BCrypt.hashpw() method + * + * @param log_rounds + * the log2 of the number of rounds of hashing to apply - the + * work factor therefore increases as 2**log_rounds. + * @return an encoded salt value + */ + public static String gensalt(int log_rounds) { + return gensalt(log_rounds, new SecureRandom()); + } + + /** + * Generate a salt for use with the BCrypt.hashpw() method, selecting a + * reasonable default for the number of hashing rounds to apply + * + * @return an encoded salt value + */ + public static String gensalt() { + return gensalt(GENSALT_DEFAULT_LOG2_ROUNDS); + } + + /** + * Check that a plaintext password matches a previously hashed one + * + * @param plaintext + * the plaintext password to verify + * @param hashed + * the previously-hashed password + * @return true if the passwords match, false otherwise + */ + public static boolean checkpw(String plaintext, String hashed) { + return (hashed.compareTo(hashpw(plaintext, hashed)) == 0); + } + + /** + * Check that a text password matches a previously hashed one with the + * specified number of rounds using recursion + * + * @param text + * plaintext or hashed text + * @param hashed + * the previously-hashed password + * @param rounds + * number of rounds to hash the password + * @return + */ public static boolean checkpw(String text, String hashed, int rounds) { boolean matched = false; @@ -771,23 +726,23 @@ public class BCRYPT implements EncryptionMethod { matched = hash.compareTo(hashed) == 0; } } else { - matched = text.compareTo(hashed) == 0; - } + matched = text.compareTo(hashed) == 0; + } - return matched; - } + return matched; + } - @Override - public String getHash(String password, String salt, String name) - throws NoSuchAlgorithmException { - return hashpw(password, salt); - } + @Override + public String getHash(String password, String salt, String name) + throws NoSuchAlgorithmException { + return hashpw(password, salt); + } - @Override - public boolean comparePassword(String hash, String password, - String playerName) throws NoSuchAlgorithmException { - return checkpw(password, hash); - } + @Override + public boolean comparePassword(String hash, String password, + String playerName) throws NoSuchAlgorithmException { + return checkpw(password, hash); + } public static String getDoubleHash(String text, String salt) { String hash = hashpw(text, salt); diff --git a/src/main/java/fr/xephi/authme/security/crypts/CRAZYCRYPT1.java b/src/main/java/fr/xephi/authme/security/crypts/CRAZYCRYPT1.java index 109c7701..0bd40bce 100644 --- a/src/main/java/fr/xephi/authme/security/crypts/CRAZYCRYPT1.java +++ b/src/main/java/fr/xephi/authme/security/crypts/CRAZYCRYPT1.java @@ -7,12 +7,14 @@ import java.security.NoSuchAlgorithmException; public class CRAZYCRYPT1 implements EncryptionMethod { protected final Charset charset = Charset.forName("UTF-8"); - private static final char[] CRYPTCHARS = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; + private static final char[] CRYPTCHARS = new char[] { '0', '1', '2', '3', + '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; @Override public String getHash(String password, String salt, String name) throws NoSuchAlgorithmException { - final String text = "ÜÄaeut//&/=I " + password + "7421€547" + name + "__+IÄIH§%NK " + password; + final String text = "ÜÄaeut//&/=I " + password + "7421€547" + name + + "__+IÄIH§%NK " + password; try { final MessageDigest md = MessageDigest.getInstance("SHA-512"); md.update(text.getBytes(charset), 0, text.length()); @@ -27,7 +29,7 @@ public class CRAZYCRYPT1 implements EncryptionMethod { String playerName) throws NoSuchAlgorithmException { return hash.equals(getHash(password, null, playerName)); } - + public static String byteArrayToHexString(final byte... args) { final char[] chars = new char[args.length * 2]; for (int i = 0; i < args.length; i++) { @@ -36,4 +38,4 @@ public class CRAZYCRYPT1 implements EncryptionMethod { } return new String(chars); } -} \ No newline at end of file +} diff --git a/src/main/java/fr/xephi/authme/security/crypts/CryptPBKDF2.java b/src/main/java/fr/xephi/authme/security/crypts/CryptPBKDF2.java index f2673f73..f9d488ac 100644 --- a/src/main/java/fr/xephi/authme/security/crypts/CryptPBKDF2.java +++ b/src/main/java/fr/xephi/authme/security/crypts/CryptPBKDF2.java @@ -5,28 +5,29 @@ import java.security.NoSuchAlgorithmException; import fr.xephi.authme.security.pbkdf2.PBKDF2Engine; import fr.xephi.authme.security.pbkdf2.PBKDF2Parameters; - public class CryptPBKDF2 implements EncryptionMethod { - @Override - public String getHash(String password, String salt, String name) - throws NoSuchAlgorithmException { - String result = "pbkdf2_sha256$10000$"+salt+"$"; - PBKDF2Parameters params = new PBKDF2Parameters("HmacSHA256", "ASCII", salt.getBytes(), 10000); - PBKDF2Engine engine = new PBKDF2Engine(params); - - return result + engine.deriveKey(password,64).toString(); - } + @Override + public String getHash(String password, String salt, String name) + throws NoSuchAlgorithmException { + String result = "pbkdf2_sha256$10000$" + salt + "$"; + PBKDF2Parameters params = new PBKDF2Parameters("HmacSHA256", "ASCII", + salt.getBytes(), 10000); + PBKDF2Engine engine = new PBKDF2Engine(params); - @Override - public boolean comparePassword(String hash, String password, - String playerName) throws NoSuchAlgorithmException { - String[] line = hash.split("\\$"); - String salt = line[2]; - String derivedKey = line[3]; - PBKDF2Parameters params = new PBKDF2Parameters("HmacSHA256", "ASCII", salt.getBytes(), 10000, derivedKey.getBytes()); - PBKDF2Engine engine = new PBKDF2Engine(params); - return engine.verifyKey(password); - } + return result + engine.deriveKey(password, 64).toString(); + } + + @Override + public boolean comparePassword(String hash, String password, + String playerName) throws NoSuchAlgorithmException { + String[] line = hash.split("\\$"); + String salt = line[2]; + String derivedKey = line[3]; + PBKDF2Parameters params = new PBKDF2Parameters("HmacSHA256", "ASCII", + salt.getBytes(), 10000, derivedKey.getBytes()); + PBKDF2Engine engine = new PBKDF2Engine(params); + return engine.verifyKey(password); + } } diff --git a/src/main/java/fr/xephi/authme/security/crypts/DOUBLEMD5.java b/src/main/java/fr/xephi/authme/security/crypts/DOUBLEMD5.java index e4c3caaf..3511509d 100644 --- a/src/main/java/fr/xephi/authme/security/crypts/DOUBLEMD5.java +++ b/src/main/java/fr/xephi/authme/security/crypts/DOUBLEMD5.java @@ -6,24 +6,26 @@ import java.security.NoSuchAlgorithmException; public class DOUBLEMD5 implements EncryptionMethod { - @Override - public String getHash(String password, String salt, String name) - throws NoSuchAlgorithmException { - return getMD5(getMD5(password)); - } + @Override + public String getHash(String password, String salt, String name) + throws NoSuchAlgorithmException { + return getMD5(getMD5(password)); + } - @Override - public boolean comparePassword(String hash, String password, - String playerName) throws NoSuchAlgorithmException { - return hash.equals(getHash(password, "", "")); - } + @Override + public boolean comparePassword(String hash, String password, + String playerName) throws NoSuchAlgorithmException { + return hash.equals(getHash(password, "", "")); + } - private static String getMD5(String message) throws NoSuchAlgorithmException { + 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)); } } diff --git a/src/main/java/fr/xephi/authme/security/crypts/EncryptionMethod.java b/src/main/java/fr/xephi/authme/security/crypts/EncryptionMethod.java index d5cd9562..40b9b84f 100644 --- a/src/main/java/fr/xephi/authme/security/crypts/EncryptionMethod.java +++ b/src/main/java/fr/xephi/authme/security/crypts/EncryptionMethod.java @@ -3,28 +3,38 @@ package fr.xephi.authme.security.crypts; import java.security.NoSuchAlgorithmException; /** - *

Public interface for Custom Password encryption method

- *

The getHash function is called when we need to crypt the password (/register usually)

- *

The comparePassword is called when we need to match password (/login usually)

+ *

+ * Public interface for Custom Password encryption method + *

+ *

+ * The getHash function is called when we need to crypt the password (/register + * usually) + *

+ *

+ * The comparePassword is called when we need to match password (/login usually) + *

*/ public interface EncryptionMethod { - /** - * @param password - * @param salt (can be an other data like playerName;salt , playerName, etc... - * for customs methods) - * @return Hashing password - * @throws NoSuchAlgorithmException - */ - String getHash(String password, String salt, String name) throws NoSuchAlgorithmException; + /** + * @param password + * @param salt + * (can be an other data like playerName;salt , playerName, + * etc... for customs methods) + * @return Hashing password + * @throws NoSuchAlgorithmException + */ + String getHash(String password, String salt, String name) + throws NoSuchAlgorithmException; - /** - * @param hash - * @param password - * @param playerName - * @return true if password match, false else - * @throws NoSuchAlgorithmException - */ - boolean comparePassword(String hash, String password, String playerName) throws NoSuchAlgorithmException; + /** + * @param hash + * @param password + * @param playerName + * @return true if password match, false else + * @throws NoSuchAlgorithmException + */ + boolean comparePassword(String hash, String password, String playerName) + throws NoSuchAlgorithmException; } diff --git a/src/main/java/fr/xephi/authme/security/crypts/IPB3.java b/src/main/java/fr/xephi/authme/security/crypts/IPB3.java index 1f944336..87eedd45 100644 --- a/src/main/java/fr/xephi/authme/security/crypts/IPB3.java +++ b/src/main/java/fr/xephi/authme/security/crypts/IPB3.java @@ -6,27 +6,29 @@ import java.security.NoSuchAlgorithmException; import fr.xephi.authme.AuthMe; - public class IPB3 implements EncryptionMethod { - @Override - public String getHash(String password, String salt, String name) - throws NoSuchAlgorithmException { - return getMD5(getMD5(salt) + getMD5(password)); - } + @Override + public String getHash(String password, String salt, String name) + throws NoSuchAlgorithmException { + return getMD5(getMD5(salt) + getMD5(password)); + } - @Override - public boolean comparePassword(String hash, String password, - String playerName) throws NoSuchAlgorithmException { - String salt = AuthMe.getInstance().database.getAuth(playerName).getSalt(); - return hash.equals(getHash(password, salt, playerName)); - } + @Override + public boolean comparePassword(String hash, String password, + String playerName) throws NoSuchAlgorithmException { + String salt = AuthMe.getInstance().database.getAuth(playerName) + .getSalt(); + return hash.equals(getHash(password, salt, playerName)); + } - private static String getMD5(String message) throws NoSuchAlgorithmException { + 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)); } } diff --git a/src/main/java/fr/xephi/authme/security/crypts/JOOMLA.java b/src/main/java/fr/xephi/authme/security/crypts/JOOMLA.java index 9b20f35c..519f1403 100644 --- a/src/main/java/fr/xephi/authme/security/crypts/JOOMLA.java +++ b/src/main/java/fr/xephi/authme/security/crypts/JOOMLA.java @@ -6,24 +6,26 @@ import java.security.NoSuchAlgorithmException; public class JOOMLA implements EncryptionMethod { - @Override - public String getHash(String password, String salt, String name) - throws NoSuchAlgorithmException { - return getMD5(password + salt) + ":" + salt; - } + @Override + public String getHash(String password, String salt, String name) + throws NoSuchAlgorithmException { + return getMD5(password + salt) + ":" + salt; + } - @Override - public boolean comparePassword(String hash, String password, - String playerName) throws NoSuchAlgorithmException { - String salt = hash.split(":")[1]; - return hash.equals(getMD5(password + salt) + ":" + salt); - } + @Override + public boolean comparePassword(String hash, String password, + String playerName) throws NoSuchAlgorithmException { + String salt = hash.split(":")[1]; + return hash.equals(getMD5(password + salt) + ":" + salt); + } - private static String getMD5(String message) throws NoSuchAlgorithmException { + 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)); } } diff --git a/src/main/java/fr/xephi/authme/security/crypts/MD5.java b/src/main/java/fr/xephi/authme/security/crypts/MD5.java index 9fd2d786..7cd3871e 100644 --- a/src/main/java/fr/xephi/authme/security/crypts/MD5.java +++ b/src/main/java/fr/xephi/authme/security/crypts/MD5.java @@ -6,21 +6,25 @@ import java.security.NoSuchAlgorithmException; public class MD5 implements EncryptionMethod { - @Override - public String getHash(String password, String salt, String name) throws NoSuchAlgorithmException { + @Override + public String getHash(String password, String salt, String name) + throws NoSuchAlgorithmException { return getMD5(password); - } + } - @Override - public boolean comparePassword(String hash, String password, String playerName) throws NoSuchAlgorithmException { - return hash.equals(getHash(password, "", "")); - } + @Override + public boolean comparePassword(String hash, String password, + String playerName) throws NoSuchAlgorithmException { + return hash.equals(getHash(password, "", "")); + } - private static String getMD5(String message) throws NoSuchAlgorithmException { + 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)); } } diff --git a/src/main/java/fr/xephi/authme/security/crypts/MD5VB.java b/src/main/java/fr/xephi/authme/security/crypts/MD5VB.java index 8b6df78a..bdc1eb6b 100644 --- a/src/main/java/fr/xephi/authme/security/crypts/MD5VB.java +++ b/src/main/java/fr/xephi/authme/security/crypts/MD5VB.java @@ -6,25 +6,27 @@ import java.security.NoSuchAlgorithmException; public class MD5VB implements EncryptionMethod { - @Override - public String getHash(String password, String salt, String name) - throws NoSuchAlgorithmException { - return "$MD5vb$" + salt + "$" + getMD5(getMD5(password) + salt); - } + @Override + public String getHash(String password, String salt, String name) + throws NoSuchAlgorithmException { + return "$MD5vb$" + salt + "$" + getMD5(getMD5(password) + salt); + } - @Override - public boolean comparePassword(String hash, String password, - String playerName) throws NoSuchAlgorithmException { + @Override + public boolean comparePassword(String hash, String password, + String playerName) throws NoSuchAlgorithmException { String[] line = hash.split("\\$"); return hash.equals(getHash(password, line[2], "")); - } - - private static String getMD5(String message) throws NoSuchAlgorithmException { + } + + 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)); } } diff --git a/src/main/java/fr/xephi/authme/security/crypts/MYBB.java b/src/main/java/fr/xephi/authme/security/crypts/MYBB.java index 9bd50bf7..f5faa678 100644 --- a/src/main/java/fr/xephi/authme/security/crypts/MYBB.java +++ b/src/main/java/fr/xephi/authme/security/crypts/MYBB.java @@ -6,27 +6,29 @@ import java.security.NoSuchAlgorithmException; import fr.xephi.authme.AuthMe; - public class MYBB implements EncryptionMethod { - @Override - public String getHash(String password, String salt, String name) - throws NoSuchAlgorithmException { - return getMD5(getMD5(salt)+ getMD5(password)); - } + @Override + public String getHash(String password, String salt, String name) + throws NoSuchAlgorithmException { + return getMD5(getMD5(salt) + getMD5(password)); + } - @Override - public boolean comparePassword(String hash, String password, - String playerName) throws NoSuchAlgorithmException { - String salt = AuthMe.getInstance().database.getAuth(playerName).getSalt(); - return hash.equals(getHash(password, salt, playerName)); - } + @Override + public boolean comparePassword(String hash, String password, + String playerName) throws NoSuchAlgorithmException { + String salt = AuthMe.getInstance().database.getAuth(playerName) + .getSalt(); + return hash.equals(getHash(password, salt, playerName)); + } - private static String getMD5(String message) throws NoSuchAlgorithmException { + 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)); } } diff --git a/src/main/java/fr/xephi/authme/security/crypts/PHPBB.java b/src/main/java/fr/xephi/authme/security/crypts/PHPBB.java index b965a7b4..40a93bd7 100644 --- a/src/main/java/fr/xephi/authme/security/crypts/PHPBB.java +++ b/src/main/java/fr/xephi/authme/security/crypts/PHPBB.java @@ -1,6 +1,6 @@ /* - * To change this template, choose Tools | Templates - * and open the template in the editor. + * To change this template, choose Tools | Templates and open the template in + * the editor. */ package fr.xephi.authme.security.crypts; @@ -14,151 +14,138 @@ import java.security.NoSuchAlgorithmException; * @author stefano */ public class PHPBB implements EncryptionMethod { - private static final int PHP_VERSION = 4; - private String itoa64 = -"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + private static final int PHP_VERSION = 4; + private String itoa64 = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; - public String phpbb_hash(String password, String salt) { - String random_state = salt; - String random = ""; - int count = 6; - if (random.length() < count) { - random = ""; - for (int i = 0; i < count; i += 16) { - random_state = md5(salt + random_state); - random += pack(md5(random_state)); - } - random = random.substring(0, count); + public String phpbb_hash(String password, String salt) { + String random_state = salt; + String random = ""; + int count = 6; + if (random.length() < count) { + random = ""; + for (int i = 0; i < count; i += 16) { + random_state = md5(salt + 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); } - String hash = _hash_crypt_private( - password, _hash_gensalt_private(random, itoa64)); - if (hash.length() == 34) - return hash; - return md5(password); - } - private String _hash_gensalt_private(String input, String itoa64) { - return _hash_gensalt_private(input, itoa64, 6); - } - - @SuppressWarnings("unused") -private String _hash_gensalt_private( - String input, String itoa64, int iteration_count_log2) { - if (iteration_count_log2 < 4 || iteration_count_log2 > 31) { - iteration_count_log2 = 8; + private String _hash_gensalt_private(String input, String itoa64) { + return _hash_gensalt_private(input, itoa64, 6); } - String output = "$H$"; - output += itoa64.charAt( - Math.min(iteration_count_log2 + - ((PHP_VERSION >= 5) ? 5 : 3), 30)); - output += _hash_encode64(input, 6); - return output; - } - /** - * Encode hash - */ - 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 = "*"; - if (!setting.substring(0, 3).equals("$H$")) + @SuppressWarnings("unused") + private String _hash_gensalt_private(String input, String itoa64, + int iteration_count_log2) { + 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; - int count_log2 = itoa64.indexOf(setting.charAt(3)); - if (count_log2 < 7 || count_log2 > 30) + } + + /** + * Encode hash + */ + 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; - int count = 1 << count_log2; - String salt = setting.substring(4, 12); - if (salt.length() != 8) + } + + String _hash_crypt_private(String password, String setting) { + 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; - 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; - } - - public boolean phpbb_check_hash( String password, String hash) { - if (hash.length() == 34) - return _hash_crypt_private(password, hash).equals(hash); - else - return md5(password).equals(hash); - } - - public static String md5(String data) { - try { - byte[] bytes = data.getBytes("ISO-8859-1"); - MessageDigest md5er = MessageDigest.getInstance("MD5"); - byte[] hash = md5er.digest(bytes); - return bytes2hex(hash); - } catch (GeneralSecurityException e) { - throw new RuntimeException(e); - } catch (UnsupportedEncodingException e) { - 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++) { - String x = Integer.toHexString(bytes[i] & 0xff); - if (x.length() < 2) - r.append("0"); - r.append(x); + public boolean phpbb_check_hash(String password, String hash) { + if (hash.length() == 34) return _hash_crypt_private(password, hash) + .equals(hash); + else return md5(password).equals(hash); } - return r.toString(); - } - static String pack(String hex) { - StringBuffer buf = new StringBuffer(); - for(int i = 0; i < hex.length(); i += 2) { - char c1 = hex.charAt(i); - char c2 = hex.charAt(i+1); - char packed = (char) (hexToInt(c1) * 16 + hexToInt(c2)); - buf.append(packed); + public static String md5(String data) { + try { + byte[] bytes = data.getBytes("ISO-8859-1"); + MessageDigest md5er = MessageDigest.getInstance("MD5"); + byte[] hash = md5er.digest(bytes); + return bytes2hex(hash); + } catch (GeneralSecurityException e) { + throw new RuntimeException(e); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } } - return buf.toString(); - } -@Override -public String getHash(String password, String salt, String name) - throws NoSuchAlgorithmException { - return phpbb_hash(password, salt); -} + 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); + } -@Override -public boolean comparePassword(String hash, String password, String playerName) - throws NoSuchAlgorithmException { - return phpbb_check_hash(password, hash); -} + private static String bytes2hex(byte[] bytes) { + StringBuffer r = new StringBuffer(32); + for (int i = 0; i < bytes.length; i++) { + String x = Integer.toHexString(bytes[i] & 0xff); + if (x.length() < 2) r.append("0"); + r.append(x); + } + return r.toString(); + } + + static String pack(String hex) { + StringBuffer buf = new StringBuffer(); + for (int i = 0; i < hex.length(); i += 2) { + char c1 = hex.charAt(i); + char c2 = hex.charAt(i + 1); + char packed = (char) (hexToInt(c1) * 16 + hexToInt(c2)); + buf.append(packed); + } + return buf.toString(); + } + + @Override + public String getHash(String password, String salt, String name) + throws NoSuchAlgorithmException { + return phpbb_hash(password, salt); + } + + @Override + public boolean comparePassword(String hash, String password, + String playerName) throws NoSuchAlgorithmException { + return phpbb_check_hash(password, hash); + } } diff --git a/src/main/java/fr/xephi/authme/security/crypts/PHPFUSION.java b/src/main/java/fr/xephi/authme/security/crypts/PHPFUSION.java index e74b45fd..fe108c33 100644 --- a/src/main/java/fr/xephi/authme/security/crypts/PHPFUSION.java +++ b/src/main/java/fr/xephi/authme/security/crypts/PHPFUSION.java @@ -11,49 +11,52 @@ import javax.crypto.spec.SecretKeySpec; import fr.xephi.authme.AuthMe; - public class PHPFUSION implements EncryptionMethod { - @Override - public String getHash(String password, String salt, String name) - throws NoSuchAlgorithmException { + @Override + public String getHash(String password, String salt, String name) + throws NoSuchAlgorithmException { String digest = null; String algo = "HmacSHA256"; String keyString = getSHA1(salt); try { - SecretKeySpec key = new SecretKeySpec((keyString).getBytes("UTF-8"), algo); - Mac mac = Mac.getInstance(algo); - mac.init(key); - byte[] bytes = mac.doFinal(password.getBytes("ASCII")); - StringBuffer hash = new StringBuffer(); - for (int i = 0; i < bytes.length; i++) { - String hex = Integer.toHexString(0xFF & bytes[i]); - if (hex.length() == 1) { - hash.append('0'); + SecretKeySpec key = new SecretKeySpec( + (keyString).getBytes("UTF-8"), algo); + Mac mac = Mac.getInstance(algo); + mac.init(key); + byte[] bytes = mac.doFinal(password.getBytes("ASCII")); + StringBuffer hash = new StringBuffer(); + for (int i = 0; i < bytes.length; i++) { + String hex = Integer.toHexString(0xFF & bytes[i]); + if (hex.length() == 1) { + hash.append('0'); + } + hash.append(hex); } - hash.append(hex); - } - digest = hash.toString(); + digest = hash.toString(); } catch (UnsupportedEncodingException e) { } catch (InvalidKeyException e) { } catch (NoSuchAlgorithmException e) { } return digest; - } + } - @Override - public boolean comparePassword(String hash, String password, - String playerName) throws NoSuchAlgorithmException { - String salt = AuthMe.getInstance().database.getAuth(playerName).getSalt(); - return hash.equals(getHash(password, salt, "")); - } - - private static String getSHA1(String message) throws NoSuchAlgorithmException { + @Override + public boolean comparePassword(String hash, String password, + String playerName) throws NoSuchAlgorithmException { + String salt = AuthMe.getInstance().database.getAuth(playerName) + .getSalt(); + return hash.equals(getHash(password, salt, "")); + } + + private static String getSHA1(String message) + throws NoSuchAlgorithmException { MessageDigest sha1 = MessageDigest.getInstance("SHA1"); 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)); } } diff --git a/src/main/java/fr/xephi/authme/security/crypts/PLAINTEXT.java b/src/main/java/fr/xephi/authme/security/crypts/PLAINTEXT.java index 4562d7d5..59434b6d 100644 --- a/src/main/java/fr/xephi/authme/security/crypts/PLAINTEXT.java +++ b/src/main/java/fr/xephi/authme/security/crypts/PLAINTEXT.java @@ -4,16 +4,16 @@ import java.security.NoSuchAlgorithmException; public class PLAINTEXT implements EncryptionMethod { - @Override - public String getHash(String password, String salt, String name) - throws NoSuchAlgorithmException { - return password; - } + @Override + public String getHash(String password, String salt, String name) + throws NoSuchAlgorithmException { + return password; + } - @Override - public boolean comparePassword(String hash, String password, - String playerName) throws NoSuchAlgorithmException { - return hash.equals(password); - } + @Override + public boolean comparePassword(String hash, String password, + String playerName) throws NoSuchAlgorithmException { + return hash.equals(password); + } } diff --git a/src/main/java/fr/xephi/authme/security/crypts/ROYALAUTH.java b/src/main/java/fr/xephi/authme/security/crypts/ROYALAUTH.java index 4f75e1a5..8b61d855 100644 --- a/src/main/java/fr/xephi/authme/security/crypts/ROYALAUTH.java +++ b/src/main/java/fr/xephi/authme/security/crypts/ROYALAUTH.java @@ -5,26 +5,30 @@ import java.security.NoSuchAlgorithmException; public class ROYALAUTH implements EncryptionMethod { - @Override - public String getHash(String password, String salt, String name) throws NoSuchAlgorithmException { - for (int i = 0; i < 25; i++) - password = hash(password, salt); - return password; - } + @Override + public String getHash(String password, String salt, String name) + throws NoSuchAlgorithmException { + for (int i = 0; i < 25; i++) + password = hash(password, salt); + return password; + } - public String hash(String password, String salt) throws NoSuchAlgorithmException { - MessageDigest md = MessageDigest.getInstance("SHA-512"); - md.update(password.getBytes()); - byte byteData[] = md.digest(); - StringBuilder sb = new StringBuilder(); - for (byte aByteData : byteData) - sb.append(Integer.toString((aByteData & 0xff) + 0x100, 16).substring(1)); - return sb.toString(); - } + public String hash(String password, String salt) + throws NoSuchAlgorithmException { + MessageDigest md = MessageDigest.getInstance("SHA-512"); + md.update(password.getBytes()); + byte byteData[] = md.digest(); + StringBuilder sb = new StringBuilder(); + for (byte aByteData : byteData) + sb.append(Integer.toString((aByteData & 0xff) + 0x100, 16) + .substring(1)); + return sb.toString(); + } - @Override - public boolean comparePassword(String hash, String password, String playerName) throws NoSuchAlgorithmException { - return hash.equalsIgnoreCase(getHash(password, "", "")); - } + @Override + public boolean comparePassword(String hash, String password, + String playerName) throws NoSuchAlgorithmException { + return hash.equalsIgnoreCase(getHash(password, "", "")); + } } diff --git a/src/main/java/fr/xephi/authme/security/crypts/SALTED2MD5.java b/src/main/java/fr/xephi/authme/security/crypts/SALTED2MD5.java index 326f1f74..8ca5fdd0 100644 --- a/src/main/java/fr/xephi/authme/security/crypts/SALTED2MD5.java +++ b/src/main/java/fr/xephi/authme/security/crypts/SALTED2MD5.java @@ -6,27 +6,29 @@ import java.security.NoSuchAlgorithmException; import fr.xephi.authme.AuthMe; - public class SALTED2MD5 implements EncryptionMethod { - @Override - public String getHash(String password, String salt, String name) - throws NoSuchAlgorithmException { - return getMD5(getMD5(password) + salt); - } + @Override + public String getHash(String password, String salt, String name) + throws NoSuchAlgorithmException { + return getMD5(getMD5(password) + salt); + } - @Override - public boolean comparePassword(String hash, String password, - String playerName) throws NoSuchAlgorithmException { - String salt = AuthMe.getInstance().database.getAuth(playerName).getSalt(); - return hash.equals(getMD5(getMD5(password) + salt)); - } + @Override + public boolean comparePassword(String hash, String password, + String playerName) throws NoSuchAlgorithmException { + String salt = AuthMe.getInstance().database.getAuth(playerName) + .getSalt(); + return hash.equals(getMD5(getMD5(password) + salt)); + } - private static String getMD5(String message) throws NoSuchAlgorithmException { + 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)); } } diff --git a/src/main/java/fr/xephi/authme/security/crypts/SHA1.java b/src/main/java/fr/xephi/authme/security/crypts/SHA1.java index 79d8b6f2..5865918d 100644 --- a/src/main/java/fr/xephi/authme/security/crypts/SHA1.java +++ b/src/main/java/fr/xephi/authme/security/crypts/SHA1.java @@ -6,23 +6,26 @@ import java.security.NoSuchAlgorithmException; public class SHA1 implements EncryptionMethod { - @Override - public String getHash(String password, String salt, String name) throws NoSuchAlgorithmException { - return getSHA1(password); - } + @Override + public String getHash(String password, String salt, String name) + throws NoSuchAlgorithmException { + return getSHA1(password); + } - @Override - public boolean comparePassword(String hash, String password, String playerName) - throws NoSuchAlgorithmException { - return hash.equals(getHash(password, "", "")); - } - - private static String getSHA1(String message) throws NoSuchAlgorithmException { + @Override + public boolean comparePassword(String hash, String password, + String playerName) throws NoSuchAlgorithmException { + return hash.equals(getHash(password, "", "")); + } + + private static String getSHA1(String message) + throws NoSuchAlgorithmException { MessageDigest sha1 = MessageDigest.getInstance("SHA1"); 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)); } } diff --git a/src/main/java/fr/xephi/authme/security/crypts/SHA256.java b/src/main/java/fr/xephi/authme/security/crypts/SHA256.java index 6b5d08b1..089fe40e 100644 --- a/src/main/java/fr/xephi/authme/security/crypts/SHA256.java +++ b/src/main/java/fr/xephi/authme/security/crypts/SHA256.java @@ -6,24 +6,27 @@ import java.security.NoSuchAlgorithmException; public class SHA256 implements EncryptionMethod { - @Override - public String getHash(String password, String salt, String name) throws NoSuchAlgorithmException { - return "$SHA$" + salt + "$" + getSHA256(getSHA256(password) + salt); - } + @Override + public String getHash(String password, String salt, String name) + throws NoSuchAlgorithmException { + return "$SHA$" + salt + "$" + getSHA256(getSHA256(password) + salt); + } - @Override - public boolean comparePassword(String hash, String password, String playerName) - throws NoSuchAlgorithmException { - String[] line = hash.split("\\$"); - return hash.equals(getHash(password, line[2], "")); - } - - private static String getSHA256(String message) throws NoSuchAlgorithmException { + @Override + public boolean comparePassword(String hash, String password, + String playerName) throws NoSuchAlgorithmException { + String[] line = hash.split("\\$"); + return hash.equals(getHash(password, line[2], "")); + } + + 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)); } } diff --git a/src/main/java/fr/xephi/authme/security/crypts/SHA512.java b/src/main/java/fr/xephi/authme/security/crypts/SHA512.java index 738ce5c2..f035766d 100644 --- a/src/main/java/fr/xephi/authme/security/crypts/SHA512.java +++ b/src/main/java/fr/xephi/authme/security/crypts/SHA512.java @@ -6,23 +6,25 @@ import java.security.NoSuchAlgorithmException; public class SHA512 implements EncryptionMethod { - @Override - public String getHash(String password, String salt, String name) - throws NoSuchAlgorithmException { - return getSHA512(password); - } + @Override + public String getHash(String password, String salt, String name) + throws NoSuchAlgorithmException { + return getSHA512(password); + } - @Override - public boolean comparePassword(String hash, String password, - String playerName) throws NoSuchAlgorithmException { - return hash.equals(getHash(password, "", "")); - } + @Override + public boolean comparePassword(String hash, String password, + String playerName) throws NoSuchAlgorithmException { + return hash.equals(getHash(password, "", "")); + } - private static String getSHA512(String message) throws NoSuchAlgorithmException { + private static String getSHA512(String message) + throws NoSuchAlgorithmException { MessageDigest sha512 = MessageDigest.getInstance("SHA-512"); sha512.reset(); sha512.update(message.getBytes()); byte[] digest = sha512.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)); } } diff --git a/src/main/java/fr/xephi/authme/security/crypts/SMF.java b/src/main/java/fr/xephi/authme/security/crypts/SMF.java index 6941b79d..9fc2b8f9 100644 --- a/src/main/java/fr/xephi/authme/security/crypts/SMF.java +++ b/src/main/java/fr/xephi/authme/security/crypts/SMF.java @@ -6,23 +6,25 @@ import java.security.NoSuchAlgorithmException; public class SMF implements EncryptionMethod { - @Override - public String getHash(String password, String salt, String name) - throws NoSuchAlgorithmException { - return getSHA1(name.toLowerCase() + password); - } + @Override + public String getHash(String password, String salt, String name) + throws NoSuchAlgorithmException { + return getSHA1(name.toLowerCase() + password); + } - @Override - public boolean comparePassword(String hash, String password, - String playerName) throws NoSuchAlgorithmException { - return hash.equals(getHash(password, null, playerName)); - } + @Override + public boolean comparePassword(String hash, String password, + String playerName) throws NoSuchAlgorithmException { + return hash.equals(getHash(password, null, playerName)); + } - private static String getSHA1(String message) throws NoSuchAlgorithmException { + private static String getSHA1(String message) + throws NoSuchAlgorithmException { MessageDigest sha1 = MessageDigest.getInstance("SHA1"); 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)); } } diff --git a/src/main/java/fr/xephi/authme/security/crypts/WBB3.java b/src/main/java/fr/xephi/authme/security/crypts/WBB3.java index 7969df0b..21a9d05a 100644 --- a/src/main/java/fr/xephi/authme/security/crypts/WBB3.java +++ b/src/main/java/fr/xephi/authme/security/crypts/WBB3.java @@ -6,27 +6,29 @@ import java.security.NoSuchAlgorithmException; import fr.xephi.authme.AuthMe; - public class WBB3 implements EncryptionMethod { - @Override - public String getHash(String password, String salt, String name) - throws NoSuchAlgorithmException { - return getSHA1(salt.concat(getSHA1(salt.concat(getSHA1(password))))); - } + @Override + public String getHash(String password, String salt, String name) + throws NoSuchAlgorithmException { + return getSHA1(salt.concat(getSHA1(salt.concat(getSHA1(password))))); + } - @Override - public boolean comparePassword(String hash, String password, - String playerName) throws NoSuchAlgorithmException { - String salt = AuthMe.getInstance().database.getAuth(playerName).getSalt(); - return hash.equals(getHash(password, salt, "")); - } + @Override + public boolean comparePassword(String hash, String password, + String playerName) throws NoSuchAlgorithmException { + String salt = AuthMe.getInstance().database.getAuth(playerName) + .getSalt(); + return hash.equals(getHash(password, salt, "")); + } - private static String getSHA1(String message) throws NoSuchAlgorithmException { + private static String getSHA1(String message) + throws NoSuchAlgorithmException { MessageDigest sha1 = MessageDigest.getInstance("SHA1"); 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)); } } diff --git a/src/main/java/fr/xephi/authme/security/crypts/WBB4.java b/src/main/java/fr/xephi/authme/security/crypts/WBB4.java index 895e52f4..76a0651f 100644 --- a/src/main/java/fr/xephi/authme/security/crypts/WBB4.java +++ b/src/main/java/fr/xephi/authme/security/crypts/WBB4.java @@ -4,16 +4,16 @@ import java.security.NoSuchAlgorithmException; public class WBB4 implements EncryptionMethod { - @Override - public String getHash(String password, String salt, String name) - throws NoSuchAlgorithmException { - return BCRYPT.getDoubleHash(password, salt); - } + @Override + public String getHash(String password, String salt, String name) + throws NoSuchAlgorithmException { + return BCRYPT.getDoubleHash(password, salt); + } - @Override - public boolean comparePassword(String hash, String password, - String playerName) throws NoSuchAlgorithmException { - return BCRYPT.checkpw(password, hash, 2); - } + @Override + public boolean comparePassword(String hash, String password, + String playerName) throws NoSuchAlgorithmException { + return BCRYPT.checkpw(password, hash, 2); + } } diff --git a/src/main/java/fr/xephi/authme/security/crypts/WHIRLPOOL.java b/src/main/java/fr/xephi/authme/security/crypts/WHIRLPOOL.java index 8a58498f..909df309 100644 --- a/src/main/java/fr/xephi/authme/security/crypts/WHIRLPOOL.java +++ b/src/main/java/fr/xephi/authme/security/crypts/WHIRLPOOL.java @@ -7,53 +7,57 @@ package fr.xephi.authme.security.crypts; * References * *

- * The Whirlpool algorithm was developed by - * Paulo S. L. M. Barreto and - * Vincent Rijmen. + * The Whirlpool algorithm was developed by Paulo S. L. M. Barreto and Vincent Rijmen. * - * See - * P.S.L.M. Barreto, V. Rijmen, - * ``The Whirlpool hashing function,'' - * First NESSIE workshop, 2000 (tweaked version, 2003), - * + * See P.S.L.M. Barreto, V. Rijmen, ``The Whirlpool hashing function,'' First + * NESSIE workshop, 2000 (tweaked version, 2003), + * * - * @author Paulo S.L.M. Barreto - * @author Vincent Rijmen. + * @author Paulo S.L.M. Barreto + * @author Vincent Rijmen. * * @version 3.0 (2003.03.12) * - * ============================================================================= + * ==================================================================== + * ========= * - * Differences from version 2.1: + * Differences from version 2.1: * - * - Suboptimal diffusion matrix replaced by cir(1, 1, 4, 1, 8, 5, 2, 9). + * - Suboptimal diffusion matrix replaced by cir(1, 1, 4, 1, 8, 5, 2, + * 9). * - * ============================================================================= + * ==================================================================== + * ========= * - * Differences from version 2.0: + * Differences from version 2.0: * - * - Generation of ISO/IEC 10118-3 test vectors. - * - Bug fix: nonzero carry was ignored when tallying the data length - * (this bug apparently only manifested itself when feeding data - * in pieces rather than in a single chunk at once). + * - Generation of ISO/IEC 10118-3 test vectors. - Bug fix: nonzero + * carry was ignored when tallying the data length (this bug apparently + * only manifested itself when feeding data in pieces rather than in a + * single chunk at once). * - * Differences from version 1.0: + * Differences from version 1.0: * - * - Original S-box replaced by the tweaked, hardware-efficient version. + * - Original S-box replaced by the tweaked, hardware-efficient + * version. * - * ============================================================================= + * ==================================================================== + * ========= * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ @@ -80,30 +84,29 @@ public class WHIRLPOOL implements EncryptionMethod { /** * The substitution box. */ - private static final String sbox = - "\u1823\uc6E8\u87B8\u014F\u36A6\ud2F5\u796F\u9152" + - "\u60Bc\u9B8E\uA30c\u7B35\u1dE0\ud7c2\u2E4B\uFE57" + - "\u1577\u37E5\u9FF0\u4AdA\u58c9\u290A\uB1A0\u6B85" + - "\uBd5d\u10F4\ucB3E\u0567\uE427\u418B\uA77d\u95d8" + - "\uFBEE\u7c66\udd17\u479E\ucA2d\uBF07\uAd5A\u8333" + - "\u6302\uAA71\uc819\u49d9\uF2E3\u5B88\u9A26\u32B0" + - "\uE90F\ud580\uBEcd\u3448\uFF7A\u905F\u2068\u1AAE" + - "\uB454\u9322\u64F1\u7312\u4008\uc3Ec\udBA1\u8d3d" + - "\u9700\ucF2B\u7682\ud61B\uB5AF\u6A50\u45F3\u30EF" + - "\u3F55\uA2EA\u65BA\u2Fc0\udE1c\uFd4d\u9275\u068A" + - "\uB2E6\u0E1F\u62d4\uA896\uF9c5\u2559\u8472\u394c" + - "\u5E78\u388c\ud1A5\uE261\uB321\u9c1E\u43c7\uFc04" + - "\u5199\u6d0d\uFAdF\u7E24\u3BAB\ucE11\u8F4E\uB7EB" + - "\u3c81\u94F7\uB913\u2cd3\uE76E\uc403\u5644\u7FA9" + - "\u2ABB\uc153\udc0B\u9d6c\u3174\uF646\uAc89\u14E1" + - "\u163A\u6909\u70B6\ud0Ed\ucc42\u98A4\u285c\uF886"; + private static final String sbox = "\u1823\uc6E8\u87B8\u014F\u36A6\ud2F5\u796F\u9152" + + "\u60Bc\u9B8E\uA30c\u7B35\u1dE0\ud7c2\u2E4B\uFE57" + + "\u1577\u37E5\u9FF0\u4AdA\u58c9\u290A\uB1A0\u6B85" + + "\uBd5d\u10F4\ucB3E\u0567\uE427\u418B\uA77d\u95d8" + + "\uFBEE\u7c66\udd17\u479E\ucA2d\uBF07\uAd5A\u8333" + + "\u6302\uAA71\uc819\u49d9\uF2E3\u5B88\u9A26\u32B0" + + "\uE90F\ud580\uBEcd\u3448\uFF7A\u905F\u2068\u1AAE" + + "\uB454\u9322\u64F1\u7312\u4008\uc3Ec\udBA1\u8d3d" + + "\u9700\ucF2B\u7682\ud61B\uB5AF\u6A50\u45F3\u30EF" + + "\u3F55\uA2EA\u65BA\u2Fc0\udE1c\uFd4d\u9275\u068A" + + "\uB2E6\u0E1F\u62d4\uA896\uF9c5\u2559\u8472\u394c" + + "\u5E78\u388c\ud1A5\uE261\uB321\u9c1E\u43c7\uFc04" + + "\u5199\u6d0d\uFAdF\u7E24\u3BAB\ucE11\u8F4E\uB7EB" + + "\u3c81\u94F7\uB913\u2cd3\uE76E\uc403\u5644\u7FA9" + + "\u2ABB\uc153\udc0B\u9d6c\u3174\uF646\uAc89\u14E1" + + "\u163A\u6909\u70B6\ud0Ed\ucc42\u98A4\u285c\uF886"; private static long[][] C = new long[8][256]; - private static long[] rc = new long[R + 1]; + private static long[] rc = new long[R + 1]; static { for (int x = 0; x < 256; x++) { - char c = sbox.charAt(x/2); + char c = sbox.charAt(x / 2); long v1 = ((x & 1) == 0) ? c >>> 8 : c & 0xff; long v2 = v1 << 1; if (v2 >= 0x100L) { @@ -120,11 +123,11 @@ public class WHIRLPOOL implements EncryptionMethod { } long v9 = v8 ^ v1; /* - * build the circulant table C[0][x] = S[x].[1, 1, 4, 1, 8, 5, 2, 9]: + * build the circulant table C[0][x] = S[x].[1, 1, 4, 1, 8, 5, 2, + * 9]: */ - C[0][x] = - (v1 << 56) | (v1 << 48) | (v4 << 40) | (v1 << 32) | - (v8 << 24) | (v5 << 16) | (v2 << 8) | (v9 ); + C[0][x] = (v1 << 56) | (v1 << 48) | (v4 << 40) | (v1 << 32) + | (v8 << 24) | (v5 << 16) | (v2 << 8) | (v9); /* * build the remaining circulant tables C[t][x] = C[0][x] rotr t */ @@ -135,18 +138,20 @@ public class WHIRLPOOL implements EncryptionMethod { /* * build the round constants: */ - rc[0] = 0L; /* not used (assigment kept only to properly initialize all variables) */ + rc[0] = 0L; /* + * not used (assigment kept only to properly initialize all + * variables) + */ for (int r = 1; r <= R; r++) { - int i = 8*(r - 1); - rc[r] = - (C[0][i ] & 0xff00000000000000L) ^ - (C[1][i + 1] & 0x00ff000000000000L) ^ - (C[2][i + 2] & 0x0000ff0000000000L) ^ - (C[3][i + 3] & 0x000000ff00000000L) ^ - (C[4][i + 4] & 0x00000000ff000000L) ^ - (C[5][i + 5] & 0x0000000000ff0000L) ^ - (C[6][i + 6] & 0x000000000000ff00L) ^ - (C[7][i + 7] & 0x00000000000000ffL); + int i = 8 * (r - 1); + rc[r] = (C[0][i] & 0xff00000000000000L) + ^ (C[1][i + 1] & 0x00ff000000000000L) + ^ (C[2][i + 2] & 0x0000ff0000000000L) + ^ (C[3][i + 3] & 0x000000ff00000000L) + ^ (C[4][i + 4] & 0x00000000ff000000L) + ^ (C[5][i + 5] & 0x0000000000ff0000L) + ^ (C[6][i + 6] & 0x000000000000ff00L) + ^ (C[7][i + 7] & 0x00000000000000ffL); } } @@ -173,9 +178,9 @@ public class WHIRLPOOL implements EncryptionMethod { /** * The hashing state. */ - protected long[] hash = new long[8]; - protected long[] K = new long[8]; - protected long[] L = new long[8]; + protected long[] hash = new long[8]; + protected long[] K = new long[8]; + protected long[] L = new long[8]; protected long[] block = new long[8]; protected long[] state = new long[8]; @@ -190,15 +195,14 @@ public class WHIRLPOOL implements EncryptionMethod { * map the buffer to a block: */ for (int i = 0, j = 0; i < 8; i++, j += 8) { - block[i] = - (((long)buffer[j ] ) << 56) ^ - (((long)buffer[j + 1] & 0xffL) << 48) ^ - (((long)buffer[j + 2] & 0xffL) << 40) ^ - (((long)buffer[j + 3] & 0xffL) << 32) ^ - (((long)buffer[j + 4] & 0xffL) << 24) ^ - (((long)buffer[j + 5] & 0xffL) << 16) ^ - (((long)buffer[j + 6] & 0xffL) << 8) ^ - (((long)buffer[j + 7] & 0xffL) ); + block[i] = (((long) buffer[j]) << 56) + ^ (((long) buffer[j + 1] & 0xffL) << 48) + ^ (((long) buffer[j + 2] & 0xffL) << 40) + ^ (((long) buffer[j + 3] & 0xffL) << 32) + ^ (((long) buffer[j + 4] & 0xffL) << 24) + ^ (((long) buffer[j + 5] & 0xffL) << 16) + ^ (((long) buffer[j + 6] & 0xffL) << 8) + ^ (((long) buffer[j + 7] & 0xffL)); } /* * compute and apply K^0 to the cipher state: @@ -216,7 +220,7 @@ public class WHIRLPOOL implements EncryptionMethod { for (int i = 0; i < 8; i++) { L[i] = 0L; for (int t = 0, s = 56; t < 8; t++, s -= 8) { - L[i] ^= C[t][(int)(K[(i - t) & 7] >>> s) & 0xff]; + L[i] ^= C[t][(int) (K[(i - t) & 7] >>> s) & 0xff]; } } for (int i = 0; i < 8; i++) { @@ -229,7 +233,7 @@ public class WHIRLPOOL implements EncryptionMethod { for (int i = 0; i < 8; i++) { L[i] = K[i]; for (int t = 0, s = 56; t < 8; t++, s -= 8) { - L[i] ^= C[t][(int)(state[(i - t) & 7] >>> s) & 0xff]; + L[i] ^= C[t][(int) (state[(i - t) & 7] >>> s) & 0xff]; } } for (int i = 0; i < 8; i++) { @@ -248,7 +252,7 @@ public class WHIRLPOOL implements EncryptionMethod { * Initialize the hashing state. */ public void NESSIEinit() { - Arrays.fill(bitLength, (byte)0); + Arrays.fill(bitLength, (byte) 0); bufferBits = bufferPos = 0; buffer[0] = 0; Arrays.fill(hash, 0L); @@ -257,41 +261,41 @@ public class WHIRLPOOL implements EncryptionMethod { /** * Delivers input data to the hashing algorithm. * - * @param source plaintext data to hash. - * @param sourceBits how many bits of plaintext to process. + * @param source + * plaintext data to hash. + * @param sourceBits + * how many bits of plaintext to process. * - * This method maintains the invariant: bufferBits < 512 + * This method maintains the invariant: bufferBits < 512 */ public void NESSIEadd(byte[] source, long sourceBits) { /* - sourcePos - | - +-------+-------+------- - ||||||||||||||||||||| source - +-------+-------+------- - +-------+-------+-------+-------+-------+------- - |||||||||||||||||||||| buffer - +-------+-------+-------+-------+-------+------- - | - bufferPos - */ - int sourcePos = 0; // index of leftmost source byte containing data (1 to 8 bits). - int sourceGap = (8 - ((int)sourceBits & 7)) & 7; // space on source[sourcePos]. + * sourcePos | +-------+-------+------- ||||||||||||||||||||| source + * +-------+-------+------- + * +-------+-------+-------+-------+-------+------- + * |||||||||||||||||||||| buffer + * +-------+-------+-------+-------+-------+------- | bufferPos + */ + int sourcePos = 0; // index of leftmost source byte containing data (1 + // to 8 bits). + int sourceGap = (8 - ((int) sourceBits & 7)) & 7; // space on + // source[sourcePos]. int bufferRem = bufferBits & 7; // occupied bits on buffer[bufferPos]. int b; // tally the length of the added data: long value = sourceBits; for (int i = 31, carry = 0; i >= 0; i--) { - carry += (bitLength[i] & 0xff) + ((int)value & 0xff); - bitLength[i] = (byte)carry; + carry += (bitLength[i] & 0xff) + ((int) value & 0xff); + bitLength[i] = (byte) carry; carry >>>= 8; value >>>= 8; } // process data in chunks of 8 bits: - while (sourceBits > 8) { // at least source[sourcePos] and source[sourcePos+1] contain data. + while (sourceBits > 8) { // at least source[sourcePos] and + // source[sourcePos+1] contain data. // take a byte from the source: - b = ((source[sourcePos] << sourceGap) & 0xff) | - ((source[sourcePos + 1] & 0xff) >>> (8 - sourceGap)); + b = ((source[sourcePos] << sourceGap) & 0xff) + | ((source[sourcePos + 1] & 0xff) >>> (8 - sourceGap)); if (b < 0 || b >= 256) { throw new RuntimeException("LOGIC ERROR"); } @@ -304,7 +308,7 @@ public class WHIRLPOOL implements EncryptionMethod { // reset buffer: bufferBits = bufferPos = 0; } - buffer[bufferPos] = (byte)((b << (8 - bufferRem)) & 0xff); + buffer[bufferPos] = (byte) ((b << (8 - bufferRem)) & 0xff); bufferBits += bufferRem; // proceed to remaining data: sourceBits -= 8; @@ -313,29 +317,32 @@ public class WHIRLPOOL implements EncryptionMethod { // now 0 <= sourceBits <= 8; // furthermore, all data (if any is left) is in source[sourcePos]. if (sourceBits > 0) { - b = (source[sourcePos] << sourceGap) & 0xff; // bits are left-justified on b. + b = (source[sourcePos] << sourceGap) & 0xff; // bits are + // left-justified on b. // process the remaining bits: buffer[bufferPos] |= b >>> bufferRem; } else { b = 0; } if (bufferRem + sourceBits < 8) { - // all remaining data fits on buffer[bufferPos], and there still remains some space. + // all remaining data fits on buffer[bufferPos], and there still + // remains some space. bufferBits += sourceBits; } else { // buffer[bufferPos] is full: bufferPos++; bufferBits += 8 - bufferRem; // bufferBits = 8*bufferPos; sourceBits -= 8 - bufferRem; - // now 0 <= sourceBits < 8; furthermore, all data is in source[sourcePos]. + // now 0 <= sourceBits < 8; furthermore, all data is in + // source[sourcePos]. if (bufferBits == 512) { // process data block: processBuffer(); // reset buffer: bufferBits = bufferPos = 0; } - buffer[bufferPos] = (byte)((b << (8 - bufferRem)) & 0xff); - bufferBits += (int)sourceBits; + buffer[bufferPos] = (byte) ((b << (8 - bufferRem)) & 0xff); + bufferBits += (int) sourceBits; } } @@ -368,58 +375,59 @@ public class WHIRLPOOL implements EncryptionMethod { // return the completed message digest: for (int i = 0, j = 0; i < 8; i++, j += 8) { long h = hash[i]; - digest[j ] = (byte)(h >>> 56); - digest[j + 1] = (byte)(h >>> 48); - digest[j + 2] = (byte)(h >>> 40); - digest[j + 3] = (byte)(h >>> 32); - digest[j + 4] = (byte)(h >>> 24); - digest[j + 5] = (byte)(h >>> 16); - digest[j + 6] = (byte)(h >>> 8); - digest[j + 7] = (byte)(h ); + digest[j] = (byte) (h >>> 56); + digest[j + 1] = (byte) (h >>> 48); + digest[j + 2] = (byte) (h >>> 40); + digest[j + 3] = (byte) (h >>> 32); + digest[j + 4] = (byte) (h >>> 24); + digest[j + 5] = (byte) (h >>> 16); + digest[j + 6] = (byte) (h >>> 8); + digest[j + 7] = (byte) (h); } } /** * Delivers string input data to the hashing algorithm. * - * @param source plaintext data to hash (ASCII text string). + * @param source + * plaintext data to hash (ASCII text string). * - * This method maintains the invariant: bufferBits < 512 + * This method maintains the invariant: bufferBits < 512 */ public void NESSIEadd(String source) { if (source.length() > 0) { byte[] data = new byte[source.length()]; for (int i = 0; i < source.length(); i++) { - data[i] = (byte)source.charAt(i); + data[i] = (byte) source.charAt(i); } - NESSIEadd(data, 8*data.length); + NESSIEadd(data, 8 * data.length); } } protected static String display(byte[] array) { - char[] val = new char[2*array.length]; + char[] val = new char[2 * array.length]; String hex = "0123456789ABCDEF"; for (int i = 0; i < array.length; i++) { int b = array[i] & 0xff; - val[2*i] = hex.charAt(b >>> 4); - val[2*i + 1] = hex.charAt(b & 15); + val[2 * i] = hex.charAt(b >>> 4); + val[2 * i + 1] = hex.charAt(b & 15); } return String.valueOf(val); } - @Override - public String getHash(String password, String salt, String name) - throws NoSuchAlgorithmException { + @Override + public String getHash(String password, String salt, String name) + throws NoSuchAlgorithmException { byte[] digest = new byte[DIGESTBYTES]; NESSIEinit(); NESSIEadd(password); NESSIEfinalize(digest); return display(digest); - } + } - @Override - public boolean comparePassword(String hash, String password, - String playerName) throws NoSuchAlgorithmException { - return hash.equals(getHash(password, "", "")); - } + @Override + public boolean comparePassword(String hash, String password, + String playerName) throws NoSuchAlgorithmException { + return hash.equals(getHash(password, "", "")); + } } diff --git a/src/main/java/fr/xephi/authme/security/crypts/WORDPRESS.java b/src/main/java/fr/xephi/authme/security/crypts/WORDPRESS.java index 3a525c8b..ddf150e6 100644 --- a/src/main/java/fr/xephi/authme/security/crypts/WORDPRESS.java +++ b/src/main/java/fr/xephi/authme/security/crypts/WORDPRESS.java @@ -47,7 +47,8 @@ public class WORDPRESS implements EncryptionMethod { private String crypt(String password, String setting) { String output = "*0"; - if (((setting.length() < 2) ? setting : setting.substring(0, 2)).equalsIgnoreCase(output)) { + if (((setting.length() < 2) ? setting : setting.substring(0, 2)) + .equalsIgnoreCase(output)) { output = "*1"; } String id = (setting.length() < 3) ? setting : setting.substring(0, 3); @@ -94,22 +95,24 @@ public class WORDPRESS implements EncryptionMethod { try { return string.getBytes("UTF-8"); } catch (UnsupportedEncodingException e) { - throw new UnsupportedOperationException("This system doesn't support UTF-8!", e); + throw new UnsupportedOperationException( + "This system doesn't support UTF-8!", e); } } @Override - public String getHash(String password, String salt, String name) throws NoSuchAlgorithmException { + public String getHash(String password, String salt, String name) + throws NoSuchAlgorithmException { byte random[] = new byte[6]; this.randomGen.nextBytes(random); return crypt(password, gensaltPrivate(stringToUtf8(new String(random)))); } - @Override - public boolean comparePassword(String hash, String password, - String playerName) throws NoSuchAlgorithmException { - String comparedHash = crypt(password, hash); - return comparedHash.equals(hash); - } + @Override + public boolean comparePassword(String hash, String password, + String playerName) throws NoSuchAlgorithmException { + String comparedHash = crypt(password, hash); + return comparedHash.equals(hash); + } } diff --git a/src/main/java/fr/xephi/authme/security/crypts/XAUTH.java b/src/main/java/fr/xephi/authme/security/crypts/XAUTH.java index 2e4e7ba0..b3127619 100644 --- a/src/main/java/fr/xephi/authme/security/crypts/XAUTH.java +++ b/src/main/java/fr/xephi/authme/security/crypts/XAUTH.java @@ -4,29 +4,31 @@ import java.security.NoSuchAlgorithmException; public class XAUTH implements EncryptionMethod { - @Override - public String getHash(String password, String salt, String name) - throws NoSuchAlgorithmException { + @Override + public String getHash(String password, String salt, String name) + throws NoSuchAlgorithmException { String hash = getWhirlpool(salt + password).toLowerCase(); - int saltPos = (password.length() >= hash.length() ? hash.length() - 1 : password.length()); + int saltPos = (password.length() >= hash.length() ? hash.length() - 1 + : password.length()); return hash.substring(0, saltPos) + salt + hash.substring(saltPos); - } + } - @Override - public boolean comparePassword(String hash, String password, - String playerName) throws NoSuchAlgorithmException { - int saltPos = (password.length() >= hash.length() ? hash.length() - 1 : password.length()); + @Override + public boolean comparePassword(String hash, String password, + String playerName) throws NoSuchAlgorithmException { + int saltPos = (password.length() >= hash.length() ? hash.length() - 1 + : password.length()); String salt = hash.substring(saltPos, saltPos + 12); return hash.equals(getHash(password, salt, "")); - } + } - public static String getWhirlpool(String message) { + public static String getWhirlpool(String message) { WHIRLPOOL w = new WHIRLPOOL(); byte[] digest = new byte[WHIRLPOOL.DIGESTBYTES]; w.NESSIEinit(); w.NESSIEadd(message); w.NESSIEfinalize(digest); return WHIRLPOOL.display(digest); - } + } } diff --git a/src/main/java/fr/xephi/authme/security/crypts/XF.java b/src/main/java/fr/xephi/authme/security/crypts/XF.java index 9d954a36..27e024e4 100644 --- a/src/main/java/fr/xephi/authme/security/crypts/XF.java +++ b/src/main/java/fr/xephi/authme/security/crypts/XF.java @@ -9,51 +9,48 @@ import java.util.regex.Pattern; import fr.xephi.authme.AuthMe; - public class XF implements EncryptionMethod { - @Override - public String getHash(String password, String salt, String name) - throws NoSuchAlgorithmException { - return getSHA256(getSHA256(password) + regmatch("\"salt\";.:..:\"(.*)\";.:.:\"hashFunc\"", salt)); - } + @Override + public String getHash(String password, String salt, String name) + throws NoSuchAlgorithmException { + return getSHA256(getSHA256(password) + + regmatch("\"salt\";.:..:\"(.*)\";.:.:\"hashFunc\"", salt)); + } - @Override - public boolean comparePassword(String hash, String password, - String playerName) throws NoSuchAlgorithmException { - String salt = AuthMe.getInstance().database.getAuth(playerName).getSalt(); - return hash.equals(regmatch("\"hash\";.:..:\"(.*)\";.:.:\"salt\"", salt)); - } + @Override + public boolean comparePassword(String hash, String password, + String playerName) throws NoSuchAlgorithmException { + String salt = AuthMe.getInstance().database.getAuth(playerName) + .getSalt(); + return hash + .equals(regmatch("\"hash\";.:..:\"(.*)\";.:.:\"salt\"", salt)); + } - public String getSHA256(String password) throws NoSuchAlgorithmException - { + public String getSHA256(String password) throws NoSuchAlgorithmException { MessageDigest md = MessageDigest.getInstance("SHA-256"); md.update(password.getBytes()); byte byteData[] = md.digest(); StringBuffer sb = new StringBuffer(); - for (byte element : byteData) - { - sb.append(Integer.toString((element & 0xff) + 0x100, 16).substring(1)); + for (byte element : byteData) { + sb.append(Integer.toString((element & 0xff) + 0x100, 16).substring( + 1)); } StringBuffer hexString = new StringBuffer(); - for (byte element : byteData) - { + for (byte element : byteData) { String hex = Integer.toHexString(0xff & element); - if (hex.length() == 1) - { + if (hex.length() == 1) { hexString.append('0'); } hexString.append(hex); } return hexString.toString(); } - - public String regmatch(String pattern, String line) - { + + public String regmatch(String pattern, String line) { List allMatches = new ArrayList(); Matcher m = Pattern.compile(pattern).matcher(line); - while (m.find()) - { + while (m.find()) { allMatches.add(m.group(1)); } return allMatches.get(0); diff --git a/src/main/java/fr/xephi/authme/security/pbkdf2/BinTools.java b/src/main/java/fr/xephi/authme/security/pbkdf2/BinTools.java index 43eed16c..d5055879 100644 --- a/src/main/java/fr/xephi/authme/security/pbkdf2/BinTools.java +++ b/src/main/java/fr/xephi/authme/security/pbkdf2/BinTools.java @@ -23,14 +23,14 @@ package fr.xephi.authme.security.pbkdf2; *

*

* For Details, see http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. + * href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html" + * >http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. *

* * @author Matthias Gärtner * @version 1.0 */ -public class BinTools -{ +public class BinTools { public static final String hex = "0123456789ABCDEF"; /** @@ -41,15 +41,12 @@ public class BinTools * @return Hexadecimal representation of b. Uppercase A-F, two characters * per byte. Empty string on null input. */ - public static String bin2hex(final byte[] b) - { - if (b == null) - { + public static String bin2hex(final byte[] b) { + if (b == null) { return ""; } StringBuffer sb = new StringBuffer(2 * b.length); - for (int i = 0; i < b.length; i++) - { + for (int i = 0; i < b.length; i++) { int v = (256 + b[i]) % 256; sb.append(hex.charAt((v / 16) & 15)); sb.append(hex.charAt((v % 16) & 15)); @@ -61,28 +58,23 @@ public class BinTools * Convert hex string to array of bytes. * * @param s - * String containing hexadecimal digits. May be null. - * On odd length leading zero will be assumed. + * String containing hexadecimal digits. May be null + * . On odd length leading zero will be assumed. * @return Array on bytes, non-null. * @throws IllegalArgumentException * when string contains non-hex character */ - public static byte[] hex2bin(final String s) - { + public static byte[] hex2bin(final String s) { String m = s; - if (s == null) - { + if (s == null) { // Allow empty input string. m = ""; - } - else if (s.length() % 2 != 0) - { + } else if (s.length() % 2 != 0) { // Assume leading zero for odd string length m = "0" + s; } byte r[] = new byte[m.length() / 2]; - for (int i = 0, n = 0; i < m.length(); n++) - { + for (int i = 0, n = 0; i < m.length(); n++) { char h = m.charAt(i++); char l = m.charAt(i++); r[n] = (byte) (hex2bin(h) * 16 + hex2bin(l)); @@ -99,18 +91,14 @@ public class BinTools * @throws IllegalArgumentException * on non-hex character */ - public static int hex2bin(char c) - { - if (c >= '0' && c <= '9') - { + public static int hex2bin(char c) { + if (c >= '0' && c <= '9') { return (c - '0'); } - if (c >= 'A' && c <= 'F') - { + if (c >= 'A' && c <= 'F') { return (c - 'A' + 10); } - if (c >= 'a' && c <= 'f') - { + if (c >= 'a' && c <= 'f') { return (c - 'a' + 10); } throw new IllegalArgumentException( @@ -118,19 +106,16 @@ public class BinTools + "'"); } - public static void main(String[] args) - { + public static void main(String[] args) { byte b[] = new byte[256]; byte bb = 0; - for (int i = 0; i < 256; i++) - { + for (int i = 0; i < 256; i++) { b[i] = bb++; } String s = bin2hex(b); byte c[] = hex2bin(s); String t = bin2hex(c); - if (!s.equals(t)) - { + if (!s.equals(t)) { throw new AssertionError("Mismatch"); } } diff --git a/src/main/java/fr/xephi/authme/security/pbkdf2/MacBasedPRF.java b/src/main/java/fr/xephi/authme/security/pbkdf2/MacBasedPRF.java index 7a7f9b7a..7582926c 100644 --- a/src/main/java/fr/xephi/authme/security/pbkdf2/MacBasedPRF.java +++ b/src/main/java/fr/xephi/authme/security/pbkdf2/MacBasedPRF.java @@ -34,14 +34,14 @@ import javax.crypto.spec.SecretKeySpec; *

*

* For Details, see http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. + * href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html" + * >http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. *

* * @author Matthias Gärtner * @version 1.0 */ -public class MacBasedPRF implements PRF -{ +public class MacBasedPRF implements PRF { protected Mac mac; protected int hLen; @@ -54,57 +54,41 @@ public class MacBasedPRF implements PRF * @param macAlgorithm * Mac algorithm to use, i.e. HMacSHA1 or HMacMD5. */ - public MacBasedPRF(String macAlgorithm) - { + public MacBasedPRF(String macAlgorithm) { this.macAlgorithm = macAlgorithm; - try - { + try { mac = Mac.getInstance(macAlgorithm); hLen = mac.getMacLength(); - } - catch (NoSuchAlgorithmException e) - { + } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } } - public MacBasedPRF(String macAlgorithm, String provider) - { + public MacBasedPRF(String macAlgorithm, String provider) { this.macAlgorithm = macAlgorithm; - try - { + try { mac = Mac.getInstance(macAlgorithm, provider); hLen = mac.getMacLength(); - } - catch (NoSuchAlgorithmException e) - { + } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); - } - catch (NoSuchProviderException e) - { + } catch (NoSuchProviderException e) { throw new RuntimeException(e); } } - public byte[] doFinal(byte[] M) - { + public byte[] doFinal(byte[] M) { byte[] r = mac.doFinal(M); return r; } - public int getHLen() - { + public int getHLen() { return hLen; } - public void init(byte[] P) - { - try - { + public void init(byte[] P) { + try { mac.init(new SecretKeySpec(P, macAlgorithm)); - } - catch (InvalidKeyException e) - { + } catch (InvalidKeyException e) { throw new RuntimeException(e); } } diff --git a/src/main/java/fr/xephi/authme/security/pbkdf2/PBKDF2.java b/src/main/java/fr/xephi/authme/security/pbkdf2/PBKDF2.java index 5feadd13..eb5bd8c9 100644 --- a/src/main/java/fr/xephi/authme/security/pbkdf2/PBKDF2.java +++ b/src/main/java/fr/xephi/authme/security/pbkdf2/PBKDF2.java @@ -24,14 +24,14 @@ package fr.xephi.authme.security.pbkdf2; *

*

* For Details, see http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. + * href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html" + * >http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. *

* * @author Matthias Gärtner * @version 1.0 */ -public interface PBKDF2 -{ +public interface PBKDF2 { /** * Convert String-based input to internal byte array, then invoke PBKDF2. * Desired key length defaults to Pseudo Random Function block size. @@ -60,8 +60,8 @@ public interface PBKDF2 * * @param inputPassword * Candidate password to compute the derived key for. - * @return true password match; false - * incorrect password + * @return true password match; false incorrect + * password */ public abstract boolean verifyKey(String inputPassword); diff --git a/src/main/java/fr/xephi/authme/security/pbkdf2/PBKDF2Engine.java b/src/main/java/fr/xephi/authme/security/pbkdf2/PBKDF2Engine.java index 07da6d18..79a7fee4 100644 --- a/src/main/java/fr/xephi/authme/security/pbkdf2/PBKDF2Engine.java +++ b/src/main/java/fr/xephi/authme/security/pbkdf2/PBKDF2Engine.java @@ -61,15 +61,15 @@ import java.security.SecureRandom; *

*

* For Details, see http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. + * href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html" + * >http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. *

* * @see RFC 2898 * @author Matthias Gärtner * @version 1.0 */ -public class PBKDF2Engine implements PBKDF2 -{ +public class PBKDF2Engine implements PBKDF2 { protected PBKDF2Parameters parameters; protected PRF prf; @@ -78,8 +78,7 @@ public class PBKDF2Engine implements PBKDF2 * Constructor for PBKDF2 implementation object. PBKDF2 parameters must be * passed later. */ - public PBKDF2Engine() - { + public PBKDF2Engine() { this.parameters = null; prf = null; } @@ -92,8 +91,7 @@ public class PBKDF2Engine implements PBKDF2 * @param parameters * Data holder for iteration count, method to use et cetera. */ - public PBKDF2Engine(PBKDF2Parameters parameters) - { + public PBKDF2Engine(PBKDF2Parameters parameters) { this.parameters = parameters; prf = null; } @@ -108,44 +106,33 @@ public class PBKDF2Engine implements PBKDF2 * @param prf * Supply customer Pseudo Random Function. */ - public PBKDF2Engine(PBKDF2Parameters parameters, PRF prf) - { + public PBKDF2Engine(PBKDF2Parameters parameters, PRF prf) { this.parameters = parameters; this.prf = prf; } - public byte[] deriveKey(String inputPassword) - { + public byte[] deriveKey(String inputPassword) { return deriveKey(inputPassword, 0); } - public byte[] deriveKey(String inputPassword, int dkLen) - { + public byte[] deriveKey(String inputPassword, int dkLen) { byte[] r = null; byte P[] = null; String charset = parameters.getHashCharset(); - if (inputPassword == null) - { + if (inputPassword == null) { inputPassword = ""; } - try - { - if (charset == null) - { + try { + if (charset == null) { P = inputPassword.getBytes(); - } - else - { + } else { P = inputPassword.getBytes(charset); } - } - catch (UnsupportedEncodingException e) - { + } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } assertPRF(P); - if (dkLen == 0) - { + if (dkLen == 0) { dkLen = prf.getHLen(); } r = PBKDF2(prf, parameters.getSalt(), parameters.getIterationCount(), @@ -153,23 +140,18 @@ public class PBKDF2Engine implements PBKDF2 return r; } - public boolean verifyKey(String inputPassword) - { + public boolean verifyKey(String inputPassword) { byte[] referenceKey = getParameters().getDerivedKey(); - if (referenceKey == null || referenceKey.length == 0) - { + if (referenceKey == null || referenceKey.length == 0) { return false; } byte[] inputKey = deriveKey(inputPassword, referenceKey.length); - if (inputKey == null || inputKey.length != referenceKey.length) - { + if (inputKey == null || inputKey.length != referenceKey.length) { return false; } - for (int i = 0; i < inputKey.length; i++) - { - if (inputKey[i] != referenceKey[i]) - { + for (int i = 0; i < inputKey.length; i++) { + if (inputKey[i] != referenceKey[i]) { return false; } } @@ -183,17 +165,14 @@ public class PBKDF2Engine implements PBKDF2 * @param P * User-supplied candidate password as array of bytes. */ - protected void assertPRF(byte[] P) - { - if (prf == null) - { + protected void assertPRF(byte[] P) { + if (prf == null) { prf = new MacBasedPRF(parameters.getHashAlgorithm()); } prf.init(P); } - public PRF getPseudoRandomFunction() - { + public PRF getPseudoRandomFunction() { return prf; } @@ -211,10 +190,8 @@ public class PBKDF2Engine implements PBKDF2 * desired length of derived key. * @return internal byte array */ - protected byte[] PBKDF2(PRF prf, byte[] S, int c, int dkLen) - { - if (S == null) - { + protected byte[] PBKDF2(PRF prf, byte[] S, int c, int dkLen) { + if (S == null) { S = new byte[0]; } int hLen = prf.getHLen(); @@ -222,13 +199,11 @@ public class PBKDF2Engine implements PBKDF2 int r = dkLen - (l - 1) * hLen; byte T[] = new byte[l * hLen]; int ti_offset = 0; - for (int i = 1; i <= l; i++) - { + for (int i = 1; i <= l; i++) { _F(T, ti_offset, prf, S, c, i); ti_offset += hLen; } - if (r < hLen) - { + if (r < hLen) { // Incomplete last block byte DK[] = new byte[dkLen]; System.arraycopy(T, 0, DK, 0, dkLen); @@ -240,16 +215,15 @@ public class PBKDF2Engine implements PBKDF2 /** * Integer division with ceiling function. * - * @see RFC 2898 5.2 Step 2. + * @see RFC 2898 5.2 Step + * 2. * @param a * @param b * @return ceil(a/b) */ - protected int ceil(int a, int b) - { + protected int ceil(int a, int b) { int m = 0; - if (a % b > 0) - { + if (a % b > 0) { m = 1; } return a / b + m; @@ -258,7 +232,8 @@ public class PBKDF2Engine implements PBKDF2 /** * Function F. * - * @see RFC 2898 5.2 Step 3. + * @see RFC 2898 5.2 Step + * 3. * @param dest * Destination byte buffer * @param offset @@ -272,8 +247,7 @@ public class PBKDF2Engine implements PBKDF2 * @param blockIndex */ protected void _F(byte[] dest, int offset, PRF prf, byte[] S, int c, - int blockIndex) - { + int blockIndex) { int hLen = prf.getHLen(); byte U_r[] = new byte[hLen]; @@ -282,8 +256,7 @@ public class PBKDF2Engine implements PBKDF2 System.arraycopy(S, 0, U_i, 0, S.length); INT(U_i, S.length, blockIndex); - for (int i = 0; i < c; i++) - { + for (int i = 0; i < c; i++) { U_i = prf.doFinal(U_i); xor(U_r, U_i); } @@ -297,10 +270,8 @@ public class PBKDF2Engine implements PBKDF2 * @param dest * @param src */ - protected void xor(byte[] dest, byte[] src) - { - for (int i = 0; i < dest.length; i++) - { + protected void xor(byte[] dest, byte[] src) { + for (int i = 0; i < dest.length; i++) { dest[i] ^= src[i]; } } @@ -308,31 +279,28 @@ public class PBKDF2Engine implements PBKDF2 /** * Four-octet encoding of the integer i, most significant octet first. * - * @see RFC 2898 5.2 Step 3. + * @see RFC 2898 5.2 Step + * 3. * @param dest * @param offset * @param i */ - protected void INT(byte[] dest, int offset, int i) - { + protected void INT(byte[] dest, int offset, int i) { dest[offset + 0] = (byte) (i / (256 * 256 * 256)); dest[offset + 1] = (byte) (i / (256 * 256)); dest[offset + 2] = (byte) (i / (256)); dest[offset + 3] = (byte) (i); } - public PBKDF2Parameters getParameters() - { + public PBKDF2Parameters getParameters() { return parameters; } - public void setParameters(PBKDF2Parameters parameters) - { + public void setParameters(PBKDF2Parameters parameters) { this.parameters = parameters; } - public void setPseudoRandomFunction(PRF prf) - { + public void setPseudoRandomFunction(PRF prf) { this.prf = prf; } @@ -352,22 +320,18 @@ public class PBKDF2Engine implements PBKDF2 * @throws NoSuchAlgorithmException */ public static void main(String[] args) throws IOException, - NoSuchAlgorithmException - { + NoSuchAlgorithmException { String password = "password"; String candidate = null; PBKDF2Formatter formatter = new PBKDF2HexFormatter(); - if (args.length >= 1) - { + if (args.length >= 1) { password = args[0]; } - if (args.length >= 2) - { + if (args.length >= 2) { candidate = args[1]; } - if (candidate == null) - { + if (candidate == null) { // Creation mode SecureRandom sr = SecureRandom.getInstance("SHA1PRNG"); byte[] salt = new byte[8]; @@ -379,15 +343,12 @@ public class PBKDF2Engine implements PBKDF2 p.setDerivedKey(e.deriveKey(password)); candidate = formatter.toString(p); System.out.println(candidate); - } - else - { + } else { // Verification mode PBKDF2Parameters p = new PBKDF2Parameters(); p.setHashAlgorithm("HmacSHA1"); p.setHashCharset("ISO-8859-1"); - if (formatter.fromString(p, candidate)) - { + if (formatter.fromString(p, candidate)) { throw new IllegalArgumentException( "Candidate data does not have correct format (\"" + candidate + "\")"); diff --git a/src/main/java/fr/xephi/authme/security/pbkdf2/PBKDF2Formatter.java b/src/main/java/fr/xephi/authme/security/pbkdf2/PBKDF2Formatter.java index bf0ff49a..401edf34 100644 --- a/src/main/java/fr/xephi/authme/security/pbkdf2/PBKDF2Formatter.java +++ b/src/main/java/fr/xephi/authme/security/pbkdf2/PBKDF2Formatter.java @@ -24,14 +24,14 @@ package fr.xephi.authme.security.pbkdf2; *

*

* For Details, see http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. + * href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html" + * >http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. *

* * @author Matthias Gärtner * @version 1.0 */ -public interface PBKDF2Formatter -{ +public interface PBKDF2Formatter { /** * Convert parameters to String. * diff --git a/src/main/java/fr/xephi/authme/security/pbkdf2/PBKDF2HexFormatter.java b/src/main/java/fr/xephi/authme/security/pbkdf2/PBKDF2HexFormatter.java index 1e12b5f9..92c0a291 100644 --- a/src/main/java/fr/xephi/authme/security/pbkdf2/PBKDF2HexFormatter.java +++ b/src/main/java/fr/xephi/authme/security/pbkdf2/PBKDF2HexFormatter.java @@ -24,24 +24,21 @@ package fr.xephi.authme.security.pbkdf2; *

*

* For Details, see http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. + * href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html" + * >http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. *

* * @author Matthias Gärtner * @version 1.0 */ -public class PBKDF2HexFormatter implements PBKDF2Formatter -{ - public boolean fromString(PBKDF2Parameters p, String s) - { - if (p == null || s == null) - { +public class PBKDF2HexFormatter implements PBKDF2Formatter { + public boolean fromString(PBKDF2Parameters p, String s) { + if (p == null || s == null) { return true; } String[] p123 = s.split(":"); - if (p123 == null || p123.length != 3) - { + if (p123 == null || p123.length != 3) { return true; } @@ -55,8 +52,7 @@ public class PBKDF2HexFormatter implements PBKDF2Formatter return false; } - public String toString(PBKDF2Parameters p) - { + public String toString(PBKDF2Parameters p) { String s = BinTools.bin2hex(p.getSalt()) + ":" + String.valueOf(p.getIterationCount()) + ":" + BinTools.bin2hex(p.getDerivedKey()); diff --git a/src/main/java/fr/xephi/authme/security/pbkdf2/PBKDF2Parameters.java b/src/main/java/fr/xephi/authme/security/pbkdf2/PBKDF2Parameters.java index 6eb41b0a..8b4286f7 100644 --- a/src/main/java/fr/xephi/authme/security/pbkdf2/PBKDF2Parameters.java +++ b/src/main/java/fr/xephi/authme/security/pbkdf2/PBKDF2Parameters.java @@ -29,14 +29,14 @@ package fr.xephi.authme.security.pbkdf2; *

*

* For Details, see http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. + * href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html" + * >http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. *

* * @author Matthias Gärtner * @version 1.0 */ -public class PBKDF2Parameters -{ +public class PBKDF2Parameters { protected byte[] salt; protected int iterationCount; @@ -56,8 +56,7 @@ public class PBKDF2Parameters * character set and 1000 for iteration count. * */ - public PBKDF2Parameters() - { + public PBKDF2Parameters() { this.hashAlgorithm = null; this.hashCharset = "UTF-8"; this.salt = null; @@ -73,14 +72,12 @@ public class PBKDF2Parameters * @param hashCharset * for example UTF-8 * @param salt - * Salt as byte array, may be null (not - * recommended) + * Salt as byte array, may be null (not recommended) * @param iterationCount * Number of iterations to execute. Recommended value 1000. */ public PBKDF2Parameters(String hashAlgorithm, String hashCharset, - byte[] salt, int iterationCount) - { + byte[] salt, int iterationCount) { this.hashAlgorithm = hashAlgorithm; this.hashCharset = hashCharset; this.salt = salt; @@ -96,16 +93,14 @@ public class PBKDF2Parameters * @param hashCharset * for example UTF-8 * @param salt - * Salt as byte array, may be null (not - * recommended) + * Salt as byte array, may be null (not recommended) * @param iterationCount * Number of iterations to execute. Recommended value 1000. * @param derivedKey * Convenience data holder, not used during computation. */ public PBKDF2Parameters(String hashAlgorithm, String hashCharset, - byte[] salt, int iterationCount, byte[] derivedKey) - { + byte[] salt, int iterationCount, byte[] derivedKey) { this.hashAlgorithm = hashAlgorithm; this.hashCharset = hashCharset; this.salt = salt; @@ -113,53 +108,43 @@ public class PBKDF2Parameters this.derivedKey = derivedKey; } - public int getIterationCount() - { + public int getIterationCount() { return iterationCount; } - public void setIterationCount(int iterationCount) - { + public void setIterationCount(int iterationCount) { this.iterationCount = iterationCount; } - public byte[] getSalt() - { + public byte[] getSalt() { return salt; } - public void setSalt(byte[] salt) - { + public void setSalt(byte[] salt) { this.salt = salt; } - public byte[] getDerivedKey() - { + public byte[] getDerivedKey() { return derivedKey; } - public void setDerivedKey(byte[] derivedKey) - { + public void setDerivedKey(byte[] derivedKey) { this.derivedKey = derivedKey; } - public String getHashAlgorithm() - { + public String getHashAlgorithm() { return hashAlgorithm; } - public void setHashAlgorithm(String hashAlgorithm) - { + public void setHashAlgorithm(String hashAlgorithm) { this.hashAlgorithm = hashAlgorithm; } - public String getHashCharset() - { + public String getHashCharset() { return hashCharset; } - public void setHashCharset(String hashCharset) - { + public void setHashCharset(String hashCharset) { this.hashCharset = hashCharset; } } diff --git a/src/main/java/fr/xephi/authme/security/pbkdf2/PRF.java b/src/main/java/fr/xephi/authme/security/pbkdf2/PRF.java index 00e1e39c..17955787 100644 --- a/src/main/java/fr/xephi/authme/security/pbkdf2/PRF.java +++ b/src/main/java/fr/xephi/authme/security/pbkdf2/PRF.java @@ -24,14 +24,14 @@ package fr.xephi.authme.security.pbkdf2; *

*

* For Details, see http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. + * href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html" + * >http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. *

* * @author Matthias Gärtner * @version 1.0 */ -public interface PRF -{ +public interface PRF { /** * Initialize this instance with the user-supplied password. * diff --git a/src/main/java/fr/xephi/authme/settings/CustomConfiguration.java b/src/main/java/fr/xephi/authme/settings/CustomConfiguration.java index 273f8961..84de2b2c 100644 --- a/src/main/java/fr/xephi/authme/settings/CustomConfiguration.java +++ b/src/main/java/fr/xephi/authme/settings/CustomConfiguration.java @@ -18,93 +18,90 @@ import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.plugin.java.JavaPlugin; -public class CustomConfiguration extends YamlConfiguration{ +public class CustomConfiguration extends YamlConfiguration { - private File configFile; + private File configFile; - public CustomConfiguration(File file) - { - this.configFile = file; + public CustomConfiguration(File file) { + this.configFile = file; - load(); - } + load(); + } - public void load() - { - try { - super.load(configFile); - } catch (FileNotFoundException e) { - Logger.getLogger(JavaPlugin.class.getName()).log(Level.SEVERE, "Could not find " + configFile.getName() + ", creating new one..."); - reLoad(); - } catch (IOException e) { - Logger.getLogger(JavaPlugin.class.getName()).log(Level.SEVERE, "Could not load " + configFile.getName(), e); - } catch (InvalidConfigurationException e) { - Logger.getLogger(JavaPlugin.class.getName()).log(Level.SEVERE, configFile.getName() + " is no valid configuration file", e); - } - } + public void load() { + try { + super.load(configFile); + } catch (FileNotFoundException e) { + Logger.getLogger(JavaPlugin.class.getName()).log( + Level.SEVERE, + "Could not find " + configFile.getName() + + ", creating new one..."); + reLoad(); + } catch (IOException e) { + Logger.getLogger(JavaPlugin.class.getName()).log(Level.SEVERE, + "Could not load " + configFile.getName(), e); + } catch (InvalidConfigurationException e) { + 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()) - { - out = loadRessource(configFile); - } - if (out) load(); - return out; - } + public boolean reLoad() { + boolean out = true; + if (!configFile.exists()) { + out = loadRessource(configFile); + } + if (out) load(); + return out; + } - public void save() { - try { - super.save(configFile); - } catch (IOException ex) { - Logger.getLogger(JavaPlugin.class.getName()).log(Level.SEVERE, "Could not save config to " + configFile.getName(), ex); - } - } + public void save() { + try { + super.save(configFile); + } catch (IOException ex) { + 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()) { - try { - InputStream fis = getClass().getResourceAsStream("/" + file.getName()); - BufferedReader reader = new BufferedReader(new InputStreamReader(fis, Charset.forName("UTF-8").newDecoder())); - String str; - Writer writer = new BufferedWriter(new OutputStreamWriter( - new FileOutputStream(file), Charset.forName("UTF-8").newEncoder())); - while ((str = reader.readLine()) != null) { - writer.append(str).append("\r\n"); - } - writer.flush(); - writer.close(); - reader.close(); - fis.close(); - } catch (Exception e) { - Logger.getLogger(JavaPlugin.class.getName()).log(Level.SEVERE, "Failed to load config from JAR"); - out = false; - } - /*FileOutputStream fos = null; - try { - fos = new FileOutputStream(file); - byte[] buf = new byte[1024]; - int i = 0; - while ((i = fis.read(buf)) != -1) { - fos.write(buf, 0, i); - } - } catch (Exception e) { - Logger.getLogger(JavaPlugin.class.getName()).log(Level.SEVERE, "Failed to load config from JAR"); - out = false; - } finally { - try { - if (fis != null) { - fis.close(); - } - if (fos != null) { - fos.close(); - } - } catch (Exception e) { - } - } - }*/ - } - return out; - } -} \ No newline at end of file + public boolean loadRessource(File file) { + boolean out = true; + if (!file.exists()) { + try { + InputStream fis = getClass().getResourceAsStream( + "/" + file.getName()); + BufferedReader reader = new BufferedReader( + new InputStreamReader(fis, Charset.forName("UTF-8") + .newDecoder())); + String str; + Writer writer = new BufferedWriter(new OutputStreamWriter( + new FileOutputStream(file), Charset.forName("UTF-8") + .newEncoder())); + while ((str = reader.readLine()) != null) { + writer.append(str).append("\r\n"); + } + writer.flush(); + writer.close(); + reader.close(); + fis.close(); + } catch (Exception e) { + Logger.getLogger(JavaPlugin.class.getName()).log(Level.SEVERE, + "Failed to load config from JAR"); + out = false; + } + /* + * FileOutputStream fos = null; try { fos = new + * FileOutputStream(file); byte[] buf = new byte[1024]; int i = 0; + * while ((i = fis.read(buf)) != -1) { fos.write(buf, 0, i); } } + * catch (Exception e) { + * Logger.getLogger(JavaPlugin.class.getName()).log(Level.SEVERE, + * "Failed to load config from JAR"); out = false; } finally { try { + * if (fis != null) { fis.close(); } if (fos != null) { fos.close(); + * } } catch (Exception e) { } } } + */ + } + return out; + } +} diff --git a/src/main/java/fr/xephi/authme/settings/Messages.java b/src/main/java/fr/xephi/authme/settings/Messages.java index 851e99e7..f83fdc02 100644 --- a/src/main/java/fr/xephi/authme/settings/Messages.java +++ b/src/main/java/fr/xephi/authme/settings/Messages.java @@ -22,11 +22,12 @@ public class Messages extends CustomConfiguration { /** * Loads a file from the plugin jar and sets as default * - * @param filename The filename to open + * @param filename + * The filename to open */ public final void loadDefaults(File file) { InputStream stream = AuthMe.getInstance().getResource(file.getName()); - if(stream == null) return; + if (stream == null) return; setDefaults(YamlConfiguration.loadConfiguration(stream)); } @@ -61,7 +62,7 @@ public class Messages extends CustomConfiguration { return success; } - private void loadFile() { + private void loadFile() { this.load(); this.save(); } @@ -69,32 +70,40 @@ public class Messages extends CustomConfiguration { public void _(CommandSender sender, String msg) { String loc = (String) this.get(msg); if (loc == null) { - loc = "Error with Translation files; Please contact the admin for verify or update translation"; - ConsoleLogger.showError("Error with the " + msg + " translation, verify in your " + Settings.MESSAGE_FILE + "_" + Settings.messagesLanguage + ".yml !"); + loc = "Error with Translation files; Please contact the admin for verify or update translation"; + ConsoleLogger.showError("Error with the " + msg + + " translation, verify in your " + Settings.MESSAGE_FILE + + "_" + Settings.messagesLanguage + ".yml !"); } for (String l : loc.split("&n")) { - sender.sendMessage(l.replace("&", "\u00a7")); + sender.sendMessage(l.replace("&", "\u00a7")); } } public String[] _(String msg) { - int i = ((String) this.get(msg)).split("&n").length; + int i = ((String) this.get(msg)).split("&n").length; String[] loc = new String[i]; int a; - for (a = 0 ; a < i ; a++) { - loc[a] = ((String) this.get(msg)).split("&n")[a].replace("&", "\u00a7"); + for (a = 0; a < i; a++) { + loc[a] = ((String) this.get(msg)).split("&n")[a].replace("&", + "\u00a7"); } if (loc == null || loc.length == 0) { - loc[0] = "Error with " + msg + " translation; Please contact the admin for verify or update translation files"; - ConsoleLogger.showError("Error with the " + msg + " translation, verify in your " + Settings.MESSAGE_FILE + "_" + Settings.messagesLanguage + ".yml !"); + loc[0] = "Error with " + + msg + + " translation; Please contact the admin for verify or update translation files"; + ConsoleLogger.showError("Error with the " + msg + + " translation, verify in your " + Settings.MESSAGE_FILE + + "_" + Settings.messagesLanguage + ".yml !"); } return loc; } - public static Messages getInstance() { + public static Messages getInstance() { if (singleton == null) { - singleton = new Messages(new File(Settings.MESSAGE_FILE+"_"+Settings.messagesLanguage+".yml")); - } + singleton = new Messages(new File(Settings.MESSAGE_FILE + "_" + + Settings.messagesLanguage + ".yml")); + } return singleton; } diff --git a/src/main/java/fr/xephi/authme/settings/OtherAccounts.java b/src/main/java/fr/xephi/authme/settings/OtherAccounts.java index eb80f8c6..96d1aacd 100644 --- a/src/main/java/fr/xephi/authme/settings/OtherAccounts.java +++ b/src/main/java/fr/xephi/authme/settings/OtherAccounts.java @@ -9,25 +9,25 @@ import org.bukkit.Bukkit; import org.bukkit.entity.Player; /** -* -* @author Xephi59 -*/ + * + * @author Xephi59 + */ public class OtherAccounts extends CustomConfiguration { - private static OtherAccounts others = null; + private static OtherAccounts others = null; - public OtherAccounts() { - super(new File("./plugins/AuthMe/otheraccounts.yml")); - others = this; - load(); - save(); - } + public OtherAccounts() { + super(new File("./plugins/AuthMe/otheraccounts.yml")); + others = this; + load(); + save(); + } - public void clear(UUID uuid) { - set(uuid.toString(), new ArrayList()); - save(); - } + public void clear(UUID uuid) { + set(uuid.toString(), new ArrayList()); + save(); + } - public static OtherAccounts getInstance() { + public static OtherAccounts getInstance() { if (others == null) { others = new OtherAccounts(); } @@ -35,33 +35,33 @@ public class OtherAccounts extends CustomConfiguration { } public void addPlayer(UUID uuid) { - try { - Player player = Bukkit.getPlayer(uuid); - if (player == null) return; - if (!this.getStringList(uuid.toString()).contains(player.getName())) { - this.getStringList(uuid.toString()).add(player.getName()); - save(); - } - } catch (NoSuchMethodError e) { - } catch (Exception e) { - } + try { + Player player = Bukkit.getPlayer(uuid); + if (player == null) return; + if (!this.getStringList(uuid.toString()).contains(player.getName())) { + this.getStringList(uuid.toString()).add(player.getName()); + save(); + } + } catch (NoSuchMethodError e) { + } catch (Exception e) { + } } - public void removePlayer(UUID uuid) { - try { - Player player = Bukkit.getPlayer(uuid); - if (player == null) return; - if (this.getStringList(uuid.toString()).contains(player.getName())) { - this.getStringList(uuid.toString()).remove(player.getName()); - save(); - } - } catch (NoSuchMethodError e) { - } catch (Exception e) { - } + public void removePlayer(UUID uuid) { + try { + Player player = Bukkit.getPlayer(uuid); + if (player == null) return; + if (this.getStringList(uuid.toString()).contains(player.getName())) { + this.getStringList(uuid.toString()).remove(player.getName()); + save(); + } + } catch (NoSuchMethodError e) { + } catch (Exception e) { + } - } - - public List getAllPlayersByUUID(UUID uuid) { - return this.getStringList(uuid.toString()); - } + } + + public List getAllPlayersByUUID(UUID uuid) { + return this.getStringList(uuid.toString()); + } } diff --git a/src/main/java/fr/xephi/authme/settings/PlayersLogs.java b/src/main/java/fr/xephi/authme/settings/PlayersLogs.java index 345dc6ec..7cf06ced 100644 --- a/src/main/java/fr/xephi/authme/settings/PlayersLogs.java +++ b/src/main/java/fr/xephi/authme/settings/PlayersLogs.java @@ -5,27 +5,27 @@ import java.util.ArrayList; import java.util.List; /** -* -* @author Xephi59 -*/ + * + * @author Xephi59 + */ public class PlayersLogs extends CustomConfiguration { - private static PlayersLogs pllog = null; - public List players; + private static PlayersLogs pllog = null; + public List players; - public PlayersLogs() { - super(new File("./plugins/AuthMe/players.yml")); - pllog = this; - load(); - save(); - players = this.getStringList("players"); - } + public PlayersLogs() { + super(new File("./plugins/AuthMe/players.yml")); + pllog = this; + load(); + save(); + players = this.getStringList("players"); + } - public void clear() { - set("players", new ArrayList()); - save(); - } + public void clear() { + set("players", new ArrayList()); + save(); + } - public static PlayersLogs getInstance() { + public static PlayersLogs getInstance() { if (pllog == null) { pllog = new PlayersLogs(); } @@ -41,12 +41,12 @@ public class PlayersLogs extends CustomConfiguration { } } - public void removePlayer(String user) { + public void removePlayer(String user) { players = this.getStringList("players"); if (players.contains(user.toLowerCase())) { players.remove(user.toLowerCase()); set("players", players); save(); } - } + } } diff --git a/src/main/java/fr/xephi/authme/settings/Settings.java b/src/main/java/fr/xephi/authme/settings/Settings.java index fbf6fc72..d17b8d98 100644 --- a/src/main/java/fr/xephi/authme/settings/Settings.java +++ b/src/main/java/fr/xephi/authme/settings/Settings.java @@ -21,14 +21,15 @@ import fr.xephi.authme.datasource.DataSource; import fr.xephi.authme.datasource.DataSource.DataSourceType; import fr.xephi.authme.security.HashAlgorithm; - public final class Settings extends YamlConfiguration { public static final String PLUGIN_FOLDER = "./plugins/AuthMe"; public static final String CACHE_FOLDER = Settings.PLUGIN_FOLDER + "/cache"; public static final String AUTH_FILE = Settings.PLUGIN_FOLDER + "/auths.db"; - public static final String MESSAGE_FILE = Settings.PLUGIN_FOLDER + "/messages"; - public static final String SETTINGS_FILE = Settings.PLUGIN_FOLDER + "/config.yml"; + public static final String MESSAGE_FILE = Settings.PLUGIN_FOLDER + + "/messages"; + public static final String SETTINGS_FILE = Settings.PLUGIN_FOLDER + + "/config.yml"; public static List allowCommands = null; public static List getJoinPermissions = null; public static List getUnrestrictedName = null; @@ -48,517 +49,769 @@ public final class Settings extends YamlConfiguration { public static List welcomeMsg = null; public static List unsafePasswords; public static List emailBlacklist = null; - - public static Boolean isPermissionCheckEnabled, isRegistrationEnabled, isForcedRegistrationEnabled, - isTeleportToSpawnEnabled, isSessionsEnabled, isChatAllowed, isAllowRestrictedIp, - isMovementAllowed, isKickNonRegisteredEnabled, isForceSingleSessionEnabled, - isForceSpawnLocOnJoinEnabled, isSaveQuitLocationEnabled, - isForceSurvivalModeEnabled, isResetInventoryIfCreative, isCachingEnabled, isKickOnWrongPasswordEnabled, - getEnablePasswordVerifier, protectInventoryBeforeLogInEnabled, isBackupActivated, isBackupOnStart, - isBackupOnStop, enablePasspartu, isStopEnabled, reloadSupport, rakamakUseIp, noConsoleSpam, removePassword, displayOtherAccounts, - useCaptcha, emailRegistration, multiverse, notifications, chestshop, bungee, banUnsafeIp, doubleEmailCheck, sessionExpireOnIpChange, - disableSocialSpy, forceOnlyAfterLogin, useEssentialsMotd, - usePurge, purgePlayerDat, purgeEssentialsFile, supportOldPassword, purgeLimitedCreative, - purgeAntiXray, purgePermissions, enableProtection, enableAntiBot, recallEmail, useWelcomeMessage, - broadcastWelcomeMessage, forceRegKick, forceRegLogin, checkVeryGames, delayJoinMessage, - noTeleport, applyBlindEffect; - - public static String getNickRegex, getUnloggedinGroup, getMySQLHost, getMySQLPort, - getMySQLUsername, getMySQLPassword, getMySQLDatabase, getMySQLTablename, - getMySQLColumnName, getMySQLColumnPassword, getMySQLColumnIp, getMySQLColumnLastLogin, - getMySQLColumnSalt, getMySQLColumnGroup, getMySQLColumnEmail, unRegisteredGroup, backupWindowsPath, - getcUnrestrictedName, getRegisteredGroup, messagesLanguage, getMySQLlastlocX, getMySQLlastlocY, getMySQLlastlocZ, - rakamakUsers, rakamakUsersIp, getmailAccount, getmailPassword, getmailSMTP, getMySQLColumnId, getmailSenderName, - getMailSubject, getMailText, getMySQLlastlocWorld, defaultWorld, - getPhpbbPrefix, getWordPressPrefix, getMySQLColumnLogged, spawnPriority, crazyloginFileName, - getPassRegex; - public static int getWarnMessageInterval, getSessionTimeout, getRegistrationTimeout, getMaxNickLength, - getMinNickLength, getPasswordMinLen, getMovementRadius, getmaxRegPerIp, getNonActivatedGroup, - passwordMaxLength, getRecoveryPassLength, getMailPort, maxLoginTry, captchaLength, saltLength, getmaxRegPerEmail, - bCryptLog2Rounds, getPhpbbGroup, antiBotSensibility, antiBotDuration, delayRecall, getMaxLoginPerIp, getMaxJoinPerIp; + public static Boolean isPermissionCheckEnabled, isRegistrationEnabled, + isForcedRegistrationEnabled, isTeleportToSpawnEnabled, + isSessionsEnabled, isChatAllowed, isAllowRestrictedIp, + isMovementAllowed, isKickNonRegisteredEnabled, + isForceSingleSessionEnabled, isForceSpawnLocOnJoinEnabled, + isSaveQuitLocationEnabled, isForceSurvivalModeEnabled, + isResetInventoryIfCreative, isCachingEnabled, + isKickOnWrongPasswordEnabled, getEnablePasswordVerifier, + protectInventoryBeforeLogInEnabled, isBackupActivated, + isBackupOnStart, isBackupOnStop, enablePasspartu, isStopEnabled, + reloadSupport, rakamakUseIp, noConsoleSpam, removePassword, + displayOtherAccounts, useCaptcha, emailRegistration, multiverse, + notifications, chestshop, bungee, banUnsafeIp, doubleEmailCheck, + sessionExpireOnIpChange, disableSocialSpy, forceOnlyAfterLogin, + useEssentialsMotd, usePurge, purgePlayerDat, purgeEssentialsFile, + supportOldPassword, purgeLimitedCreative, purgeAntiXray, + purgePermissions, enableProtection, enableAntiBot, recallEmail, + useWelcomeMessage, broadcastWelcomeMessage, forceRegKick, + forceRegLogin, checkVeryGames, delayJoinMessage, noTeleport, + applyBlindEffect; + + public static String getNickRegex, getUnloggedinGroup, getMySQLHost, + getMySQLPort, getMySQLUsername, getMySQLPassword, getMySQLDatabase, + getMySQLTablename, getMySQLColumnName, getMySQLColumnPassword, + getMySQLColumnIp, getMySQLColumnLastLogin, getMySQLColumnSalt, + getMySQLColumnGroup, getMySQLColumnEmail, unRegisteredGroup, + backupWindowsPath, getcUnrestrictedName, getRegisteredGroup, + messagesLanguage, getMySQLlastlocX, getMySQLlastlocY, + getMySQLlastlocZ, rakamakUsers, rakamakUsersIp, getmailAccount, + getmailPassword, getmailSMTP, getMySQLColumnId, getmailSenderName, + getMailSubject, getMailText, getMySQLlastlocWorld, defaultWorld, + getPhpbbPrefix, getWordPressPrefix, getMySQLColumnLogged, + spawnPriority, crazyloginFileName, getPassRegex; + + public static int getWarnMessageInterval, getSessionTimeout, + getRegistrationTimeout, getMaxNickLength, getMinNickLength, + getPasswordMinLen, getMovementRadius, getmaxRegPerIp, + getNonActivatedGroup, passwordMaxLength, getRecoveryPassLength, + getMailPort, maxLoginTry, captchaLength, saltLength, + getmaxRegPerEmail, bCryptLog2Rounds, getPhpbbGroup, + antiBotSensibility, antiBotDuration, delayRecall, getMaxLoginPerIp, + getMaxJoinPerIp; protected static YamlConfiguration configFile; - public Settings(AuthMe plugin) { - this.file = new File(plugin.getDataFolder(),"config.yml"); + public Settings(AuthMe plugin) { + this.file = new File(plugin.getDataFolder(), "config.yml"); this.plugin = plugin; - if(exists()) { + if (exists()) { load(); - } - else { + } else { loadDefaults(file.getName()); load(); } configFile = (YamlConfiguration) plugin.getConfig(); } -@SuppressWarnings("unchecked") -public void loadConfigOptions() { + @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); - isRegistrationEnabled = configFile.getBoolean("settings.registration.enabled", true); - isTeleportToSpawnEnabled = configFile.getBoolean("settings.restrictions.teleportUnAuthedToSpawn",false); - getWarnMessageInterval = configFile.getInt("settings.registration.messageInterval",5); - isSessionsEnabled = configFile.getBoolean("settings.sessions.enabled",false); - getSessionTimeout = configFile.getInt("settings.sessions.timeout",10); - getRegistrationTimeout = configFile.getInt("settings.restrictions.timeout",30); - isChatAllowed = configFile.getBoolean("settings.restrictions.allowChat",false); - getMaxNickLength = configFile.getInt("settings.restrictions.maxNicknameLength",20); - getMinNickLength = configFile.getInt("settings.restrictions.minNicknameLength",3); - getPasswordMinLen = configFile.getInt("settings.security.minPasswordLength",4); - getNickRegex = configFile.getString("settings.restrictions.allowedNicknameCharacters","[a-zA-Z0-9_?]*"); - isAllowRestrictedIp = configFile.getBoolean("settings.restrictions.AllowRestrictedUser",false); - getRestrictedIp = configFile.getStringList("settings.restrictions.AllowedRestrictedUser"); - isMovementAllowed = configFile.getBoolean("settings.restrictions.allowMovement",false); - getMovementRadius = configFile.getInt("settings.restrictions.allowedMovementRadius",100); - getJoinPermissions = configFile.getStringList("GroupOptions.Permissions.PermissionsOnJoin"); - isKickOnWrongPasswordEnabled = configFile.getBoolean("settings.restrictions.kickOnWrongPassword",false); - isKickNonRegisteredEnabled = configFile.getBoolean("settings.restrictions.kickNonRegistered",false); - isForceSingleSessionEnabled = configFile.getBoolean("settings.restrictions.ForceSingleSession",true); - isForceSpawnLocOnJoinEnabled = configFile.getBoolean("settings.restrictions.ForceSpawnLocOnJoinEnabled",false); - isSaveQuitLocationEnabled = configFile.getBoolean("settings.restrictions.SaveQuitLocation", false); - isForceSurvivalModeEnabled = configFile.getBoolean("settings.GameMode.ForceSurvivalMode", false); - isResetInventoryIfCreative = configFile.getBoolean("settings.GameMode.ResetInventoryIfCreative",false); - getmaxRegPerIp = configFile.getInt("settings.restrictions.maxRegPerIp",1); + messagesLanguage = checkLang(configFile.getString( + "settings.messagesLanguage", "en")); + isPermissionCheckEnabled = configFile.getBoolean( + "permission.EnablePermissionCheck", false); + isForcedRegistrationEnabled = configFile.getBoolean( + "settings.registration.force", true); + isRegistrationEnabled = configFile.getBoolean( + "settings.registration.enabled", true); + isTeleportToSpawnEnabled = configFile.getBoolean( + "settings.restrictions.teleportUnAuthedToSpawn", false); + getWarnMessageInterval = configFile.getInt( + "settings.registration.messageInterval", 5); + isSessionsEnabled = configFile.getBoolean("settings.sessions.enabled", + false); + getSessionTimeout = configFile.getInt("settings.sessions.timeout", 10); + getRegistrationTimeout = configFile.getInt( + "settings.restrictions.timeout", 30); + isChatAllowed = configFile.getBoolean( + "settings.restrictions.allowChat", false); + getMaxNickLength = configFile.getInt( + "settings.restrictions.maxNicknameLength", 20); + getMinNickLength = configFile.getInt( + "settings.restrictions.minNicknameLength", 3); + getPasswordMinLen = configFile.getInt( + "settings.security.minPasswordLength", 4); + getNickRegex = configFile.getString( + "settings.restrictions.allowedNicknameCharacters", + "[a-zA-Z0-9_?]*"); + isAllowRestrictedIp = configFile.getBoolean( + "settings.restrictions.AllowRestrictedUser", false); + getRestrictedIp = configFile + .getStringList("settings.restrictions.AllowedRestrictedUser"); + isMovementAllowed = configFile.getBoolean( + "settings.restrictions.allowMovement", false); + getMovementRadius = configFile.getInt( + "settings.restrictions.allowedMovementRadius", 100); + getJoinPermissions = configFile + .getStringList("GroupOptions.Permissions.PermissionsOnJoin"); + isKickOnWrongPasswordEnabled = configFile.getBoolean( + "settings.restrictions.kickOnWrongPassword", false); + isKickNonRegisteredEnabled = configFile.getBoolean( + "settings.restrictions.kickNonRegistered", false); + isForceSingleSessionEnabled = configFile.getBoolean( + "settings.restrictions.ForceSingleSession", true); + isForceSpawnLocOnJoinEnabled = configFile.getBoolean( + "settings.restrictions.ForceSpawnLocOnJoinEnabled", false); + isSaveQuitLocationEnabled = configFile.getBoolean( + "settings.restrictions.SaveQuitLocation", false); + isForceSurvivalModeEnabled = configFile.getBoolean( + "settings.GameMode.ForceSurvivalMode", false); + isResetInventoryIfCreative = configFile.getBoolean( + "settings.GameMode.ResetInventoryIfCreative", false); + getmaxRegPerIp = configFile.getInt("settings.restrictions.maxRegPerIp", + 1); getPasswordHash = getPasswordHash(); - getUnloggedinGroup = configFile.getString("settings.security.unLoggedinGroup","unLoggedInGroup"); + getUnloggedinGroup = configFile.getString( + "settings.security.unLoggedinGroup", "unLoggedInGroup"); getDataSource = getDataSource(); - isCachingEnabled = configFile.getBoolean("DataSource.caching",true); - getMySQLHost = configFile.getString("DataSource.mySQLHost","127.0.0.1"); - getMySQLPort = configFile.getString("DataSource.mySQLPort","3306"); - getMySQLUsername = configFile.getString("DataSource.mySQLUsername","authme"); - getMySQLPassword = configFile.getString("DataSource.mySQLPassword","12345"); - getMySQLDatabase = configFile.getString("DataSource.mySQLDatabase","authme"); - getMySQLTablename = configFile.getString("DataSource.mySQLTablename","authme"); - getMySQLColumnEmail = configFile.getString("DataSource.mySQLColumnEmail","email"); - getMySQLColumnName = configFile.getString("DataSource.mySQLColumnName","username"); - getMySQLColumnPassword = configFile.getString("DataSource.mySQLColumnPassword","password"); - getMySQLColumnIp = configFile.getString("DataSource.mySQLColumnIp","ip"); - getMySQLColumnLastLogin = configFile.getString("DataSource.mySQLColumnLastLogin","lastlogin"); - getMySQLColumnSalt = configFile.getString("ExternalBoardOptions.mySQLColumnSalt"); - getMySQLColumnGroup = configFile.getString("ExternalBoardOptions.mySQLColumnGroup",""); - getMySQLlastlocX = configFile.getString("DataSource.mySQLlastlocX","x"); - getMySQLlastlocY = configFile.getString("DataSource.mySQLlastlocY","y"); - getMySQLlastlocZ = configFile.getString("DataSource.mySQLlastlocZ","z"); - getMySQLlastlocWorld = configFile.getString("DataSource.mySQLlastlocWorld", "world"); - getNonActivatedGroup = configFile.getInt("ExternalBoardOptions.nonActivedUserGroup", -1); - unRegisteredGroup = configFile.getString("GroupOptions.UnregisteredPlayerGroup",""); - getUnrestrictedName = configFile.getStringList("settings.unrestrictions.UnrestrictedName"); - getRegisteredGroup = configFile.getString("GroupOptions.RegisteredPlayerGroup",""); - getEnablePasswordVerifier = configFile.getBoolean("settings.restrictions.enablePasswordVerifier" , true); - protectInventoryBeforeLogInEnabled = configFile.getBoolean("settings.restrictions.ProtectInventoryBeforeLogIn", true); - passwordMaxLength = configFile.getInt("settings.security.passwordMaxLength", 20); - isBackupActivated = configFile.getBoolean("BackupSystem.ActivateBackup",false); - isBackupOnStart = configFile.getBoolean("BackupSystem.OnServerStart",false); - isBackupOnStop = configFile.getBoolean("BackupSystem.OnServeStop",false); - backupWindowsPath = configFile.getString("BackupSystem.MysqlWindowsPath", "C:\\Program Files\\MySQL\\MySQL Server 5.1\\"); - enablePasspartu = configFile.getBoolean("Passpartu.enablePasspartu",false); - isStopEnabled = configFile.getBoolean("Security.SQLProblem.stopServer", true); - reloadSupport = configFile.getBoolean("Security.ReloadCommand.useReloadCommandSupport", true); - allowCommands = (List) configFile.getList("settings.restrictions.allowCommands"); + isCachingEnabled = configFile.getBoolean("DataSource.caching", true); + getMySQLHost = configFile + .getString("DataSource.mySQLHost", "127.0.0.1"); + getMySQLPort = configFile.getString("DataSource.mySQLPort", "3306"); + getMySQLUsername = configFile.getString("DataSource.mySQLUsername", + "authme"); + getMySQLPassword = configFile.getString("DataSource.mySQLPassword", + "12345"); + getMySQLDatabase = configFile.getString("DataSource.mySQLDatabase", + "authme"); + getMySQLTablename = configFile.getString("DataSource.mySQLTablename", + "authme"); + getMySQLColumnEmail = configFile.getString( + "DataSource.mySQLColumnEmail", "email"); + getMySQLColumnName = configFile.getString("DataSource.mySQLColumnName", + "username"); + getMySQLColumnPassword = configFile.getString( + "DataSource.mySQLColumnPassword", "password"); + getMySQLColumnIp = configFile.getString("DataSource.mySQLColumnIp", + "ip"); + getMySQLColumnLastLogin = configFile.getString( + "DataSource.mySQLColumnLastLogin", "lastlogin"); + getMySQLColumnSalt = configFile + .getString("ExternalBoardOptions.mySQLColumnSalt"); + getMySQLColumnGroup = configFile.getString( + "ExternalBoardOptions.mySQLColumnGroup", ""); + getMySQLlastlocX = configFile + .getString("DataSource.mySQLlastlocX", "x"); + getMySQLlastlocY = configFile + .getString("DataSource.mySQLlastlocY", "y"); + getMySQLlastlocZ = configFile + .getString("DataSource.mySQLlastlocZ", "z"); + getMySQLlastlocWorld = configFile.getString( + "DataSource.mySQLlastlocWorld", "world"); + getNonActivatedGroup = configFile.getInt( + "ExternalBoardOptions.nonActivedUserGroup", -1); + unRegisteredGroup = configFile.getString( + "GroupOptions.UnregisteredPlayerGroup", ""); + getUnrestrictedName = configFile + .getStringList("settings.unrestrictions.UnrestrictedName"); + getRegisteredGroup = configFile.getString( + "GroupOptions.RegisteredPlayerGroup", ""); + getEnablePasswordVerifier = configFile.getBoolean( + "settings.restrictions.enablePasswordVerifier", true); + protectInventoryBeforeLogInEnabled = configFile.getBoolean( + "settings.restrictions.ProtectInventoryBeforeLogIn", true); + passwordMaxLength = configFile.getInt( + "settings.security.passwordMaxLength", 20); + isBackupActivated = configFile.getBoolean( + "BackupSystem.ActivateBackup", false); + isBackupOnStart = configFile.getBoolean("BackupSystem.OnServerStart", + false); + isBackupOnStop = configFile.getBoolean("BackupSystem.OnServeStop", + false); + backupWindowsPath = configFile.getString( + "BackupSystem.MysqlWindowsPath", + "C:\\Program Files\\MySQL\\MySQL Server 5.1\\"); + enablePasspartu = configFile.getBoolean("Passpartu.enablePasspartu", + false); + isStopEnabled = configFile.getBoolean("Security.SQLProblem.stopServer", + true); + reloadSupport = configFile.getBoolean( + "Security.ReloadCommand.useReloadCommandSupport", true); + allowCommands = (List) configFile + .getList("settings.restrictions.allowCommands"); if (configFile.contains("allowCommands")) { - if (!allowCommands.contains("/login")) - allowCommands.add("/login"); - if (!allowCommands.contains("/register")) - allowCommands.add("/register"); - if (!allowCommands.contains("/l")) - allowCommands.add("/l"); - if (!allowCommands.contains("/reg")) - allowCommands.add("/reg"); - if (!allowCommands.contains("/passpartu")) - allowCommands.add("/passpartu"); - if (!allowCommands.contains("/email")) - allowCommands.add("/email"); - if(!allowCommands.contains("/captcha")) - allowCommands.add("/captcha"); + if (!allowCommands.contains("/login")) allowCommands.add("/login"); + if (!allowCommands.contains("/register")) allowCommands + .add("/register"); + if (!allowCommands.contains("/l")) allowCommands.add("/l"); + if (!allowCommands.contains("/reg")) allowCommands.add("/reg"); + if (!allowCommands.contains("/passpartu")) allowCommands + .add("/passpartu"); + if (!allowCommands.contains("/email")) allowCommands.add("/email"); + if (!allowCommands.contains("/captcha")) allowCommands + .add("/captcha"); } - rakamakUsers = configFile.getString("Converter.Rakamak.fileName", "users.rak"); - rakamakUsersIp = configFile.getString("Converter.Rakamak.ipFileName", "UsersIp.rak"); + rakamakUsers = configFile.getString("Converter.Rakamak.fileName", + "users.rak"); + rakamakUsersIp = configFile.getString("Converter.Rakamak.ipFileName", + "UsersIp.rak"); rakamakUseIp = configFile.getBoolean("Converter.Rakamak.useIp", false); - noConsoleSpam = configFile.getBoolean("Security.console.noConsoleSpam", false); - removePassword = configFile.getBoolean("Security.console.removePassword", true); + noConsoleSpam = configFile.getBoolean("Security.console.noConsoleSpam", + false); + removePassword = configFile.getBoolean( + "Security.console.removePassword", true); getmailAccount = configFile.getString("Email.mailAccount", ""); getmailPassword = configFile.getString("Email.mailPassword", ""); getmailSMTP = configFile.getString("Email.mailSMTP", "smtp.gmail.com"); getMailPort = configFile.getInt("Email.mailPort", 465); - getRecoveryPassLength = configFile.getInt("Email.RecoveryPasswordLength", 8); - getMySQLOtherUsernameColumn = (List) configFile.getList("ExternalBoardOptions.mySQLOtherUsernameColumns", new ArrayList()); - displayOtherAccounts = configFile.getBoolean("settings.restrictions.displayOtherAccounts", true); - getMySQLColumnId = configFile.getString("DataSource.mySQLColumnId", "id"); + getRecoveryPassLength = configFile.getInt( + "Email.RecoveryPasswordLength", 8); + getMySQLOtherUsernameColumn = (List) configFile.getList( + "ExternalBoardOptions.mySQLOtherUsernameColumns", + new ArrayList()); + displayOtherAccounts = configFile.getBoolean( + "settings.restrictions.displayOtherAccounts", true); + getMySQLColumnId = configFile.getString("DataSource.mySQLColumnId", + "id"); getmailSenderName = configFile.getString("Email.mailSenderName", ""); - useCaptcha = configFile.getBoolean("Security.captcha.useCaptcha", false); + useCaptcha = configFile + .getBoolean("Security.captcha.useCaptcha", false); maxLoginTry = configFile.getInt("Security.captcha.maxLoginTry", 5); captchaLength = configFile.getInt("Security.captcha.captchaLength", 5); - getMailSubject = configFile.getString("Email.mailSubject", "Your new AuthMe Password"); - getMailText = configFile.getString("Email.mailText", "Dear ,

This is your new AuthMe password for the server

:



Do not forget to change password after login!
/changepassword newPassword"); - emailRegistration = configFile.getBoolean("settings.registration.enableEmailRegistrationSystem", false); - saltLength = configFile.getInt("settings.security.doubleMD5SaltLength", 8); + getMailSubject = configFile.getString("Email.mailSubject", + "Your new AuthMe Password"); + getMailText = configFile + .getString( + "Email.mailText", + "Dear ,

This is your new AuthMe password for the server

:



Do not forget to change password after login!
/changepassword newPassword"); + emailRegistration = configFile.getBoolean( + "settings.registration.enableEmailRegistrationSystem", false); + saltLength = configFile.getInt("settings.security.doubleMD5SaltLength", + 8); getmaxRegPerEmail = configFile.getInt("Email.maxRegPerEmail", 1); multiverse = configFile.getBoolean("Hooks.multiverse", true); chestshop = configFile.getBoolean("Hooks.chestshop", true); notifications = configFile.getBoolean("Hooks.notifications", true); bungee = configFile.getBoolean("Hooks.bungeecord", false); - getForcedWorlds = (List) configFile.getList("settings.restrictions.ForceSpawnOnTheseWorlds", new ArrayList()); - 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); - disableSocialSpy = configFile.getBoolean("Hooks.disableSocialSpy", true); - bCryptLog2Rounds = configFile.getInt("ExternalBoardOptions.bCryptLog2Round", 10); - forceOnlyAfterLogin = configFile.getBoolean("settings.GameMode.ForceOnlyAfterLogin", false); - useEssentialsMotd = configFile.getBoolean("Hooks.useEssentialsMotd", false); + getForcedWorlds = (List) configFile.getList( + "settings.restrictions.ForceSpawnOnTheseWorlds", + new ArrayList()); + 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); + disableSocialSpy = configFile + .getBoolean("Hooks.disableSocialSpy", true); + bCryptLog2Rounds = configFile.getInt( + "ExternalBoardOptions.bCryptLog2Round", 10); + forceOnlyAfterLogin = configFile.getBoolean( + "settings.GameMode.ForceOnlyAfterLogin", false); + useEssentialsMotd = configFile.getBoolean("Hooks.useEssentialsMotd", + false); usePurge = configFile.getBoolean("Purge.useAutoPurge", false); purgeDelay = configFile.getInt("Purge.daysBeforeRemovePlayer", 60); purgePlayerDat = configFile.getBoolean("Purge.removePlayerDat", false); - purgeEssentialsFile = configFile.getBoolean("Purge.removeEssentialsFile", false); + purgeEssentialsFile = configFile.getBoolean( + "Purge.removeEssentialsFile", false); defaultWorld = configFile.getString("Purge.defaultWorld", "world"); - getPhpbbPrefix = configFile.getString("ExternalBoardOptions.phpbbTablePrefix", "phpbb_"); - getPhpbbGroup = configFile.getInt("ExternalBoardOptions.phpbbActivatedGroupId", 2); - supportOldPassword = configFile.getBoolean("settings.security.supportOldPasswordHash", false); - getWordPressPrefix = configFile.getString("ExternalBoardOptions.wordpressTablePrefix", "wp_"); - purgeLimitedCreative = configFile.getBoolean("Purge.removeLimitedCreativesInventories", false); - purgeAntiXray = configFile.getBoolean("Purge.removeAntiXRayFile", false); - //purgePermissions = configFile.getBoolean("Purge.removePermissions", false); - enableProtection = configFile.getBoolean("Protection.enableProtection", false); - countries = (List) configFile.getList("Protection.countries", new ArrayList()); - enableAntiBot = configFile.getBoolean("Protection.enableAntiBot", false); - antiBotSensibility = configFile.getInt("Protection.antiBotSensibility", 5); + getPhpbbPrefix = configFile.getString( + "ExternalBoardOptions.phpbbTablePrefix", "phpbb_"); + getPhpbbGroup = configFile.getInt( + "ExternalBoardOptions.phpbbActivatedGroupId", 2); + supportOldPassword = configFile.getBoolean( + "settings.security.supportOldPasswordHash", false); + getWordPressPrefix = configFile.getString( + "ExternalBoardOptions.wordpressTablePrefix", "wp_"); + purgeLimitedCreative = configFile.getBoolean( + "Purge.removeLimitedCreativesInventories", false); + purgeAntiXray = configFile + .getBoolean("Purge.removeAntiXRayFile", false); + // purgePermissions = configFile.getBoolean("Purge.removePermissions", + // false); + enableProtection = configFile.getBoolean("Protection.enableProtection", + false); + countries = (List) configFile.getList("Protection.countries", + new ArrayList()); + enableAntiBot = configFile + .getBoolean("Protection.enableAntiBot", false); + antiBotSensibility = configFile.getInt("Protection.antiBotSensibility", + 5); antiBotDuration = configFile.getInt("Protection.antiBotDuration", 10); - forceCommands = (List) configFile.getList("settings.forceCommands", new ArrayList()); - forceCommandsAsConsole = (List) configFile.getList("settings.forceCommandsAsConsole", new ArrayList()); + forceCommands = (List) configFile.getList( + "settings.forceCommands", new ArrayList()); + forceCommandsAsConsole = (List) configFile.getList( + "settings.forceCommandsAsConsole", new ArrayList()); recallEmail = configFile.getBoolean("Email.recallPlayers", false); delayRecall = configFile.getInt("Email.delayRecall", 5); - useWelcomeMessage = configFile.getBoolean("settings.useWelcomeMessage", true); - unsafePasswords = (List) configFile.getList("settings.security.unsafePasswords", new ArrayList()); - countriesBlacklist = (List) configFile.getList("Protection.countriesBlacklist", new ArrayList()); - broadcastWelcomeMessage = configFile.getBoolean("settings.broadcastWelcomeMessage", false); - forceRegKick = configFile.getBoolean("settings.registration.forceKickAfterRegister", false); - forceRegLogin = configFile.getBoolean("settings.registration.forceLoginAfterRegister", false); - getMySQLColumnLogged = configFile.getString("DataSource.mySQLColumnLogged","isLogged"); - spawnPriority = configFile.getString("settings.restrictions.spawnPriority", "authme,essentials,multiverse,default"); - getMaxLoginPerIp = configFile.getInt("settings.restrictions.maxLoginPerIp", 0); - getMaxJoinPerIp = configFile.getInt("settings.restrictions.maxJoinPerIp", 0); - checkVeryGames = configFile.getBoolean("VeryGames.enableIpCheck", false); - delayJoinMessage = configFile.getBoolean("settings.delayJoinMessage", false); - noTeleport = configFile.getBoolean("settings.restrictions.noTeleport", false); - crazyloginFileName = configFile.getString("Converter.CrazyLogin.fileName", "accounts.db"); - getPassRegex = configFile.getString("settings.restrictions.allowedPasswordCharacters","[a-zA-Z0-9_?!@+&-]*"); - applyBlindEffect = configFile.getBoolean("settings.applyBlindEffect", false); + useWelcomeMessage = configFile.getBoolean("settings.useWelcomeMessage", + true); + unsafePasswords = (List) configFile.getList( + "settings.security.unsafePasswords", new ArrayList()); + countriesBlacklist = (List) configFile.getList( + "Protection.countriesBlacklist", new ArrayList()); + broadcastWelcomeMessage = configFile.getBoolean( + "settings.broadcastWelcomeMessage", false); + forceRegKick = configFile.getBoolean( + "settings.registration.forceKickAfterRegister", false); + forceRegLogin = configFile.getBoolean( + "settings.registration.forceLoginAfterRegister", false); + getMySQLColumnLogged = configFile.getString( + "DataSource.mySQLColumnLogged", "isLogged"); + spawnPriority = configFile.getString( + "settings.restrictions.spawnPriority", + "authme,essentials,multiverse,default"); + getMaxLoginPerIp = configFile.getInt( + "settings.restrictions.maxLoginPerIp", 0); + getMaxJoinPerIp = configFile.getInt( + "settings.restrictions.maxJoinPerIp", 0); + checkVeryGames = configFile + .getBoolean("VeryGames.enableIpCheck", false); + delayJoinMessage = configFile.getBoolean("settings.delayJoinMessage", + false); + noTeleport = configFile.getBoolean("settings.restrictions.noTeleport", + false); + crazyloginFileName = configFile.getString( + "Converter.CrazyLogin.fileName", "accounts.db"); + getPassRegex = configFile.getString( + "settings.restrictions.allowedPasswordCharacters", + "[a-zA-Z0-9_?!@+&-]*"); + applyBlindEffect = configFile.getBoolean("settings.applyBlindEffect", + false); emailBlacklist = configFile.getStringList("Email.emailBlacklisted"); // Load the welcome message getWelcomeMessage(plugin); saveDefaults(); - } + } -@SuppressWarnings("unchecked") -public static void reloadConfigOptions(YamlConfiguration newConfig) { - configFile = newConfig; + @SuppressWarnings("unchecked") + public static void reloadConfigOptions(YamlConfiguration newConfig) { + configFile = newConfig; - messagesLanguage = checkLang(configFile.getString("settings.messagesLanguage","en")); - isPermissionCheckEnabled = configFile.getBoolean("permission.EnablePermissionCheck", false); - isForcedRegistrationEnabled = configFile.getBoolean("settings.registration.force", true); - isRegistrationEnabled = configFile.getBoolean("settings.registration.enabled", true); - isTeleportToSpawnEnabled = configFile.getBoolean("settings.restrictions.teleportUnAuthedToSpawn",false); - getWarnMessageInterval = configFile.getInt("settings.registration.messageInterval",5); - isSessionsEnabled = configFile.getBoolean("settings.sessions.enabled",false); - getSessionTimeout = configFile.getInt("settings.sessions.timeout",10); - getRegistrationTimeout = configFile.getInt("settings.restrictions.timeout",30); - isChatAllowed = configFile.getBoolean("settings.restrictions.allowChat",false); - getMaxNickLength = configFile.getInt("settings.restrictions.maxNicknameLength",20); - getMinNickLength = configFile.getInt("settings.restrictions.minNicknameLength",3); - getPasswordMinLen = configFile.getInt("settings.security.minPasswordLength",4); - getNickRegex = configFile.getString("settings.restrictions.allowedNicknameCharacters","[a-zA-Z0-9_?]*"); - isAllowRestrictedIp = configFile.getBoolean("settings.restrictions.AllowRestrictedUser",false); - getRestrictedIp = configFile.getStringList("settings.restrictions.AllowedRestrictedUser"); - isMovementAllowed = configFile.getBoolean("settings.restrictions.allowMovement",false); - getMovementRadius = configFile.getInt("settings.restrictions.allowedMovementRadius",100); - getJoinPermissions = configFile.getStringList("GroupOptions.Permissions.PermissionsOnJoin"); - isKickOnWrongPasswordEnabled = configFile.getBoolean("settings.restrictions.kickOnWrongPassword",false); - isKickNonRegisteredEnabled = configFile.getBoolean("settings.restrictions.kickNonRegistered",false); - isForceSingleSessionEnabled = configFile.getBoolean("settings.restrictions.ForceSingleSession",true); - isForceSpawnLocOnJoinEnabled = configFile.getBoolean("settings.restrictions.ForceSpawnLocOnJoinEnabled",false); - isSaveQuitLocationEnabled = configFile.getBoolean("settings.restrictions.SaveQuitLocation",false); - isForceSurvivalModeEnabled = configFile.getBoolean("settings.GameMode.ForceSurvivalMode",false); - isResetInventoryIfCreative = configFile.getBoolean("settings.GameMode.ResetInventoryIfCreative",false); - getmaxRegPerIp = configFile.getInt("settings.restrictions.maxRegPerIp",1); + messagesLanguage = checkLang(configFile.getString( + "settings.messagesLanguage", "en")); + isPermissionCheckEnabled = configFile.getBoolean( + "permission.EnablePermissionCheck", false); + isForcedRegistrationEnabled = configFile.getBoolean( + "settings.registration.force", true); + isRegistrationEnabled = configFile.getBoolean( + "settings.registration.enabled", true); + isTeleportToSpawnEnabled = configFile.getBoolean( + "settings.restrictions.teleportUnAuthedToSpawn", false); + getWarnMessageInterval = configFile.getInt( + "settings.registration.messageInterval", 5); + isSessionsEnabled = configFile.getBoolean("settings.sessions.enabled", + false); + getSessionTimeout = configFile.getInt("settings.sessions.timeout", 10); + getRegistrationTimeout = configFile.getInt( + "settings.restrictions.timeout", 30); + isChatAllowed = configFile.getBoolean( + "settings.restrictions.allowChat", false); + getMaxNickLength = configFile.getInt( + "settings.restrictions.maxNicknameLength", 20); + getMinNickLength = configFile.getInt( + "settings.restrictions.minNicknameLength", 3); + getPasswordMinLen = configFile.getInt( + "settings.security.minPasswordLength", 4); + getNickRegex = configFile.getString( + "settings.restrictions.allowedNicknameCharacters", + "[a-zA-Z0-9_?]*"); + isAllowRestrictedIp = configFile.getBoolean( + "settings.restrictions.AllowRestrictedUser", false); + getRestrictedIp = configFile + .getStringList("settings.restrictions.AllowedRestrictedUser"); + isMovementAllowed = configFile.getBoolean( + "settings.restrictions.allowMovement", false); + getMovementRadius = configFile.getInt( + "settings.restrictions.allowedMovementRadius", 100); + getJoinPermissions = configFile + .getStringList("GroupOptions.Permissions.PermissionsOnJoin"); + isKickOnWrongPasswordEnabled = configFile.getBoolean( + "settings.restrictions.kickOnWrongPassword", false); + isKickNonRegisteredEnabled = configFile.getBoolean( + "settings.restrictions.kickNonRegistered", false); + isForceSingleSessionEnabled = configFile.getBoolean( + "settings.restrictions.ForceSingleSession", true); + isForceSpawnLocOnJoinEnabled = configFile.getBoolean( + "settings.restrictions.ForceSpawnLocOnJoinEnabled", false); + isSaveQuitLocationEnabled = configFile.getBoolean( + "settings.restrictions.SaveQuitLocation", false); + isForceSurvivalModeEnabled = configFile.getBoolean( + "settings.GameMode.ForceSurvivalMode", false); + isResetInventoryIfCreative = configFile.getBoolean( + "settings.GameMode.ResetInventoryIfCreative", false); + getmaxRegPerIp = configFile.getInt("settings.restrictions.maxRegPerIp", + 1); getPasswordHash = getPasswordHash(); - getUnloggedinGroup = configFile.getString("settings.security.unLoggedinGroup","unLoggedInGroup"); + getUnloggedinGroup = configFile.getString( + "settings.security.unLoggedinGroup", "unLoggedInGroup"); getDataSource = getDataSource(); - isCachingEnabled = configFile.getBoolean("DataSource.caching",true); - getMySQLHost = configFile.getString("DataSource.mySQLHost","127.0.0.1"); - getMySQLPort = configFile.getString("DataSource.mySQLPort","3306"); - getMySQLUsername = configFile.getString("DataSource.mySQLUsername","authme"); - getMySQLPassword = configFile.getString("DataSource.mySQLPassword","12345"); - getMySQLDatabase = configFile.getString("DataSource.mySQLDatabase","authme"); - getMySQLTablename = configFile.getString("DataSource.mySQLTablename","authme"); - getMySQLColumnEmail = configFile.getString("DataSource.mySQLColumnEmail","email"); - getMySQLColumnName = configFile.getString("DataSource.mySQLColumnName","username"); - getMySQLColumnPassword = configFile.getString("DataSource.mySQLColumnPassword","password"); - getMySQLColumnIp = configFile.getString("DataSource.mySQLColumnIp","ip"); - getMySQLColumnLastLogin = configFile.getString("DataSource.mySQLColumnLastLogin","lastlogin"); - getMySQLlastlocX = configFile.getString("DataSource.mySQLlastlocX","x"); - getMySQLlastlocY = configFile.getString("DataSource.mySQLlastlocY","y"); - getMySQLlastlocZ = configFile.getString("DataSource.mySQLlastlocZ","z"); - getMySQLlastlocWorld = configFile.getString("DataSource.mySQLlastlocWorld", "world"); - getMySQLColumnSalt = configFile.getString("ExternalBoardOptions.mySQLColumnSalt",""); - getMySQLColumnGroup = configFile.getString("ExternalBoardOptions.mySQLColumnGroup",""); - getNonActivatedGroup = configFile.getInt("ExternalBoardOptions.nonActivedUserGroup", -1); - unRegisteredGroup = configFile.getString("GroupOptions.UnregisteredPlayerGroup",""); - getUnrestrictedName = configFile.getStringList("settings.unrestrictions.UnrestrictedName"); - getRegisteredGroup = configFile.getString("GroupOptions.RegisteredPlayerGroup",""); - getEnablePasswordVerifier = configFile.getBoolean("settings.restrictions.enablePasswordVerifier" , true); - protectInventoryBeforeLogInEnabled = configFile.getBoolean("settings.restrictions.ProtectInventoryBeforeLogIn", true); - passwordMaxLength = configFile.getInt("settings.security.passwordMaxLength", 20); - isBackupActivated = configFile.getBoolean("BackupSystem.ActivateBackup",false); - isBackupOnStart = configFile.getBoolean("BackupSystem.OnServerStart",false); - isBackupOnStop = configFile.getBoolean("BackupSystem.OnServeStop",false); - backupWindowsPath = configFile.getString("BackupSystem.MysqlWindowsPath", "C:\\Program Files\\MySQL\\MySQL Server 5.1\\"); - enablePasspartu = configFile.getBoolean("Passpartu.enablePasspartu",false); - isStopEnabled = configFile.getBoolean("Security.SQLProblem.stopServer", true); - reloadSupport = configFile.getBoolean("Security.ReloadCommand.useReloadCommandSupport", true); - allowCommands = (List) configFile.getList("settings.restrictions.allowCommands"); + isCachingEnabled = configFile.getBoolean("DataSource.caching", true); + getMySQLHost = configFile + .getString("DataSource.mySQLHost", "127.0.0.1"); + getMySQLPort = configFile.getString("DataSource.mySQLPort", "3306"); + getMySQLUsername = configFile.getString("DataSource.mySQLUsername", + "authme"); + getMySQLPassword = configFile.getString("DataSource.mySQLPassword", + "12345"); + getMySQLDatabase = configFile.getString("DataSource.mySQLDatabase", + "authme"); + getMySQLTablename = configFile.getString("DataSource.mySQLTablename", + "authme"); + getMySQLColumnEmail = configFile.getString( + "DataSource.mySQLColumnEmail", "email"); + getMySQLColumnName = configFile.getString("DataSource.mySQLColumnName", + "username"); + getMySQLColumnPassword = configFile.getString( + "DataSource.mySQLColumnPassword", "password"); + getMySQLColumnIp = configFile.getString("DataSource.mySQLColumnIp", + "ip"); + getMySQLColumnLastLogin = configFile.getString( + "DataSource.mySQLColumnLastLogin", "lastlogin"); + getMySQLlastlocX = configFile + .getString("DataSource.mySQLlastlocX", "x"); + getMySQLlastlocY = configFile + .getString("DataSource.mySQLlastlocY", "y"); + getMySQLlastlocZ = configFile + .getString("DataSource.mySQLlastlocZ", "z"); + getMySQLlastlocWorld = configFile.getString( + "DataSource.mySQLlastlocWorld", "world"); + getMySQLColumnSalt = configFile.getString( + "ExternalBoardOptions.mySQLColumnSalt", ""); + getMySQLColumnGroup = configFile.getString( + "ExternalBoardOptions.mySQLColumnGroup", ""); + getNonActivatedGroup = configFile.getInt( + "ExternalBoardOptions.nonActivedUserGroup", -1); + unRegisteredGroup = configFile.getString( + "GroupOptions.UnregisteredPlayerGroup", ""); + getUnrestrictedName = configFile + .getStringList("settings.unrestrictions.UnrestrictedName"); + getRegisteredGroup = configFile.getString( + "GroupOptions.RegisteredPlayerGroup", ""); + getEnablePasswordVerifier = configFile.getBoolean( + "settings.restrictions.enablePasswordVerifier", true); + protectInventoryBeforeLogInEnabled = configFile.getBoolean( + "settings.restrictions.ProtectInventoryBeforeLogIn", true); + passwordMaxLength = configFile.getInt( + "settings.security.passwordMaxLength", 20); + isBackupActivated = configFile.getBoolean( + "BackupSystem.ActivateBackup", false); + isBackupOnStart = configFile.getBoolean("BackupSystem.OnServerStart", + false); + isBackupOnStop = configFile.getBoolean("BackupSystem.OnServeStop", + false); + backupWindowsPath = configFile.getString( + "BackupSystem.MysqlWindowsPath", + "C:\\Program Files\\MySQL\\MySQL Server 5.1\\"); + enablePasspartu = configFile.getBoolean("Passpartu.enablePasspartu", + false); + isStopEnabled = configFile.getBoolean("Security.SQLProblem.stopServer", + true); + reloadSupport = configFile.getBoolean( + "Security.ReloadCommand.useReloadCommandSupport", true); + allowCommands = (List) configFile + .getList("settings.restrictions.allowCommands"); if (configFile.contains("allowCommands")) { - if (!allowCommands.contains("/login")) - allowCommands.add("/login"); - if (!allowCommands.contains("/register")) - allowCommands.add("/register"); - if (!allowCommands.contains("/l")) - allowCommands.add("/l"); - if (!allowCommands.contains("/reg")) - allowCommands.add("/reg"); - if (!allowCommands.contains("/passpartu")) - allowCommands.add("/passpartu"); - if (!allowCommands.contains("/email")) - allowCommands.add("/email"); - if(!allowCommands.contains("/captcha")) - allowCommands.add("/captcha"); + if (!allowCommands.contains("/login")) allowCommands.add("/login"); + if (!allowCommands.contains("/register")) allowCommands + .add("/register"); + if (!allowCommands.contains("/l")) allowCommands.add("/l"); + if (!allowCommands.contains("/reg")) allowCommands.add("/reg"); + if (!allowCommands.contains("/passpartu")) allowCommands + .add("/passpartu"); + if (!allowCommands.contains("/email")) allowCommands.add("/email"); + if (!allowCommands.contains("/captcha")) allowCommands + .add("/captcha"); } - rakamakUsers = configFile.getString("Converter.Rakamak.fileName", "users.rak"); - rakamakUsersIp = configFile.getString("Converter.Rakamak.ipFileName", "UsersIp.rak"); + rakamakUsers = configFile.getString("Converter.Rakamak.fileName", + "users.rak"); + rakamakUsersIp = configFile.getString("Converter.Rakamak.ipFileName", + "UsersIp.rak"); rakamakUseIp = configFile.getBoolean("Converter.Rakamak.useIp", false); - noConsoleSpam = configFile.getBoolean("Security.console.noConsoleSpam", false); - removePassword = configFile.getBoolean("Security.console.removePassword", true); + noConsoleSpam = configFile.getBoolean("Security.console.noConsoleSpam", + false); + removePassword = configFile.getBoolean( + "Security.console.removePassword", true); getmailAccount = configFile.getString("Email.mailAccount", ""); getmailPassword = configFile.getString("Email.mailPassword", ""); getmailSMTP = configFile.getString("Email.mailSMTP", "smtp.gmail.com"); getMailPort = configFile.getInt("Email.mailPort", 465); - getRecoveryPassLength = configFile.getInt("Email.RecoveryPasswordLength", 8); - getMySQLOtherUsernameColumn = (List) configFile.getList("ExternalBoardOptions.mySQLOtherUsernameColumns", new ArrayList()); - displayOtherAccounts = configFile.getBoolean("settings.restrictions.displayOtherAccounts", true); - getMySQLColumnId = configFile.getString("DataSource.mySQLColumnId", "id"); + getRecoveryPassLength = configFile.getInt( + "Email.RecoveryPasswordLength", 8); + getMySQLOtherUsernameColumn = (List) configFile.getList( + "ExternalBoardOptions.mySQLOtherUsernameColumns", + new ArrayList()); + displayOtherAccounts = configFile.getBoolean( + "settings.restrictions.displayOtherAccounts", true); + getMySQLColumnId = configFile.getString("DataSource.mySQLColumnId", + "id"); getmailSenderName = configFile.getString("Email.mailSenderName", ""); - useCaptcha = configFile.getBoolean("Security.captcha.useCaptcha", false); + useCaptcha = configFile + .getBoolean("Security.captcha.useCaptcha", false); maxLoginTry = configFile.getInt("Security.captcha.maxLoginTry", 5); captchaLength = configFile.getInt("Security.captcha.captchaLength", 5); - getMailSubject = configFile.getString("Email.mailSubject", "Your new AuthMe Password"); - getMailText = configFile.getString("Email.mailText", "Dear ,

This is your new AuthMe password for the server

:



Do not forget to change password after login!
/changepassword newPassword"); - emailRegistration = configFile.getBoolean("settings.registration.enableEmailRegistrationSystem", false); - saltLength = configFile.getInt("settings.security.doubleMD5SaltLength", 8); + getMailSubject = configFile.getString("Email.mailSubject", + "Your new AuthMe Password"); + getMailText = configFile + .getString( + "Email.mailText", + "Dear ,

This is your new AuthMe password for the server

:



Do not forget to change password after login!
/changepassword newPassword"); + emailRegistration = configFile.getBoolean( + "settings.registration.enableEmailRegistrationSystem", false); + saltLength = configFile.getInt("settings.security.doubleMD5SaltLength", + 8); getmaxRegPerEmail = configFile.getInt("Email.maxRegPerEmail", 1); multiverse = configFile.getBoolean("Hooks.multiverse", true); chestshop = configFile.getBoolean("Hooks.chestshop", true); notifications = configFile.getBoolean("Hooks.notifications", true); bungee = configFile.getBoolean("Hooks.bungeecord", false); - getForcedWorlds = (List) configFile.getList("settings.restrictions.ForceSpawnOnTheseWorlds"); - 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); - disableSocialSpy = configFile.getBoolean("Hooks.disableSocialSpy", true); - bCryptLog2Rounds = configFile.getInt("ExternalBoardOptions.bCryptLog2Round", 10); - forceOnlyAfterLogin = configFile.getBoolean("settings.GameMode.ForceOnlyAfterLogin", false); - useEssentialsMotd = configFile.getBoolean("Hooks.useEssentialsMotd", false); + getForcedWorlds = (List) configFile + .getList("settings.restrictions.ForceSpawnOnTheseWorlds"); + 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); + disableSocialSpy = configFile + .getBoolean("Hooks.disableSocialSpy", true); + bCryptLog2Rounds = configFile.getInt( + "ExternalBoardOptions.bCryptLog2Round", 10); + forceOnlyAfterLogin = configFile.getBoolean( + "settings.GameMode.ForceOnlyAfterLogin", false); + useEssentialsMotd = configFile.getBoolean("Hooks.useEssentialsMotd", + false); usePurge = configFile.getBoolean("Purge.useAutoPurge", false); purgeDelay = configFile.getInt("Purge.daysBeforeRemovePlayer", 60); purgePlayerDat = configFile.getBoolean("Purge.removePlayerDat", false); - purgeEssentialsFile = configFile.getBoolean("Purge.removeEssentialsFile", false); + purgeEssentialsFile = configFile.getBoolean( + "Purge.removeEssentialsFile", false); defaultWorld = configFile.getString("Purge.defaultWorld", "world"); - getPhpbbPrefix = configFile.getString("ExternalBoardOptions.phpbbTablePrefix", "phpbb_"); - getPhpbbGroup = configFile.getInt("ExternalBoardOptions.phpbbActivatedGroupId", 2); - supportOldPassword = configFile.getBoolean("settings.security.supportOldPasswordHash", false); - getWordPressPrefix = configFile.getString("ExternalBoardOptions.wordpressTablePrefix", "wp_"); - purgeLimitedCreative = configFile.getBoolean("Purge.removeLimitedCreativesInventories", false); - purgeAntiXray = configFile.getBoolean("Purge.removeAntiXRayFile", false); - //purgePermissions = configFile.getBoolean("Purge.removePermissions", false); - enableProtection = configFile.getBoolean("Protection.enableProtection", false); + getPhpbbPrefix = configFile.getString( + "ExternalBoardOptions.phpbbTablePrefix", "phpbb_"); + getPhpbbGroup = configFile.getInt( + "ExternalBoardOptions.phpbbActivatedGroupId", 2); + supportOldPassword = configFile.getBoolean( + "settings.security.supportOldPasswordHash", false); + getWordPressPrefix = configFile.getString( + "ExternalBoardOptions.wordpressTablePrefix", "wp_"); + purgeLimitedCreative = configFile.getBoolean( + "Purge.removeLimitedCreativesInventories", false); + purgeAntiXray = configFile + .getBoolean("Purge.removeAntiXRayFile", false); + // purgePermissions = configFile.getBoolean("Purge.removePermissions", + // false); + enableProtection = configFile.getBoolean("Protection.enableProtection", + false); countries = (List) configFile.getList("Protection.countries"); - enableAntiBot = configFile.getBoolean("Protection.enableAntiBot", false); - antiBotSensibility = configFile.getInt("Protection.antiBotSensibility", 5); + enableAntiBot = configFile + .getBoolean("Protection.enableAntiBot", false); + antiBotSensibility = configFile.getInt("Protection.antiBotSensibility", + 5); antiBotDuration = configFile.getInt("Protection.antiBotDuration", 10); - forceCommands = (List) configFile.getList("settings.forceCommands", new ArrayList()); - forceCommandsAsConsole = (List) configFile.getList("settings.forceCommandsAsConsole", new ArrayList()); + forceCommands = (List) configFile.getList( + "settings.forceCommands", new ArrayList()); + forceCommandsAsConsole = (List) configFile.getList( + "settings.forceCommandsAsConsole", new ArrayList()); recallEmail = configFile.getBoolean("Email.recallPlayers", false); delayRecall = configFile.getInt("Email.delayRecall", 5); - useWelcomeMessage = configFile.getBoolean("settings.useWelcomeMessage", true); - unsafePasswords = (List) configFile.getList("settings.security.unsafePasswords", new ArrayList()); - countriesBlacklist = (List) configFile.getList("Protection.countriesBlacklist", new ArrayList()); - broadcastWelcomeMessage = configFile.getBoolean("settings.broadcastWelcomeMessage", false); - forceRegKick = configFile.getBoolean("settings.registration.forceKickAfterRegister", false); - forceRegLogin = configFile.getBoolean("settings.registration.forceLoginAfterRegister", false); - getMySQLColumnLogged = configFile.getString("DataSource.mySQLColumnLogged","isLogged"); - spawnPriority = configFile.getString("settings.restrictions.spawnPriority", "authme,essentials,multiverse,default"); - getMaxLoginPerIp = configFile.getInt("settings.restrictions.maxLoginPerIp", 0); - getMaxJoinPerIp = configFile.getInt("settings.restrictions.maxJoinPerIp", 0); - checkVeryGames = configFile.getBoolean("VeryGames.enableIpCheck", false); - delayJoinMessage = configFile.getBoolean("settings.delayJoinMessage", false); - noTeleport = configFile.getBoolean("settings.restrictions.noTeleport", false); - crazyloginFileName = configFile.getString("Converter.CrazyLogin.fileName", "accounts.db"); - getPassRegex = configFile.getString("settings.restrictions.allowedPasswordCharacters","[a-zA-Z0-9_?!@+&-]*"); - applyBlindEffect = configFile.getBoolean("settings.applyBlindEffect", false); + useWelcomeMessage = configFile.getBoolean("settings.useWelcomeMessage", + true); + unsafePasswords = (List) configFile.getList( + "settings.security.unsafePasswords", new ArrayList()); + countriesBlacklist = (List) configFile.getList( + "Protection.countriesBlacklist", new ArrayList()); + broadcastWelcomeMessage = configFile.getBoolean( + "settings.broadcastWelcomeMessage", false); + forceRegKick = configFile.getBoolean( + "settings.registration.forceKickAfterRegister", false); + forceRegLogin = configFile.getBoolean( + "settings.registration.forceLoginAfterRegister", false); + getMySQLColumnLogged = configFile.getString( + "DataSource.mySQLColumnLogged", "isLogged"); + spawnPriority = configFile.getString( + "settings.restrictions.spawnPriority", + "authme,essentials,multiverse,default"); + getMaxLoginPerIp = configFile.getInt( + "settings.restrictions.maxLoginPerIp", 0); + getMaxJoinPerIp = configFile.getInt( + "settings.restrictions.maxJoinPerIp", 0); + checkVeryGames = configFile + .getBoolean("VeryGames.enableIpCheck", false); + delayJoinMessage = configFile.getBoolean("settings.delayJoinMessage", + false); + noTeleport = configFile.getBoolean("settings.restrictions.noTeleport", + false); + crazyloginFileName = configFile.getString( + "Converter.CrazyLogin.fileName", "accounts.db"); + getPassRegex = configFile.getString( + "settings.restrictions.allowedPasswordCharacters", + "[a-zA-Z0-9_?!@+&-]*"); + applyBlindEffect = configFile.getBoolean("settings.applyBlindEffect", + false); emailBlacklist = configFile.getStringList("Email.emailBlacklisted"); // Reload the welcome message getWelcomeMessage(AuthMe.getInstance()); - -} - public void mergeConfig() { - boolean changes = false; - if(contains("Xenoforo.predefinedSalt")) - set("Xenoforo.predefinedSalt", null); - if(configFile.getString("settings.security.passwordHash","SHA256").toUpperCase().equals("XFSHA1") || configFile.getString("settings.security.passwordHash","SHA256").toUpperCase().equals("XFSHA256")) - set("settings.security.passwordHash", "XENFORO"); - if(!contains("Protection.enableProtection")) { - set("Protection.enableProtection", false); - changes = true; - } - if(!contains("Protection.countries")) { - countries = new ArrayList(); - countries.add("US"); - countries.add("GB"); - set("Protection.countries", countries); - changes = true; - } - if(!contains("Protection.enableAntiBot")) { - set("Protection.enableAntiBot", false); - changes = true; - } - if(!contains("Protection.antiBotSensibility")) { - set("Protection.antiBotSensibility", 5); - changes = true; - } - if(!contains("Protection.antiBotDuration")) { - set("Protection.antiBotDuration", 10); - changes = true; - } - if(!contains("settings.forceCommands")) { - set("settings.forceCommands", new ArrayList()); - changes = true; - } - if(!contains("settings.forceCommandsAsConsole")) { - set("settings.forceCommandsAsConsole", new ArrayList()); - changes = true; - } - if(!contains("Email.recallPlayers")) { - set("Email.recallPlayers", false); - changes = true; - } - if(!contains("Email.delayRecall")) { - set("Email.delayRecall", 5); - changes = true; - } - if(!contains("settings.useWelcomeMessage")) { - set("settings.useWelcomeMessage", true); - changes = true; - } - if(!contains("settings.security.unsafePasswords")) { - List str = new ArrayList(); - str.add("123456"); - str.add("password"); - set("settings.security.unsafePasswords", str); - changes = true; - } - if(!contains("Protection.countriesBlacklist")) { - countriesBlacklist = new ArrayList(); - countriesBlacklist.add("A1"); - set("Protection.countriesBlacklist", countriesBlacklist); - changes = true; - } - if(!contains("settings.broadcastWelcomeMessage")) { - set("settings.broadcastWelcomeMessage", false); - changes = true; - } - if(!contains("settings.registration.forceKickAfterRegister")) { - set("settings.registration.forceKickAfterRegister", false); - changes = true; - } - if(!contains("settings.registration.forceLoginAfterRegister")) { - set("settings.registration.forceLoginAfterRegister", false); - changes = true; - } - if(!contains("DataSource.mySQLColumnLogged")) { - set("DataSource.mySQLColumnLogged", "isLogged"); - changes = true; - } - if(!contains("settings.restrictions.spawnPriority")) { - set("settings.restrictions.spawnPriority", "authme,essentials,multiverse,default"); - changes = true; - } - if(!contains("settings.restrictions.maxLoginPerIp")) { - set("settings.restrictions.maxLoginPerIp", 0); - changes = true; - } - if(!contains("settings.restrictions.maxJoinPerIp")) { - set("settings.restrictions.maxJoinPerIp", 0); - changes = true; - } - if(!contains("VeryGames.enableIpCheck")) { - set("VeryGames.enableIpCheck", false); - changes = true; - } - if(getString("settings.restrictions.allowedNicknameCharacters").equals("[a-zA-Z0-9_?]*")) - set("settings.restrictions.allowedNicknameCharacters", "[a-zA-Z0-9_]*"); - if(!contains("settings.delayJoinMessage")) { - set("settings.delayJoinMessage", false); - changes = true; - } - if(!contains("settings.restrictions.noTeleport")) { - set("settings.restrictions.noTeleport", false); - changes = true; - } - if(contains("Converter.Rakamak.newPasswordHash")) - set("Converter.Rakamak.newPasswordHash", null); - if(!contains("Converter.CrazyLogin.fileName")) { - set("Converter.CrazyLogin.fileName", "accounts.db"); - changes = true; - } - if(!contains("settings.restrictions.allowedPasswordCharacters")) { - set("settings.restrictions.allowedPasswordCharacters", "[a-zA-Z0-9_?!@+&-]*"); - changes = true; - } - if(!contains("settings.applyBlindEffect")) { - set("settings.applyBlindEffect", false); - changes = true; - } - if(!contains("Email.emailBlacklisted")) { - set("Email.emailBlacklisted", new ArrayList()); - changes = true; - } - if (contains("Performances.useMultiThreading")) - set("Performances.useMultiThreading", null); + } - if (changes) { - plugin.getLogger().warning("Merge new Config Options - I'm not an error, please don't report me"); - plugin.getLogger().warning("Please check your config.yml file for new configs!"); - } - plugin.saveConfig(); + public void mergeConfig() { + boolean changes = false; + if (contains("Xenoforo.predefinedSalt")) set("Xenoforo.predefinedSalt", + null); + if (configFile.getString("settings.security.passwordHash", "SHA256") + .toUpperCase().equals("XFSHA1") + || configFile + .getString("settings.security.passwordHash", "SHA256") + .toUpperCase().equals("XFSHA256")) set( + "settings.security.passwordHash", "XENFORO"); + if (!contains("Protection.enableProtection")) { + set("Protection.enableProtection", false); + changes = true; + } + if (!contains("Protection.countries")) { + countries = new ArrayList(); + countries.add("US"); + countries.add("GB"); + set("Protection.countries", countries); + changes = true; + } + if (!contains("Protection.enableAntiBot")) { + set("Protection.enableAntiBot", false); + changes = true; + } + if (!contains("Protection.antiBotSensibility")) { + set("Protection.antiBotSensibility", 5); + changes = true; + } + if (!contains("Protection.antiBotDuration")) { + set("Protection.antiBotDuration", 10); + changes = true; + } + if (!contains("settings.forceCommands")) { + set("settings.forceCommands", new ArrayList()); + changes = true; + } + if (!contains("settings.forceCommandsAsConsole")) { + set("settings.forceCommandsAsConsole", new ArrayList()); + changes = true; + } + if (!contains("Email.recallPlayers")) { + set("Email.recallPlayers", false); + changes = true; + } + if (!contains("Email.delayRecall")) { + set("Email.delayRecall", 5); + changes = true; + } + if (!contains("settings.useWelcomeMessage")) { + set("settings.useWelcomeMessage", true); + changes = true; + } + if (!contains("settings.security.unsafePasswords")) { + List str = new ArrayList(); + str.add("123456"); + str.add("password"); + set("settings.security.unsafePasswords", str); + changes = true; + } + if (!contains("Protection.countriesBlacklist")) { + countriesBlacklist = new ArrayList(); + countriesBlacklist.add("A1"); + set("Protection.countriesBlacklist", countriesBlacklist); + changes = true; + } + if (!contains("settings.broadcastWelcomeMessage")) { + set("settings.broadcastWelcomeMessage", false); + changes = true; + } + if (!contains("settings.registration.forceKickAfterRegister")) { + set("settings.registration.forceKickAfterRegister", false); + changes = true; + } + if (!contains("settings.registration.forceLoginAfterRegister")) { + set("settings.registration.forceLoginAfterRegister", false); + changes = true; + } + if (!contains("DataSource.mySQLColumnLogged")) { + set("DataSource.mySQLColumnLogged", "isLogged"); + changes = true; + } + if (!contains("settings.restrictions.spawnPriority")) { + set("settings.restrictions.spawnPriority", + "authme,essentials,multiverse,default"); + changes = true; + } + if (!contains("settings.restrictions.maxLoginPerIp")) { + set("settings.restrictions.maxLoginPerIp", 0); + changes = true; + } + if (!contains("settings.restrictions.maxJoinPerIp")) { + set("settings.restrictions.maxJoinPerIp", 0); + changes = true; + } + if (!contains("VeryGames.enableIpCheck")) { + set("VeryGames.enableIpCheck", false); + changes = true; + } + if (getString("settings.restrictions.allowedNicknameCharacters") + .equals("[a-zA-Z0-9_?]*")) set( + "settings.restrictions.allowedNicknameCharacters", + "[a-zA-Z0-9_]*"); + if (!contains("settings.delayJoinMessage")) { + set("settings.delayJoinMessage", false); + changes = true; + } + if (!contains("settings.restrictions.noTeleport")) { + set("settings.restrictions.noTeleport", false); + changes = true; + } + if (contains("Converter.Rakamak.newPasswordHash")) set( + "Converter.Rakamak.newPasswordHash", null); + if (!contains("Converter.CrazyLogin.fileName")) { + set("Converter.CrazyLogin.fileName", "accounts.db"); + changes = true; + } + if (!contains("settings.restrictions.allowedPasswordCharacters")) { + set("settings.restrictions.allowedPasswordCharacters", + "[a-zA-Z0-9_?!@+&-]*"); + changes = true; + } + if (!contains("settings.applyBlindEffect")) { + set("settings.applyBlindEffect", false); + changes = true; + } + if (!contains("Email.emailBlacklisted")) { + set("Email.emailBlacklisted", new ArrayList()); + changes = true; + } + if (contains("Performances.useMultiThreading")) set( + "Performances.useMultiThreading", null); - return; - } + if (changes) { + plugin.getLogger() + .warning( + "Merge new Config Options - I'm not an error, please don't report me"); + plugin.getLogger().warning( + "Please check your config.yml file for new configs!"); + } + plugin.saveConfig(); + + return; + } private static HashAlgorithm getPasswordHash() { String key = "settings.security.passwordHash"; try { - return HashAlgorithm.valueOf(configFile.getString(key,"SHA256").toUpperCase()); + return HashAlgorithm.valueOf(configFile.getString(key, "SHA256") + .toUpperCase()); } catch (IllegalArgumentException ex) { - ConsoleLogger.showError("Unknown Hash Algorithm; defaulting to SHA256"); + ConsoleLogger + .showError("Unknown Hash Algorithm; defaulting to SHA256"); return HashAlgorithm.SHA256; } } @@ -566,45 +819,47 @@ public static void reloadConfigOptions(YamlConfiguration newConfig) { private static DataSourceType getDataSource() { String key = "DataSource.backend"; try { - return DataSource.DataSourceType.valueOf(configFile.getString(key).toUpperCase()); + return DataSource.DataSourceType.valueOf(configFile.getString(key) + .toUpperCase()); } catch (IllegalArgumentException ex) { - ConsoleLogger.showError("Unknown database backend; defaulting to file database"); + ConsoleLogger + .showError("Unknown database backend; defaulting to file database"); return DataSource.DataSourceType.FILE; } } /** - * Config option for setting and check restricted user by - * username;ip , return false if ip and name doesnt amtch with - * player that join the server, so player has a restricted access - */ + * Config option for setting and check restricted user by username;ip , + * return false if ip and name doesnt amtch with player that join the + * server, so player has a restricted access + */ public static Boolean getRestrictedIp(String name, String ip) { Iterator iter = getRestrictedIp.iterator(); Boolean trueonce = false; Boolean namefound = false; - while (iter.hasNext()) { - String[] args = iter.next().split(";"); - String testname = args[0]; - String testip = args[1]; - if(testname.equalsIgnoreCase(name) ) { - namefound = true; - if(testip.equalsIgnoreCase(ip)) { - trueonce = true; - }; - } - } - if ( namefound == false){ - return true; - } - else { - if ( trueonce == true ){ - return true; - } else { - return false; - } - } -} + while (iter.hasNext()) { + String[] args = iter.next().split(";"); + String testname = args[0]; + String testip = args[1]; + if (testname.equalsIgnoreCase(name)) { + namefound = true; + if (testip.equalsIgnoreCase(ip)) { + trueonce = true; + } + ; + } + } + if (namefound == false) { + return true; + } else { + if (trueonce == true) { + return true; + } else { + return false; + } + } + } /** * Loads the configuration from disk @@ -651,11 +906,12 @@ public static void reloadConfigOptions(YamlConfiguration newConfig) { /** * Loads a file from the plugin jar and sets as default * - * @param filename The filename to open + * @param filename + * The filename to open */ public final void loadDefaults(String filename) { InputStream stream = plugin.getResource(filename); - if(stream == null) return; + if (stream == null) return; setDefaults(YamlConfiguration.loadConfiguration(stream)); } @@ -696,61 +952,61 @@ public static void reloadConfigOptions(YamlConfiguration newConfig) { } public static String checkLang(String lang) { - for(messagesLang language: messagesLang.values()) { - if(lang.toLowerCase().contains(language.toString())) { - ConsoleLogger.info("Set Language: "+lang); + for (messagesLang language : messagesLang.values()) { + if (lang.toLowerCase().contains(language.toString())) { + ConsoleLogger.info("Set Language: " + lang); return lang; - } + } } ConsoleLogger.info("Set Default Language: En "); return "en"; } public static void switchAntiBotMod(boolean mode) { - if (mode) - isKickNonRegisteredEnabled = true; - else - isKickNonRegisteredEnabled = configFile.getBoolean("settings.restrictions.kickNonRegistered",false); + if (mode) isKickNonRegisteredEnabled = true; + else isKickNonRegisteredEnabled = configFile.getBoolean( + "settings.restrictions.kickNonRegistered", false); } private static void getWelcomeMessage(AuthMe plugin) { - welcomeMsg = new ArrayList(); - if(!useWelcomeMessage) { - return; - } - if (!(new File(plugin.getDataFolder() + File.separator + "welcome.txt").exists())) { + welcomeMsg = new ArrayList(); + if (!useWelcomeMessage) { + return; + } + if (!(new File(plugin.getDataFolder() + File.separator + "welcome.txt") + .exists())) { try { - FileWriter fw = new FileWriter(plugin.getDataFolder() + File.separator + "welcome.txt", true); - BufferedWriter w = new BufferedWriter(fw); - w.write("Welcome {PLAYER} on {SERVER} server"); - w.newLine(); - w.write("This server use AuthMe protection!"); - w.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - try { - FileReader fr = new FileReader(plugin.getDataFolder() + File.separator + "welcome.txt"); - BufferedReader br = new BufferedReader(fr); - String line = ""; - while((line = br.readLine()) != null) { - welcomeMsg.add(line); - } - br.close(); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } + FileWriter fw = new FileWriter(plugin.getDataFolder() + + File.separator + "welcome.txt", true); + BufferedWriter w = new BufferedWriter(fw); + w.write("Welcome {PLAYER} on {SERVER} server"); + w.newLine(); + w.write("This server use AuthMe protection!"); + w.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + try { + FileReader fr = new FileReader(plugin.getDataFolder() + + File.separator + "welcome.txt"); + BufferedReader br = new BufferedReader(fr); + String line = ""; + while ((line = br.readLine()) != null) { + welcomeMsg.add(line); + } + br.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } } - + public static boolean isEmailCorrect(String email) { boolean correct = true; - if (!email.contains("@")) - correct = false; - if (!email.equalsIgnoreCase("your@email.com")) - correct = false; + if (!email.contains("@")) correct = false; + if (!email.equalsIgnoreCase("your@email.com")) correct = false; String emailDomain = email.split("@")[1]; for (String domain : emailBlacklist) { if (domain.equalsIgnoreCase(emailDomain)) { @@ -762,6 +1018,6 @@ public static void reloadConfigOptions(YamlConfiguration newConfig) { } public enum messagesLang { - en, de, br, cz, pl, fr, uk, ru, hu, sk, es, fi, zhtw, zhhk, zhcn, lt, it, ko, pt, nl, gl + en, de, br, cz, pl, fr, uk, ru, hu, sk, es, fi, zhtw, zhhk, zhcn, lt, it, ko, pt, nl, gl } } diff --git a/src/main/java/fr/xephi/authme/settings/Spawn.java b/src/main/java/fr/xephi/authme/settings/Spawn.java index b346ce60..243a6b30 100644 --- a/src/main/java/fr/xephi/authme/settings/Spawn.java +++ b/src/main/java/fr/xephi/authme/settings/Spawn.java @@ -5,106 +5,118 @@ import org.bukkit.Bukkit; import org.bukkit.Location; /** -* -* @author Xephi59 -*/ + * + * @author Xephi59 + */ public class Spawn extends CustomConfiguration { - private static Spawn spawn; + private static Spawn spawn; - public Spawn() { - super(new File("./plugins/AuthMe/spawn.yml")); - spawn = this; - load(); - save(); - saveDefault(); - } + public Spawn() { + super(new File("./plugins/AuthMe/spawn.yml")); + spawn = this; + load(); + save(); + saveDefault(); + } - private void saveDefault() { - if (!contains("spawn")) { - set("spawn.world", ""); - set("spawn.x", ""); - set("spawn.y", ""); - set("spawn.z", ""); - set("spawn.yaw", ""); - set("spawn.pitch", ""); - save(); - } - if (!contains("firstspawn")) { - set("firstspawn.world", ""); - set("firstspawn.x", ""); - set("firstspawn.y", ""); - set("firstspawn.z", ""); - set("firstspawn.yaw", ""); - set("firstspawn.pitch", ""); - save(); - } - } + private void saveDefault() { + if (!contains("spawn")) { + set("spawn.world", ""); + set("spawn.x", ""); + set("spawn.y", ""); + set("spawn.z", ""); + set("spawn.yaw", ""); + set("spawn.pitch", ""); + save(); + } + if (!contains("firstspawn")) { + set("firstspawn.world", ""); + set("firstspawn.x", ""); + set("firstspawn.y", ""); + set("firstspawn.z", ""); + set("firstspawn.yaw", ""); + set("firstspawn.pitch", ""); + save(); + } + } - public static Spawn getInstance() { + public static Spawn getInstance() { if (spawn == null) { spawn = new Spawn(); - } + } return spawn; } - public boolean setSpawn(Location location) { - try { - set("spawn.world", location.getWorld().getName()); - set("spawn.x", location.getX()); - set("spawn.y", location.getY()); - set("spawn.z", location.getZ()); - set("spawn.yaw", location.getYaw()); - set("spawn.pitch", location.getPitch()); - save(); - return true; - } catch (NullPointerException npe) { - return false; - } - } + public boolean setSpawn(Location location) { + try { + set("spawn.world", location.getWorld().getName()); + set("spawn.x", location.getX()); + set("spawn.y", location.getY()); + set("spawn.z", location.getZ()); + set("spawn.yaw", location.getYaw()); + set("spawn.pitch", location.getPitch()); + save(); + return true; + } catch (NullPointerException npe) { + return false; + } + } - public boolean setFirstSpawn(Location location) { - try { - set("firstspawn.world", location.getWorld().getName()); - set("firstspawn.x", location.getX()); - set("firstspawn.y", location.getY()); - set("firstspawn.z", location.getZ()); - set("firstspawn.yaw", location.getYaw()); - set("firstspawn.pitch", location.getPitch()); - save(); - return true; - } catch (NullPointerException npe) { - return false; - } - } - - @Deprecated - public Location getLocation() { - return getSpawn(); - } - - public Location getSpawn() { - try { - if (this.getString("spawn.world").isEmpty() || this.getString("spawn.world") == "") return null; - Location location = new Location(Bukkit.getWorld(this.getString("spawn.world")), this.getDouble("spawn.x"), this.getDouble("spawn.y"), this.getDouble("spawn.z"), Float.parseFloat(this.getString("spawn.yaw")), Float.parseFloat(this.getString("spawn.pitch"))); - return location; - } catch (NullPointerException npe) { - return null; - } catch (NumberFormatException nfe) { - return null; - } - } - - public Location getFirstSpawn() { - try { - if (this.getString("firstspawn.world").isEmpty() || this.getString("firstspawn.world") == "") return null; - Location location = new Location(Bukkit.getWorld(this.getString("firstspawn.world")), this.getDouble("firstspawn.x"), this.getDouble("firstspawn.y"), this.getDouble("firstspawn.z"), Float.parseFloat(this.getString("firstspawn.yaw")), Float.parseFloat(this.getString("firstspawn.pitch"))); - return location; - } catch (NullPointerException npe) { - return null; - } catch (NumberFormatException nfe) { - return null; - } - } + public boolean setFirstSpawn(Location location) { + try { + set("firstspawn.world", location.getWorld().getName()); + set("firstspawn.x", location.getX()); + set("firstspawn.y", location.getY()); + set("firstspawn.z", location.getZ()); + set("firstspawn.yaw", location.getYaw()); + set("firstspawn.pitch", location.getPitch()); + save(); + return true; + } catch (NullPointerException npe) { + return false; + } + } + + @Deprecated + public Location getLocation() { + return getSpawn(); + } + + public Location getSpawn() { + try { + if (this.getString("spawn.world").isEmpty() + || this.getString("spawn.world") == "") return null; + Location location = new Location(Bukkit.getWorld(this + .getString("spawn.world")), this.getDouble("spawn.x"), + this.getDouble("spawn.y"), this.getDouble("spawn.z"), + Float.parseFloat(this.getString("spawn.yaw")), + Float.parseFloat(this.getString("spawn.pitch"))); + return location; + } catch (NullPointerException npe) { + return null; + } catch (NumberFormatException nfe) { + return null; + } + } + + public Location getFirstSpawn() { + try { + if (this.getString("firstspawn.world").isEmpty() + || this.getString("firstspawn.world") == "") return null; + Location location = new Location(Bukkit.getWorld(this + .getString("firstspawn.world")), + this.getDouble("firstspawn.x"), + this.getDouble("firstspawn.y"), + this.getDouble("firstspawn.z"), Float.parseFloat(this + .getString("firstspawn.yaw")), + Float.parseFloat(this.getString("firstspawn.pitch"))); + return location; + } catch (NullPointerException npe) { + return null; + } catch (NumberFormatException nfe) { + return null; + } + } } diff --git a/src/main/java/fr/xephi/authme/settings/SpoutCfg.java b/src/main/java/fr/xephi/authme/settings/SpoutCfg.java index 083bbb9e..f7cea432 100644 --- a/src/main/java/fr/xephi/authme/settings/SpoutCfg.java +++ b/src/main/java/fr/xephi/authme/settings/SpoutCfg.java @@ -3,36 +3,38 @@ package fr.xephi.authme.settings; import java.io.File; import java.util.ArrayList; -public class SpoutCfg extends CustomConfiguration{ +public class SpoutCfg extends CustomConfiguration { - private static SpoutCfg instance = null; + private static SpoutCfg instance = null; - public SpoutCfg(File file) - { - super(file); - loadDefaults(); - load(); - save(); - } + public SpoutCfg(File file) { + super(file); + loadDefaults(); + load(); + save(); + } - @SuppressWarnings("serial") - private void loadDefaults() { - this.set("Spout GUI enabled", true); - this.set("LoginScreen.enabled", true); - this.set("LoginScreen.exit button", "Quit"); - this.set("LoginScreen.exit message", "Good Bye"); - this.set("LoginScreen.login button", "Login"); - this.set("LoginScreen.title", "LOGIN"); - this.set("LoginScreen.text", new ArrayList() {{ - add("Sample text"); - add("Change this at spout.yml"); - add("--- AuthMe Reloaded by ---"); - add("Xephi59"); - }}); - } + @SuppressWarnings("serial") + private void loadDefaults() { + this.set("Spout GUI enabled", true); + this.set("LoginScreen.enabled", true); + this.set("LoginScreen.exit button", "Quit"); + this.set("LoginScreen.exit message", "Good Bye"); + this.set("LoginScreen.login button", "Login"); + this.set("LoginScreen.title", "LOGIN"); + this.set("LoginScreen.text", new ArrayList() { + { + add("Sample text"); + add("Change this at spout.yml"); + add("--- AuthMe Reloaded by ---"); + add("Xephi59"); + } + }); + } - public static SpoutCfg getInstance() { - if (instance == null) instance = new SpoutCfg(new File("plugins/AuthMe", "spout.yml")); - return instance; - } + public static SpoutCfg getInstance() { + if (instance == null) instance = new SpoutCfg(new File( + "plugins/AuthMe", "spout.yml")); + return instance; + } } diff --git a/src/main/java/fr/xephi/authme/task/MessageTask.java b/src/main/java/fr/xephi/authme/task/MessageTask.java index d4b9c19f..247ca500 100644 --- a/src/main/java/fr/xephi/authme/task/MessageTask.java +++ b/src/main/java/fr/xephi/authme/task/MessageTask.java @@ -7,7 +7,6 @@ import fr.xephi.authme.AuthMe; import fr.xephi.authme.cache.auth.PlayerCache; import fr.xephi.authme.cache.limbo.LimboCache; - public class MessageTask implements Runnable { private AuthMe plugin; @@ -15,7 +14,8 @@ public class MessageTask implements Runnable { private String[] msg; private int interval; - public MessageTask(AuthMe plugin, String name, String[] strings, int interval) { + public MessageTask(AuthMe plugin, String name, String[] strings, + int interval) { this.plugin = plugin; this.name = name; this.msg = strings; @@ -24,18 +24,19 @@ public class MessageTask implements Runnable { @Override public void run() { - if (PlayerCache.getInstance().isAuthenticated(name)) - return; + if (PlayerCache.getInstance().isAuthenticated(name)) return; for (Player player : plugin.getServer().getOnlinePlayers()) { if (player.getName().toLowerCase().equals(name)) { - for (String ms : msg) { - player.sendMessage(ms); - } + for (String ms : msg) { + player.sendMessage(ms); + } BukkitScheduler sched = plugin.getServer().getScheduler(); - int late = sched.scheduleSyncDelayedTask(plugin, this, interval * 20); - if(LimboCache.getInstance().hasLimboPlayer(name)) { - LimboCache.getInstance().getLimboPlayer(name).setMessageTaskId(late); + int late = sched.scheduleSyncDelayedTask(plugin, this, + interval * 20); + if (LimboCache.getInstance().hasLimboPlayer(name)) { + LimboCache.getInstance().getLimboPlayer(name) + .setMessageTaskId(late); } } } diff --git a/src/main/java/fr/xephi/authme/task/TimeoutTask.java b/src/main/java/fr/xephi/authme/task/TimeoutTask.java index ad38a55b..159976af 100644 --- a/src/main/java/fr/xephi/authme/task/TimeoutTask.java +++ b/src/main/java/fr/xephi/authme/task/TimeoutTask.java @@ -12,8 +12,6 @@ import fr.xephi.authme.cache.limbo.LimboPlayer; import fr.xephi.authme.listener.AuthMePlayerListener; import fr.xephi.authme.settings.Messages; - - public class TimeoutTask implements Runnable { private JavaPlugin plugin; @@ -32,22 +30,25 @@ public class TimeoutTask implements Runnable { @Override public void run() { - if (PlayerCache.getInstance().isAuthenticated(name)) - return; + 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.getMessageTaskId()); - player.getServer().getScheduler().cancelTask(inv.getTimeoutTaskId()); - if(playerCache.doesCacheExist(name)) { + LimboPlayer inv = LimboCache.getInstance().getLimboPlayer( + name); + player.getServer().getScheduler() + .cancelTask(inv.getMessageTaskId()); + player.getServer().getScheduler() + .cancelTask(inv.getTimeoutTaskId()); + if (playerCache.doesCacheExist(name)) { playerCache.removeCache(name); - } - } + } + } GameMode gm = AuthMePlayerListener.gameMode.get(name); - player.setGameMode(gm); - ConsoleLogger.info("Set " + player.getName() + " to gamemode: " + gm.name()); + player.setGameMode(gm); + ConsoleLogger.info("Set " + player.getName() + " to gamemode: " + + gm.name()); player.kickPlayer(m._("timeout")[0]); break; }