mirror of
https://github.com/AuthMe/AuthMeReloaded.git
synced 2024-11-25 03:35:16 +01:00
adds proxy sessions, fixing auto login from bungee messages issues
This commit is contained in:
parent
d76131c8e7
commit
1a04657c98
48
src/main/java/fr/xephi/authme/data/ProxySessionManager.java
Normal file
48
src/main/java/fr/xephi/authme/data/ProxySessionManager.java
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
package fr.xephi.authme.data;
|
||||||
|
|
||||||
|
import fr.xephi.authme.initialization.HasCleanup;
|
||||||
|
import fr.xephi.authme.util.expiring.ExpiringSet;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
public class ProxySessionManager implements HasCleanup {
|
||||||
|
|
||||||
|
private final ExpiringSet<String> activeProxySessions;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
public ProxySessionManager() {
|
||||||
|
long countTimeout = 5;
|
||||||
|
activeProxySessions = new ExpiringSet<>(countTimeout, TimeUnit.SECONDS);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Saves the player in the set
|
||||||
|
* @param name the player's name
|
||||||
|
*/
|
||||||
|
private void setActiveSession(String name) {
|
||||||
|
activeProxySessions.add(name.toLowerCase());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Process a proxy session message from AuthMeBungee
|
||||||
|
* @param name the player to process
|
||||||
|
*/
|
||||||
|
public void processProxySessionMessage(String name) {
|
||||||
|
setActiveSession(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns if the player should be logged in or not
|
||||||
|
* @param name the name of the player to check
|
||||||
|
* @return true if player has to be logged in, false otherwise
|
||||||
|
*/
|
||||||
|
public boolean shouldResumeSession(String name) {
|
||||||
|
return activeProxySessions.contains(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void performCleanup() {
|
||||||
|
activeProxySessions.removeExpiredEntries();
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,7 @@
|
|||||||
package fr.xephi.authme.process.join;
|
package fr.xephi.authme.process.join;
|
||||||
|
|
||||||
import fr.xephi.authme.ConsoleLogger;
|
import fr.xephi.authme.ConsoleLogger;
|
||||||
|
import fr.xephi.authme.data.ProxySessionManager;
|
||||||
import fr.xephi.authme.data.limbo.LimboService;
|
import fr.xephi.authme.data.limbo.LimboService;
|
||||||
import fr.xephi.authme.datasource.DataSource;
|
import fr.xephi.authme.datasource.DataSource;
|
||||||
import fr.xephi.authme.events.ProtectInventoryEvent;
|
import fr.xephi.authme.events.ProtectInventoryEvent;
|
||||||
@ -72,6 +73,9 @@ public class AsynchronousJoin implements AsynchronousProcess {
|
|||||||
@Inject
|
@Inject
|
||||||
private SessionService sessionService;
|
private SessionService sessionService;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private ProxySessionManager proxySessionManager;
|
||||||
|
|
||||||
AsynchronousJoin() {
|
AsynchronousJoin() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -128,6 +132,15 @@ public class AsynchronousJoin implements AsynchronousProcess {
|
|||||||
() -> commandManager.runCommandsOnSessionLogin(player));
|
() -> commandManager.runCommandsOnSessionLogin(player));
|
||||||
bukkitService.runTaskOptionallyAsync(() -> asynchronousLogin.forceLogin(player));
|
bukkitService.runTaskOptionallyAsync(() -> asynchronousLogin.forceLogin(player));
|
||||||
return;
|
return;
|
||||||
|
} else if (proxySessionManager.shouldResumeSession(name)) {
|
||||||
|
service.send(player, MessageKey.SESSION_RECONNECTION);
|
||||||
|
// Run commands
|
||||||
|
bukkitService.scheduleSyncTaskFromOptionallyAsyncTask(
|
||||||
|
() -> commandManager.runCommandsOnSessionLogin(player));
|
||||||
|
bukkitService.runTaskOptionallyAsync(() -> asynchronousLogin.forceLogin(player));
|
||||||
|
logger.info("The user " + player.getName() + " has been automatically logged in, "
|
||||||
|
+ "as present in autologin queue.");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
} else if (!service.getProperty(RegistrationSettings.FORCE)) {
|
} else if (!service.getProperty(RegistrationSettings.FORCE)) {
|
||||||
bukkitService.scheduleSyncTaskFromOptionallyAsyncTask(() -> {
|
bukkitService.scheduleSyncTaskFromOptionallyAsyncTask(() -> {
|
||||||
|
@ -4,6 +4,7 @@ import com.google.common.io.ByteArrayDataInput;
|
|||||||
import com.google.common.io.ByteStreams;
|
import com.google.common.io.ByteStreams;
|
||||||
import fr.xephi.authme.AuthMe;
|
import fr.xephi.authme.AuthMe;
|
||||||
import fr.xephi.authme.ConsoleLogger;
|
import fr.xephi.authme.ConsoleLogger;
|
||||||
|
import fr.xephi.authme.data.ProxySessionManager;
|
||||||
import fr.xephi.authme.datasource.DataSource;
|
import fr.xephi.authme.datasource.DataSource;
|
||||||
import fr.xephi.authme.initialization.SettingsDependent;
|
import fr.xephi.authme.initialization.SettingsDependent;
|
||||||
import fr.xephi.authme.output.ConsoleLoggerFactory;
|
import fr.xephi.authme.output.ConsoleLoggerFactory;
|
||||||
@ -24,16 +25,18 @@ public class BungeeReceiver implements PluginMessageListener, SettingsDependent
|
|||||||
|
|
||||||
private final AuthMe plugin;
|
private final AuthMe plugin;
|
||||||
private final BukkitService bukkitService;
|
private final BukkitService bukkitService;
|
||||||
|
private final ProxySessionManager proxySessionManager;
|
||||||
private final Management management;
|
private final Management management;
|
||||||
private final DataSource dataSource;
|
private final DataSource dataSource;
|
||||||
|
|
||||||
private boolean isEnabled;
|
private boolean isEnabled;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
BungeeReceiver(AuthMe plugin, BukkitService bukkitService, Management management,
|
BungeeReceiver(AuthMe plugin, BukkitService bukkitService, ProxySessionManager proxySessionManager,
|
||||||
DataSource dataSource, Settings settings) {
|
Management management, DataSource dataSource, Settings settings) {
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
this.bukkitService = bukkitService;
|
this.bukkitService = bukkitService;
|
||||||
|
this.proxySessionManager = proxySessionManager;
|
||||||
this.management = management;
|
this.management = management;
|
||||||
this.dataSource = dataSource;
|
this.dataSource = dataSource;
|
||||||
reload(settings);
|
reload(settings);
|
||||||
@ -152,6 +155,11 @@ public class BungeeReceiver implements PluginMessageListener, SettingsDependent
|
|||||||
management.forceLogin(player);
|
management.forceLogin(player);
|
||||||
logger.info("The user " + player.getName() + " has been automatically logged in, "
|
logger.info("The user " + player.getName() + " has been automatically logged in, "
|
||||||
+ "as requested via plugin messaging.");
|
+ "as requested via plugin messaging.");
|
||||||
|
} else {
|
||||||
|
proxySessionManager.processProxySessionMessage(name);
|
||||||
|
logger.info("The user " + name + " should be automatically logged in, "
|
||||||
|
+ "as requested via plugin messaging but has not been detected, nickname has been"
|
||||||
|
+" added to autologin queue.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user