diff --git a/src/main/java/fr/xephi/authme/AuthMe.java b/src/main/java/fr/xephi/authme/AuthMe.java index ec7cea77..450e8356 100644 --- a/src/main/java/fr/xephi/authme/AuthMe.java +++ b/src/main/java/fr/xephi/authme/AuthMe.java @@ -12,8 +12,6 @@ import java.net.URL; import java.net.URLConnection; import java.util.Calendar; import java.util.Collection; -import java.util.Date; -import java.util.HashMap; import java.util.List; import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Logger; @@ -80,7 +78,6 @@ public class AuthMe extends JavaPlugin { public DataSource database = null; private Settings settings; private Messages m; - public PlayersLogs pllog; public OtherAccounts otherAccounts; public static Server server; public static Logger authmeLogger = Logger.getLogger("AuthMe"); @@ -97,9 +94,9 @@ public class AuthMe extends JavaPlugin { public Essentials ess; public API api; public Management management; - public HashMap captcha = new HashMap(); - public HashMap cap = new HashMap(); - public HashMap realIp = new HashMap(); + public ConcurrentHashMap captcha = new ConcurrentHashMap(); + public ConcurrentHashMap cap = new ConcurrentHashMap(); + public ConcurrentHashMap realIp = new ConcurrentHashMap(); public MultiverseCore multiverse = null; public Location essentialsSpawn; public LookupService ls = null; @@ -151,8 +148,6 @@ public class AuthMe extends JavaPlugin { m = Messages.getInstance(); - pllog = PlayersLogs.getInstance(); - otherAccounts = OtherAccounts.getInstance(); server = getServer(); @@ -246,9 +241,10 @@ public class AuthMe extends JavaPlugin { ConsoleLogger.showError("BECAREFUL !!! By disabling ForceSingleSession, your server protection is set to LOW"); } + PlayersLogs.getInstance(); + if (Settings.reloadSupport) try { - onReload(); int playersOnline = 0; try { if (Bukkit.class.getMethod("getOnlinePlayers", new Class[0]).getReturnType() == Collection.class) @@ -261,7 +257,7 @@ public class AuthMe extends JavaPlugin { database.purgeLogged(); } catch (NullPointerException npe) { } - } + } else PlayersLogs.getInstance().loadPlayers(); } catch (Exception ex) { } @@ -432,27 +428,6 @@ public class AuthMe extends JavaPlugin { 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()); - database.updateSession(auth); - PlayerCache.getInstance().addPlayer(auth); - } - } - } - return; - } catch (Exception ex) { - return; - } - } - public static AuthMe getInstance() { return authme; } 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 a517c756..17911bdc 100644 --- a/src/main/java/fr/xephi/authme/cache/auth/PlayerCache.java +++ b/src/main/java/fr/xephi/authme/cache/auth/PlayerCache.java @@ -43,4 +43,8 @@ public class PlayerCache { return cache.size(); } + public ConcurrentHashMap getCache() { + return this.cache; + } + } diff --git a/src/main/java/fr/xephi/authme/datasource/FlatFile.java b/src/main/java/fr/xephi/authme/datasource/FlatFile.java index 654f72e5..825579f4 100644 --- a/src/main/java/fr/xephi/authme/datasource/FlatFile.java +++ b/src/main/java/fr/xephi/authme/datasource/FlatFile.java @@ -13,6 +13,7 @@ import java.util.List; import fr.xephi.authme.AuthMe; import fr.xephi.authme.ConsoleLogger; import fr.xephi.authme.cache.auth.PlayerAuth; +import fr.xephi.authme.cache.auth.PlayerCache; import fr.xephi.authme.settings.PlayersLogs; import fr.xephi.authme.settings.Settings; @@ -648,17 +649,17 @@ public class FlatFile implements DataSource { @Override public boolean isLogged(String user) { - return PlayersLogs.getInstance().players.contains(user.toLowerCase()); + return PlayerCache.getInstance().isAuthenticated(user); } @Override public void setLogged(String user) { - PlayersLogs.getInstance().addPlayer(user.toLowerCase()); + PlayersLogs.getInstance().savePlayerLogs(); } @Override public void setUnlogged(String user) { - PlayersLogs.getInstance().removePlayer(user.toLowerCase()); + PlayersLogs.getInstance().savePlayerLogs(); } @Override diff --git a/src/main/java/fr/xephi/authme/datasource/SQLite.java b/src/main/java/fr/xephi/authme/datasource/SQLite.java index cdbac849..674aa449 100644 --- a/src/main/java/fr/xephi/authme/datasource/SQLite.java +++ b/src/main/java/fr/xephi/authme/datasource/SQLite.java @@ -12,6 +12,7 @@ import java.util.List; import fr.xephi.authme.AuthMe; import fr.xephi.authme.ConsoleLogger; import fr.xephi.authme.cache.auth.PlayerAuth; +import fr.xephi.authme.cache.auth.PlayerCache; import fr.xephi.authme.datasource.MiniConnectionPoolManager.TimeoutException; import fr.xephi.authme.settings.PlayersLogs; import fr.xephi.authme.settings.Settings; @@ -74,8 +75,8 @@ public class SQLite implements DataSource { } } - 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"); @@ -508,17 +509,17 @@ public class SQLite implements DataSource { @Override public boolean isLogged(String user) { - return PlayersLogs.getInstance().players.contains(user.toLowerCase()); + return PlayerCache.getInstance().isAuthenticated(user); } @Override public void setLogged(String user) { - PlayersLogs.getInstance().addPlayer(user.toLowerCase()); + PlayersLogs.getInstance().savePlayerLogs(); } @Override public void setUnlogged(String user) { - PlayersLogs.getInstance().removePlayer(user.toLowerCase()); + PlayersLogs.getInstance().savePlayerLogs(); } @Override 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 0a6be53f..77447194 100644 --- a/src/main/java/fr/xephi/authme/process/register/AsyncronousRegister.java +++ b/src/main/java/fr/xephi/authme/process/register/AsyncronousRegister.java @@ -12,6 +12,7 @@ import fr.xephi.authme.cache.auth.PlayerCache; import fr.xephi.authme.datasource.DataSource; import fr.xephi.authme.security.PasswordSecurity; import fr.xephi.authme.settings.Messages; +import fr.xephi.authme.settings.PlayersLogs; import fr.xephi.authme.settings.Settings; public class AsyncronousRegister { @@ -64,9 +65,7 @@ public class AsyncronousRegister { else if (database.isAuthAvailable(name)) { m.send(player, "user_regged"); - if (plugin.pllog.getStringList("players").contains(name)) { - plugin.pllog.getStringList("players").remove(name); - } + PlayersLogs.getInstance().savePlayerLogs(); allowRegister = false; } 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 cf054456..c2ffe57f 100644 --- a/src/main/java/fr/xephi/authme/process/register/ProcessSyncronousPasswordRegister.java +++ b/src/main/java/fr/xephi/authme/process/register/ProcessSyncronousPasswordRegister.java @@ -17,6 +17,7 @@ import fr.xephi.authme.events.AuthMeTeleportEvent; import fr.xephi.authme.events.LoginEvent; import fr.xephi.authme.events.RegisterTeleportEvent; import fr.xephi.authme.settings.Messages; +import fr.xephi.authme.settings.PlayersLogs; import fr.xephi.authme.settings.Settings; import fr.xephi.authme.task.MessageTask; import fr.xephi.authme.task.TimeoutTask; @@ -71,7 +72,7 @@ public class ProcessSyncronousPasswordRegister implements Runnable { BukkitTask msgT = sched.runTaskAsynchronously(plugin, new MessageTask(plugin, name, m.send("login_msg"), interval)); LimboCache.getInstance().getLimboPlayer(name).setMessageTaskId(msgT); try { - plugin.pllog.removePlayer(name); + PlayersLogs.getInstance().save(); if (player.isInsideVehicle()) player.getVehicle().eject(); } catch (NullPointerException npe) { diff --git a/src/main/java/fr/xephi/authme/settings/PlayersLogs.java b/src/main/java/fr/xephi/authme/settings/PlayersLogs.java index b95d2098..7e827fa5 100644 --- a/src/main/java/fr/xephi/authme/settings/PlayersLogs.java +++ b/src/main/java/fr/xephi/authme/settings/PlayersLogs.java @@ -2,8 +2,14 @@ package fr.xephi.authme.settings; import java.io.File; import java.util.ArrayList; +import java.util.Date; import java.util.List; +import fr.xephi.authme.AuthMe; +import fr.xephi.authme.cache.auth.PlayerAuth; +import fr.xephi.authme.cache.auth.PlayerCache; +import fr.xephi.authme.datasource.DataSource; + /** * * @author Xephi59 @@ -11,19 +17,27 @@ import java.util.List; public class PlayersLogs extends CustomConfiguration { private static PlayersLogs pllog = null; - public List players; public PlayersLogs() { super(new File("." + File.separator + "plugins" + File.separator + "AuthMe" + File.separator + "players.yml")); pllog = this; load(); save(); - players = this.getStringList("players"); } - public void clear() { - set("players", new ArrayList()); - save(); + public void loadPlayers() { + DataSource database = AuthMe.getInstance().database; + List list = this.getStringList("players"); + if (list == null || list.isEmpty()) + return; + for (String s : list) { + PlayerAuth auth = database.getAuth(s); + if (auth == null) + continue; + auth.setLastLogin(new Date().getTime()); + database.updateSession(auth); + PlayerCache.getInstance().addPlayer(auth); + } } public static PlayersLogs getInstance() { @@ -33,21 +47,18 @@ public class PlayersLogs extends CustomConfiguration { return pllog; } - public void addPlayer(String user) { - players = this.getStringList("players"); - if (!players.contains(user.toLowerCase())) { - players.add(user.toLowerCase()); - set("players", players); - save(); + public void savePlayerLogs() { + List players = new ArrayList(); + for (String s : PlayerCache.getInstance().getCache().keySet()) { + players.add(s); } + this.set("players", players); + this.save(); } - public void removePlayer(String user) { - players = this.getStringList("players"); - if (players.contains(user.toLowerCase())) { - players.remove(user.toLowerCase()); - set("players", players); - save(); - } + public void clear() { + this.set("players", new ArrayList()); + this.save(); } + }