Panel: game server integration API

Game servers (Paper plugin, Fabric/Forge mods) authenticate with a
per-server token and report to /api/server/v1:

- hello: records software/version, returns the auth server URL
- login: allow/deny with a message (account status + reason, access
  all/members/groups, optional "must join through the launcher" check
  matching the player's recent launch IP)
- sync: online players, TPS, stat deltas and events; answers with
  players to kick when their account was disabled meanwhile

Admins create servers (token shown once, stored hashed), regenerate
tokens, and read leaderboards, events and per-player activity. The
dashboard stats include who's online right now.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011ARcGWxLx21FwXJ3yfGriS
This commit is contained in:
Claude committed 2026-09-28 09:04:11 +00:00
1 parent 77a15cab8b
commit a50963f9e0
4 files changed
+885

No files matched your search

+1
View File
@@ -57,6 +57,7 @@ pub async fn stats(_: AdminUser, State(state): State<AppState>) -> AppResult<Jso
"top_instances": top.into_iter().map(|(id, c)| json!({"instance_id": id, "launches": c})).collect::<Vec<_>>(),
"recent": recent.into_iter().map(|(i, u, t)| json!({"instance_id": i, "username": u, "at": t})).collect::<Vec<_>>(),
"launcher_download_url": settings.launcher_download_url,
"live": crate::routes::servers::live_summary(&state).await?,
"version": env!("CARGO_PKG_VERSION"),
})))
}