added register_enable, login_timeout to config, replaced thread in AuthHandler with a central timer
This commit is contained in:
parent
7ffa94ab17
commit
e277662c8e
4 changed files with 77 additions and 30 deletions
|
@ -88,6 +88,7 @@ import net.md_5.bungee.command.CommandServer;
|
|||
import net.md_5.bungee.command.ConsoleCommandSender;
|
||||
import net.md_5.bungee.config.Configuration;
|
||||
import net.md_5.bungee.config.YamlConfig;
|
||||
import net.md_5.bungee.eaglercraft.AuthHandler;
|
||||
import net.md_5.bungee.eaglercraft.AuthSystem;
|
||||
import net.md_5.bungee.eaglercraft.BanList;
|
||||
import net.md_5.bungee.eaglercraft.DomainBlacklist;
|
||||
|
@ -115,6 +116,7 @@ public class BungeeCord extends ProxyServer {
|
|||
private final Timer saveThread;
|
||||
private final Timer reloadBanThread;
|
||||
private final Timer closeInactiveSockets;
|
||||
private final Timer authTimeoutTimer;
|
||||
private Collection<Channel> listeners;
|
||||
private Collection<WebSocketListener> wsListeners;
|
||||
private final Map<String, UserConnection> connections;
|
||||
|
@ -141,7 +143,8 @@ public class BungeeCord extends ProxyServer {
|
|||
this.eventLoops = (MultithreadEventLoopGroup) new NioEventLoopGroup(Runtime.getRuntime().availableProcessors(), new ThreadFactoryBuilder().setNameFormat("Netty IO Thread #%1$d").build());
|
||||
this.saveThread = new Timer("Reconnect Saver");
|
||||
this.reloadBanThread = new Timer("Ban List Reload");
|
||||
this.closeInactiveSockets = new Timer("close Inactive WebSockets");
|
||||
this.closeInactiveSockets = new Timer("Close Inactive WebSockets");
|
||||
this.authTimeoutTimer = new Timer("Auth Timeout");
|
||||
this.listeners = new HashSet<Channel>();
|
||||
this.wsListeners = new HashSet<WebSocketListener>();
|
||||
this.connections = (Map<String, UserConnection>) new CaseInsensitiveMap();
|
||||
|
@ -274,6 +277,13 @@ public class BungeeCord extends ProxyServer {
|
|||
}
|
||||
}
|
||||
}, 0L, TimeUnit.SECONDS.toMillis(10L));
|
||||
final int authTimeout = this.config.getAuthInfo().getLoginTimeout();
|
||||
this.authTimeoutTimer.scheduleAtFixedRate(new TimerTask() {
|
||||
@Override
|
||||
public void run() {
|
||||
AuthHandler.closeInactive(authTimeout);
|
||||
}
|
||||
}, 0L, TimeUnit.SECONDS.toMillis(2L));
|
||||
}
|
||||
|
||||
public void startListeners() {
|
||||
|
@ -362,6 +372,9 @@ public class BungeeCord extends ProxyServer {
|
|||
BungeeCord.this.reconnectHandler.save();
|
||||
BungeeCord.this.reconnectHandler.close();
|
||||
BungeeCord.this.saveThread.cancel();
|
||||
BungeeCord.this.reloadBanThread.cancel();
|
||||
BungeeCord.this.closeInactiveSockets.cancel();
|
||||
BungeeCord.this.authTimeoutTimer.cancel();
|
||||
BungeeCord.this.getLogger().info("Disabling plugins");
|
||||
for (final Plugin plugin : BungeeCord.this.pluginManager.getPlugins()) {
|
||||
plugin.onDisable();
|
||||
|
|
|
@ -5,21 +5,30 @@ import java.util.List;
|
|||
public class AuthServiceInfo {
|
||||
|
||||
private final boolean enabled;
|
||||
private final boolean registerEnabled;
|
||||
private final String authfile;
|
||||
private final int ipLimit;
|
||||
private final List<String> joinMessages;
|
||||
private final int loginTimeout;
|
||||
|
||||
public AuthServiceInfo(boolean enabled, String authfile, int timeout, List<String> joinMessages) {
|
||||
public AuthServiceInfo(boolean enabled, boolean registerEnabled, String authfile,
|
||||
int timeout, List<String> joinMessages, int loginTimeout) {
|
||||
this.enabled = enabled;
|
||||
this.registerEnabled = registerEnabled;
|
||||
this.authfile = authfile;
|
||||
this.ipLimit = timeout;
|
||||
this.joinMessages = joinMessages;
|
||||
this.loginTimeout = loginTimeout;
|
||||
}
|
||||
|
||||
public boolean isEnabled() {
|
||||
return enabled;
|
||||
}
|
||||
|
||||
public boolean isRegisterEnabled() {
|
||||
return registerEnabled;
|
||||
}
|
||||
|
||||
public String getAuthfile() {
|
||||
return authfile;
|
||||
}
|
||||
|
@ -32,4 +41,8 @@ public class AuthServiceInfo {
|
|||
return joinMessages;
|
||||
}
|
||||
|
||||
public int getLoginTimeout() {
|
||||
return loginTimeout;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -281,7 +281,8 @@ public class YamlConfig implements ConfigurationAdapter {
|
|||
final Map<String, Object> auth = this.get("authservice", new HashMap<String, Object>());
|
||||
final List<String> defaultJoinMessages = new ArrayList<String>();
|
||||
defaultJoinMessages.add("&3Welcome to my &aEaglercraftBungee &3server!");
|
||||
return new AuthServiceInfo(this.get("enabled", false, auth), this.get("authfile", "auths.db", auth), this.get("ip_limit", 0, auth), this.get("join_messages", defaultJoinMessages, auth));
|
||||
return new AuthServiceInfo(this.get("enabled", false, auth), this.get("register_enabled", true, auth), this.get("authfile", "auths.db", auth),
|
||||
this.get("ip_limit", 0, auth), this.get("join_messages", defaultJoinMessages, auth), this.get("login_timeout", 30, auth));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
package net.md_5.bungee.eaglercraft;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
|
||||
import net.md_5.bungee.BungeeCord;
|
||||
import net.md_5.bungee.ServerConnection;
|
||||
import net.md_5.bungee.UserConnection;
|
||||
|
@ -26,29 +30,21 @@ public class AuthHandler extends PacketHandler {
|
|||
private final HandlerBoss handlerBoss;
|
||||
private final String username;
|
||||
|
||||
private static final Collection<AuthHandler> openHandlers = new LinkedList();
|
||||
private boolean loggedIn = false;
|
||||
private long startTime;
|
||||
|
||||
public AuthHandler(final ProxyServer bungee, final UserConnection con, final HandlerBoss handlerBoss) {
|
||||
this.bungee = bungee;
|
||||
this.con = con;
|
||||
this.handlerBoss = handlerBoss;
|
||||
|
||||
this.username = this.con.getName();
|
||||
this.startTime = System.currentTimeMillis();
|
||||
|
||||
new Thread(() -> {
|
||||
for (int i = 0; i < 120; i++) {
|
||||
if (this.loggedIn)
|
||||
break;
|
||||
try {
|
||||
Thread.sleep(250);
|
||||
} catch (InterruptedException ignored) {
|
||||
}
|
||||
}
|
||||
if (this.loggedIn)
|
||||
return;
|
||||
this.con.disconnect("You did not login in time!");
|
||||
}).start();
|
||||
|
||||
synchronized(openHandlers) {
|
||||
openHandlers.add(this);
|
||||
}
|
||||
|
||||
this.con.unsafe().sendPacket(new Packet1Login(0, "END", (byte) 2, 1, (byte) 0, (byte) 0,
|
||||
(byte) this.con.getPendingConnection().getListener().getTabListSize()));
|
||||
this.con.unsafe().sendPacket(new Packet9Respawn(1, (byte) 0, (byte) 2, (short) 255, "END"));
|
||||
|
@ -102,18 +98,22 @@ public class AuthHandler extends PacketHandler {
|
|||
break;
|
||||
case "register":
|
||||
case "reg":
|
||||
if (args.length == 1 || args.length == 2) {
|
||||
this.con.sendMessage("\u00A7cUsage: /" + args[0].toLowerCase() + " <password> <confirmPassword>");
|
||||
} else if (!args[1].equals(args[2])) {
|
||||
this.con.sendMessage("\u00A7cThose passwords do not match!");
|
||||
} else if (authSystem.isRegistered(this.username)) {
|
||||
this.con.sendMessage("\u00A7cThis username is already registered!");
|
||||
} else if (authSystem.register(this.username, args[1],
|
||||
this.con.getAddress().getAddress().getHostAddress())) {
|
||||
this.con.sendMessage("\u00A7cSuccessfully registered and logging in...");
|
||||
this.onLogin();
|
||||
} else {
|
||||
this.con.sendMessage("\u00A7cUnable to register...");
|
||||
if(BungeeCord.getInstance().config.getAuthInfo().isRegisterEnabled()) {
|
||||
if (args.length == 1 || args.length == 2) {
|
||||
this.con.sendMessage("\u00A7cUsage: /" + args[0].toLowerCase() + " <password> <confirmPassword>");
|
||||
} else if (!args[1].equals(args[2])) {
|
||||
this.con.sendMessage("\u00A7cThose passwords do not match!");
|
||||
} else if (authSystem.isRegistered(this.username)) {
|
||||
this.con.sendMessage("\u00A7cThis username is already registered!");
|
||||
} else if (authSystem.register(this.username, args[1],
|
||||
this.con.getAddress().getAddress().getHostAddress())) {
|
||||
this.con.sendMessage("\u00A7cSuccessfully registered and logging in...");
|
||||
this.onLogin();
|
||||
} else {
|
||||
this.con.sendMessage("\u00A7cUnable to register...");
|
||||
}
|
||||
}else {
|
||||
this.con.disconnect("Registration is not enabled!");
|
||||
}
|
||||
break;
|
||||
case "changepassword":
|
||||
|
@ -155,4 +155,24 @@ public class AuthHandler extends PacketHandler {
|
|||
public String toString() {
|
||||
return "[" + this.con.getName() + "] -> AuthHandler";
|
||||
}
|
||||
|
||||
public static void closeInactive(int timeout) {
|
||||
synchronized(openHandlers) {
|
||||
long millis = System.currentTimeMillis();
|
||||
timeout *= 1000;
|
||||
Iterator<AuthHandler> handlers = openHandlers.iterator();
|
||||
while(handlers.hasNext()) {
|
||||
AuthHandler h = handlers.next();
|
||||
if(!h.loggedIn) {
|
||||
if(millis - h.startTime > timeout) {
|
||||
h.con.disconnect("You did not login in time you eagler!");
|
||||
handlers.remove();
|
||||
}
|
||||
}else {
|
||||
handlers.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue