From 5abc9b9d452c2e39e407086e2b7931e3a2554889 Mon Sep 17 00:00:00 2001 From: HexelDev Date: Sun, 4 Mar 2018 18:36:21 +0100 Subject: [PATCH] 'session expired' message spam fix --- .../xephi/authme/service/SessionService.java | 24 ++++++++++++------- .../fr/xephi/authme/service/SessionState.java | 13 ++++++++++ 2 files changed, 29 insertions(+), 8 deletions(-) create mode 100644 src/main/java/fr/xephi/authme/service/SessionState.java diff --git a/src/main/java/fr/xephi/authme/service/SessionService.java b/src/main/java/fr/xephi/authme/service/SessionService.java index dd676cc87..87f1bfc7d 100644 --- a/src/main/java/fr/xephi/authme/service/SessionService.java +++ b/src/main/java/fr/xephi/authme/service/SessionService.java @@ -45,11 +45,12 @@ public class SessionService implements Reloadable { database.setUnlogged(name); database.revokeSession(name); PlayerAuth auth = database.getAuth(name); - if (hasValidSessionData(auth, player)) { + SessionState state = hasValidSessionData(auth, player); + if(state.equals(SessionState.VALID)) { RestoreSessionEvent event = bukkitService.createAndCallEvent( isAsync -> new RestoreSessionEvent(player, isAsync)); return !event.isCancelled(); - } else { + } else if(state.equals(SessionState.IP_CHANGED)) { service.send(player, MessageKey.SESSION_EXPIRED); } } @@ -64,17 +65,24 @@ public class SessionService implements Reloadable { * @param player the associated player * @return true if the player may resume his login session, false otherwise */ - private boolean hasValidSessionData(PlayerAuth auth, Player player) { + private SessionState hasValidSessionData(PlayerAuth auth, Player player) { if (auth == null) { ConsoleLogger.warning("No PlayerAuth in database for '" + player.getName() + "' during session check"); - return false; + return SessionState.NOT_VALID; } else if (auth.getLastLogin() == null) { - return false; + return SessionState.NOT_VALID; } long timeSinceLastLogin = System.currentTimeMillis() - auth.getLastLogin(); - return PlayerUtils.getPlayerIp(player).equals(auth.getLastIp()) - && timeSinceLastLogin > 0 - && timeSinceLastLogin < service.getProperty(PluginSettings.SESSIONS_TIMEOUT) * MILLIS_PER_MINUTE; + + if(timeSinceLastLogin > 0 + && timeSinceLastLogin < service.getProperty(PluginSettings.SESSIONS_TIMEOUT) * MILLIS_PER_MINUTE) { + if(PlayerUtils.getPlayerIp(player).equals(auth.getLastIp())) { + return SessionState.VALID; + } else { + return SessionState.IP_CHANGED; + } + } + return SessionState.OUTDATED; } public void grantSession(String name) { diff --git a/src/main/java/fr/xephi/authme/service/SessionState.java b/src/main/java/fr/xephi/authme/service/SessionState.java new file mode 100644 index 000000000..801f36bc8 --- /dev/null +++ b/src/main/java/fr/xephi/authme/service/SessionState.java @@ -0,0 +1,13 @@ +package fr.xephi.authme.service; + +public enum SessionState { + + VALID, + + NOT_VALID, + + OUTDATED, + + IP_CHANGED + +}