Launcher/LaunchServer/src/main/java/pro/gravit/launchserver/socket/response/auth/JoinServerResponse.java

63 lines
2.3 KiB
Java

package pro.gravit.launchserver.socket.response.auth;
import io.netty.channel.ChannelHandlerContext;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import pro.gravit.launcher.base.events.request.JoinServerRequestEvent;
import pro.gravit.launchserver.auth.AuthException;
import pro.gravit.launchserver.auth.protect.interfaces.JoinServerProtectHandler;
import pro.gravit.launchserver.socket.Client;
import pro.gravit.launchserver.socket.response.SimpleResponse;
import pro.gravit.utils.HookException;
import java.util.UUID;
public class JoinServerResponse extends SimpleResponse {
private transient final Logger logger = LogManager.getLogger();
public String serverID;
public String accessToken;
public String username;
public UUID uuid;
@Override
public String getType() {
return "joinServer";
}
@Override
public void execute(ChannelHandlerContext ctx, Client client) {
if (!server.config.protectHandler.allowJoinServer(client)) {
sendError("Permissions denied");
return;
}
if ((username == null && uuid == null) || accessToken == null || serverID == null) {
sendError("Invalid request");
return;
}
boolean success;
try {
server.authHookManager.joinServerHook.hook(this, client);
if (server.config.protectHandler instanceof JoinServerProtectHandler joinServerProtectHandler) {
success = joinServerProtectHandler.onJoinServer(serverID, username, uuid, client);
if (!success) {
sendResult(new JoinServerRequestEvent(false));
return;
}
}
success = server.authManager.joinServer(client, username, uuid, accessToken, serverID);
if (success) {
logger.debug("joinServer: {} accessToken: {} serverID: {}", username, accessToken, serverID);
}
} catch (AuthException | HookException | SecurityException e) {
sendError(e.getMessage());
return;
} catch (Exception e) {
logger.error("Join Server error", e);
sendError("Internal authHandler error");
return;
}
sendResult(new JoinServerRequestEvent(success));
}
}