feat: 화이트리스트 API 엔드포인트 추가
- GET /whitelist - 화이트리스트 조회 (whitelist.json, server.properties) - WhitelistPlayer, WhitelistResponse 데이터 클래스 추가 - white-list 값만 체크하여 활성화 상태 반환
This commit is contained in:
parent
054d7b896a
commit
d4faf31b73
1 changed files with 63 additions and 0 deletions
|
|
@ -41,6 +41,7 @@ class HttpApiServer(private val port: Int) {
|
|||
server?.createContext("/logfiles", LogFilesHandler())
|
||||
server?.createContext("/logfile", LogFileDownloadHandler())
|
||||
server?.createContext("/banlist", BanlistHandler())
|
||||
server?.createContext("/whitelist", WhitelistHandler())
|
||||
|
||||
server?.start()
|
||||
ServerStatusMod.LOGGER.info(
|
||||
|
|
@ -482,6 +483,63 @@ class HttpApiServer(private val port: Int) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** GET /whitelist - 화이트리스트 조회 (whitelist.json 읽기) */
|
||||
inner class WhitelistHandler : HttpHandler {
|
||||
override fun handle(exchange: HttpExchange) {
|
||||
if (exchange.requestMethod == "OPTIONS") {
|
||||
sendJsonResponse(exchange, "")
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
val server = net.neoforged.neoforge.server.ServerLifecycleHooks.getCurrentServer()
|
||||
val whitelistFile =
|
||||
server?.serverDirectory?.resolve("whitelist.json")?.toFile()
|
||||
?: java.io.File("whitelist.json")
|
||||
|
||||
// 화이트리스트 활성화 여부 확인 (server.properties의 white-list 값)
|
||||
val propsFile =
|
||||
server?.serverDirectory?.resolve("server.properties")?.toFile()
|
||||
?: java.io.File("server.properties")
|
||||
var enabled = false
|
||||
if (propsFile.exists()) {
|
||||
propsFile.readLines().forEach { line ->
|
||||
if (line.startsWith("white-list=")) {
|
||||
enabled = line.substringAfter("=").trim().lowercase() == "true"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val players =
|
||||
if (whitelistFile.exists()) {
|
||||
try {
|
||||
val content = whitelistFile.readText(Charsets.UTF_8)
|
||||
Json.decodeFromString<List<WhitelistPlayer>>(content)
|
||||
} catch (e: Exception) {
|
||||
ServerStatusMod.LOGGER.error(
|
||||
"[${ServerStatusMod.MOD_ID}] 화이트리스트 파싱 오류: ${e.message}"
|
||||
)
|
||||
emptyList()
|
||||
}
|
||||
} else {
|
||||
emptyList()
|
||||
}
|
||||
|
||||
val response = WhitelistResponse(enabled, players)
|
||||
sendJsonResponse(exchange, Json.encodeToString(response))
|
||||
} catch (e: Exception) {
|
||||
ServerStatusMod.LOGGER.error(
|
||||
"[${ServerStatusMod.MOD_ID}] 화이트리스트 조회 오류: ${e.message}"
|
||||
)
|
||||
sendJsonResponse(
|
||||
exchange,
|
||||
"""{"enabled": false, "players": [], "error": "${e.message}"}""",
|
||||
500
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable data class WorldsResponse(val worlds: List<WorldInfo>)
|
||||
|
|
@ -505,3 +563,8 @@ data class BannedPlayer(
|
|||
)
|
||||
|
||||
@Serializable data class BanlistResponse(val banList: List<BannedPlayer>)
|
||||
|
||||
@Serializable data class WhitelistPlayer(val uuid: String, val name: String)
|
||||
|
||||
@Serializable
|
||||
data class WhitelistResponse(val enabled: Boolean, val players: List<WhitelistPlayer>)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue