🐛 fix: block new logins when server is shutting down

This commit is contained in:
2025-01-02 22:46:45 +07:00
parent 9dd7c3c358
commit bf439cf3f3
2 changed files with 13 additions and 2 deletions

View File

@@ -111,7 +111,7 @@ class Main @Inject constructor(private val logger: Logger, private val server: P
commandManager.register(refreshCommandMeta, refreshCommand)
commandManager.register(migrateCommandMeta, migrateCommand)
val connectionHandler = ProxyTransferHandler(servers, logger)
val connectionHandler = ProxyTransferHandler(servers, logger, acceptingTransfers)
server.eventManager.register(this, connectionHandler)
Executors.newSingleThreadExecutor().submit {

View File

@@ -5,19 +5,23 @@ import com.auth0.jwt.JWT
import com.auth0.jwt.algorithms.Algorithm
import com.imaginarycode.minecraft.redisbungee.RedisBungeeAPI
import com.velocitypowered.api.event.Subscribe
import com.velocitypowered.api.event.connection.PreLoginEvent
import com.velocitypowered.api.event.player.CookieReceiveEvent
import com.velocitypowered.api.event.player.PlayerChooseInitialServerEvent
import com.velocitypowered.api.proxy.server.RegisteredServer
import net.kyori.adventure.key.Key
import net.kyori.adventure.text.Component
import org.slf4j.Logger
import java.util.*
import java.util.concurrent.CompletableFuture
import java.util.concurrent.TimeUnit
import java.util.concurrent.TimeoutException
import java.util.concurrent.atomic.AtomicBoolean
class ProxyTransferHandler(
private val servers: Map<String, RegisteredServer>,
private val logger: Logger
private val logger: Logger,
private val acceptingTransfer: AtomicBoolean
) {
private val cookieFutures = mutableMapOf<String, CompletableFuture<String>>()
private var jwtSecret = System.getenv("MINIKURA_JWT_SECRET") ?: "secret"
@@ -25,6 +29,13 @@ class ProxyTransferHandler(
private val jwtVerifier = JWT.require(jwtAlgorithm).withIssuer("minikura").build()
private val redisBungeeApi = RedisBungeeAPI.getRedisBungeeApi()
@Subscribe
fun onPreLogin(event: PreLoginEvent) {
if (!acceptingTransfer.get()) {
event.result = PreLoginEvent.PreLoginComponentResult.denied(Component.text("Proxy are currently not accepting new connections."))
}
}
@Subscribe
fun onCookieReceiveEvent(event: CookieReceiveEvent) {
// TODO: Fix don't pass the cookie to backend, it kicks with invalid packet for some reason