Security page, admin quick controls, and whitelist reload self-healing
- RCON client retries once on a fresh connection after stale-socket timeouts (panel idle overnight held dead sockets, so 'whitelist reload' silently failed and approvals needed a server restart) - Auth watcher verifies pending players against the LIVE whitelist every 5s and re-writes/reloads if the server missed it, refunding lost window time - Log watcher records blocked join attempts (name + IP) with rate- limited notifications — scanner bots are now visible in the panel - New Security page: blocked-attempt log with one-click IP ban, banned players/IPs management, kick-everyone lockdown - Player detail modal: ban, op/deop, gamemode switching - Overview quick controls: time/weather/difficulty, gamerule toggles (keepInventory, mobGriefing, PvP...), broadcast box - Settings toggles for blocked-attempt notifications (panel + Discord) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
4fe304c5af
commit
deeeaf0042
13 files changed
+809
-3
No files matched your search
@@ -6,6 +6,7 @@ import { Play, Square, RotateCw, HardDrive, Globe2, Cuboid } from "lucide-react"
|
||||
import { api, useApi, useSSE, toast } from "@/lib/api";
|
||||
import { Card, StatTile, Button, Badge, EmptyState } from "@/components/ui";
|
||||
import { Sparkline, UsageBar, type Point } from "@/components/charts";
|
||||
import { QuickControls } from "@/components/quickcontrols";
|
||||
import { fmtBytes, fmtDuration, timeAgo, fmtCountdown } from "@/lib/format";
|
||||
|
||||
type ServerData = {
|
||||
@@ -50,6 +51,15 @@ const ACTIVITY_LABELS: Record<string, { label: string; color: "good" | "warn" |
|
||||
power: { label: "power", color: "muted" },
|
||||
console: { label: "console", color: "muted" },
|
||||
world_reset: { label: "world reset", color: "crit" },
|
||||
blocked: { label: "blocked", color: "crit" },
|
||||
ban: { label: "banned", color: "crit" },
|
||||
ban_ip: { label: "IP banned", color: "crit" },
|
||||
pardon: { label: "unbanned", color: "info" },
|
||||
pardon_ip: { label: "IP unbanned", color: "info" },
|
||||
kick_all: { label: "kicked all", color: "warn" },
|
||||
admin: { label: "admin", color: "info" },
|
||||
whitelist_heal: { label: "whitelist re-synced", color: "warn" },
|
||||
password_reset: { label: "password reset", color: "info" },
|
||||
};
|
||||
|
||||
export default function OverviewPage() {
|
||||
@@ -218,6 +228,9 @@ export default function OverviewPage() {
|
||||
</Card>
|
||||
)}
|
||||
|
||||
{/* admin quick controls */}
|
||||
<QuickControls running={running} />
|
||||
|
||||
{/* world + disk */}
|
||||
<Card title="World & storage">
|
||||
<div className="space-y-3">
|
||||
|
||||
Reference in new issue
Block a user