🐛 fix: harden backend authorization and sync

This commit is contained in:
2026-08-13 03:29:17 +07:00
parent 4d29156614
commit ab662a4fa4
35 changed files with 442 additions and 176 deletions
@@ -42,7 +42,7 @@ class Main @Inject constructor(private val logger: Logger, private val server: P
private val client = OkHttpClient()
private val apiKey: String = System.getenv("MINIKURA_API_KEY") ?: ""
private val apiUrl: String = System.getenv("MINIKURA_API_URL") ?: "http://localhost:3000/api"
private val websocketUrl: String = System.getenv("MINIKURA_WEBSOCKET_URL") ?: "ws://localhost:3000/api/servers/ws?apiKey=$apiKey"
private val websocketUrl: String = System.getenv("MINIKURA_WEBSOCKET_URL") ?: "ws://localhost:3000/api/servers/ws"
private var acceptingTransfers = AtomicBoolean(false)
private val redisBungeeApi = RedisBungeeAPI.getRedisBungeeApi()
@@ -55,7 +55,7 @@ class Main @Inject constructor(private val logger: Logger, private val server: P
ProxyTransferUtils.logger = logger
ProxyTransferUtils.acceptingTransfers = acceptingTransfers
val client = createWebSocketClient(this, logger, server, websocketUrl)
val client = createWebSocketClient(this, logger, server, websocketUrl, apiKey)
client.connect()
val commandManager: CommandManager = server.commandManager
@@ -231,7 +231,7 @@ class Main @Inject constructor(private val logger: Logger, private val server: P
servers.clear()
for (data in serversData) {
val serverInfo = ServerInfo(data.id, InetSocketAddress("localhost", data.listen_port))
val serverInfo = ServerInfo(data.id, InetSocketAddress(data.connection_address, data.listen_port))
val registeredServer = server.createRawRegisteredServer(serverInfo)
servers[data.id] = registeredServer
this.server.registerServer(registeredServer.serverInfo)
@@ -8,7 +8,7 @@ import java.net.URI
import java.time.Duration
import com.google.gson.JsonParser
class MinikuraWebSocketClient(private val plugin: Main, private val logger: Logger, private val server: ProxyServer, serverUri: URI?) : WebSocketClient(serverUri) {
class MinikuraWebSocketClient(private val plugin: Main, private val logger: Logger, private val server: ProxyServer, serverUri: URI?, headers: Map<String, String>) : WebSocketClient(serverUri, headers) {
override fun onOpen(handshakedata: ServerHandshake) {
logger.info("Connected to WebSocket server at: ${uri}")
@@ -100,4 +100,4 @@ class MinikuraWebSocketClient(private val plugin: Main, private val logger: Logg
logger.error("Failed to schedule refresh command", e)
}
}
}
}
@@ -8,9 +8,10 @@ data class ServerData(
val type: ServerType,
val description: String?,
val listen_port: Int = 25565,
val connection_address: String,
val memory: String = "1G",
val env_variables: List<CustomEnvironmentVariableData> = emptyList(),
val api_key: String,
val created_at: String,
val updated_at: String
)
)
@@ -6,8 +6,8 @@ import com.velocitypowered.api.proxy.ProxyServer
import org.slf4j.Logger
import java.net.URI
fun createWebSocketClient(plugin: Main, logger: Logger, server: ProxyServer, websocketUrl: String): MinikuraWebSocketClient {
fun createWebSocketClient(plugin: Main, logger: Logger, server: ProxyServer, websocketUrl: String, apiKey: String): MinikuraWebSocketClient {
val uri = URI(websocketUrl)
val client = MinikuraWebSocketClient(plugin, logger, server, uri)
val client = MinikuraWebSocketClient(plugin, logger, server, uri, mapOf("Authorization" to "Bearer $apiKey"))
return client
}