Web panel (like txAdmin) on the game port: login/roles/users, players, kick/ban/op, bans, live console, world reset/backups/restore, settings editor, save ZIP upload/download, start/stop/restart; in-process restart loop; tests

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-27 18:18:58 +02:00
co-authored by Claude Opus 5.5
parent b949418476
commit f8aad82d18
15 changed files with 2522 additions and 50 deletions
+73
View File
@@ -0,0 +1,73 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>MSCO Server Panel</title>
<link rel="icon" href="logo.png">
<link rel="stylesheet" href="app.css">
<script src="app.js" defer></script>
</head>
<body>
<!-- Anmeldung / Einrichtung -->
<main id="auth" class="auth hidden">
<form id="authForm" class="auth-card" autocomplete="on">
<div class="brand">
<img src="logo.png" alt="">
<div>
<div class="brand-title">MSCO</div>
<div class="brand-sub" id="authServer">Server Panel</div>
</div>
</div>
<h1 id="authTitle">Sign in</h1>
<p id="authHint" class="muted"></p>
<label id="codeRow" class="hidden">Setup code
<input id="code" name="code" autocomplete="off" spellcheck="false" placeholder="XXXXX-XXXXX">
</label>
<label>Username
<input id="username" name="username" autocomplete="username" required>
</label>
<label>Password
<input id="password" name="password" type="password" autocomplete="current-password" required>
</label>
<label id="password2Row" class="hidden">Repeat password
<input id="password2" type="password" autocomplete="new-password">
</label>
<p id="authError" class="error hidden"></p>
<button class="btn primary wide" id="authButton" type="submit">Sign in</button>
</form>
</main>
<!-- Panel -->
<div id="app" class="layout hidden">
<aside class="sidebar">
<div class="brand">
<img src="logo.png" alt="">
<div>
<div class="brand-title">MSCO</div>
<div class="brand-sub">Server Panel</div>
</div>
</div>
<nav id="nav"></nav>
<div class="sidebar-foot">
<div class="me"><span id="meName"></span><span id="meRole" class="pill"></span></div>
<button class="btn ghost small" id="logout" type="button">Log out</button>
</div>
</aside>
<section class="content">
<header class="topbar">
<button class="btn ghost small menu" id="menuToggle" type="button" aria-label="Menu">☰</button>
<div>
<div class="server-name" id="serverName">MSCO Server</div>
<div class="server-meta" id="serverMeta"></div>
</div>
<div class="status-dot" id="statusDot" title="Server status"></div>
</header>
<div id="page" class="page"></div>
</section>
</div>
<div id="modalRoot"></div>
<div id="toasts" class="toasts"></div>
</body>
</html>