feat: rebuild xiteng.site homelab platform

This commit is contained in:
2026-08-12 09:48:25 +08:00
parent 557b0eca33
commit 5b84988789
128 changed files with 14979 additions and 292 deletions
+144
View File
@@ -0,0 +1,144 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="color-scheme" content="light">
<meta name="theme-color" content="#f0c94b">
<meta name="robots" content="noindex, nofollow">
<title>Portal 管理 / xiteng.site</title>
<link rel="icon" href="/favicon.svg" type="image/svg+xml">
<link rel="icon" href="/icons/favicon-32.png" sizes="32x32" type="image/png">
<link rel="apple-touch-icon" href="/icons/apple-touch-icon.png">
<link rel="manifest" href="/manifest.webmanifest">
<link rel="stylesheet" href="/styles.css">
<script src="/admin.js" defer></script>
</head>
<body class="admin-page">
<header class="topbar">
<nav class="shell nav" aria-label="管理导航">
<a class="brand" href="/">liooil / xiteng.site</a>
<div class="nav-links">
<a href="#identity">身份</a>
<a href="#vault">Key Vault</a>
<a href="#components">组件</a>
<a href="/account">我的凭据</a>
<a href="/">公开主页</a>
</div>
</nav>
</header>
<main class="shell admin-main">
<section class="admin-heading">
<p class="eyebrow">ADMIN CONTROL PLANE</p>
<h1>身份、凭据与组件</h1>
<p>
Authentik 是唯一身份系统。只有用户名严格等于 <code>liooil</code> 的会话可以访问本页;
Key Vault 独立负责 Backend Credential,管理页不会保存或回显密钥明文。
</p>
<p id="admin-session" class="admin-session" aria-live="polite">正在验证管理员会话…</p>
</section>
<section class="admin-summary" aria-label="管理摘要">
<div><strong id="admin-users"></strong><span>家庭用户</span></div>
<div><strong id="admin-credentials"></strong><span>Vault 凭据</span></div>
<div><strong id="admin-total"></strong><span>动态组件</span></div>
<div><strong id="admin-down"></strong><span>不可用组件</span></div>
</section>
<section id="identity" class="admin-panel">
<div class="admin-panel-heading">
<div>
<p class="section-kicker">AUTHENTIK / IDENTITY</p>
<h2>用户与访问策略</h2>
</div>
<button id="identity-refresh" class="admin-action" type="button">刷新</button>
</div>
<div id="identity-status" class="admin-notice" aria-live="polite">正在连接 Authentik…</div>
<form id="identity-search-form" class="admin-form admin-form-inline compact">
<label>搜索<input name="search" maxlength="150" placeholder="用户名、显示名或邮箱"></label>
<button class="admin-action" type="submit">搜索</button>
</form>
<div class="admin-form-grid">
<form id="user-create-form" class="admin-form">
<h3>新建普通用户</h3>
<label>用户名<input name="username" required maxlength="150" autocomplete="off"></label>
<label>显示名<input name="name" required maxlength="160" autocomplete="off"></label>
<label>邮箱<input name="email" type="email" maxlength="254" autocomplete="off"></label>
<button class="admin-action" type="submit">创建并加入 liuhome</button>
</form>
<form id="group-create-form" class="admin-form">
<h3>新建用户组</h3>
<label>名称<input name="name" required maxlength="160" autocomplete="off"></label>
<button class="admin-action" type="submit">创建用户组</button>
<p><code>liuhome</code> 是家庭基础组,不能重命名或删除。</p>
</form>
</div>
<div class="admin-subsection">
<h3>用户</h3>
<div id="identity-users" class="admin-list"><div class="loading-card">正在读取用户…</div></div>
</div>
<div class="admin-subsection">
<h3>用户组</h3>
<div id="identity-groups" class="admin-list"><div class="loading-card">正在读取用户组…</div></div>
</div>
<div class="admin-subsection">
<h3>非开放服务权限矩阵</h3>
<p class="admin-help">每个服务只允许所选用户组;当前统一使用 <code>liuhome</code></p>
<div id="identity-applications" class="admin-list"><div class="loading-card">正在读取应用…</div></div>
</div>
<div class="admin-subsection">
<h3>身份操作审计</h3>
<div id="identity-audit" class="admin-audit"></div>
</div>
</section>
<section id="vault" class="admin-panel">
<div class="admin-panel-heading">
<div>
<p class="section-kicker">KEY VAULT</p>
<h2>Backend Provider 凭据</h2>
</div>
<button id="vault-refresh" class="admin-action" type="button">刷新</button>
</div>
<div class="admin-notice">
管理员只能管理 Backend CredentialFrontend Credential 始终保留在用户浏览器中。
</div>
<form id="credential-create-form" class="admin-form admin-form-inline">
<label>所有者<input value="当前 Authentik 管理员会话" disabled></label>
<label>Provider<select name="providerId" id="admin-credential-provider" required></select></label>
<label>名称<input name="name" required maxlength="120" value="default"></label>
<label>API Key<input name="apiKey" type="password" required maxlength="32768" autocomplete="new-password"></label>
<button class="admin-action" type="submit">加密保存</button>
</form>
<div id="vault-credentials" class="admin-list">
<div class="loading-card">正在读取凭据元数据…</div>
</div>
<div class="admin-subsection">
<h3>审计</h3>
<div id="vault-audit" class="admin-audit"></div>
</div>
</section>
<section id="components" class="admin-panel">
<div class="admin-panel-heading">
<div>
<p class="section-kicker">REGISTRY / MONITORING</p>
<h2>组件生命周期</h2>
</div>
<button id="admin-refresh" class="admin-action" type="button">刷新</button>
</div>
<p id="admin-updated" class="admin-help" aria-live="polite">正在读取 Registry…</p>
<div id="admin-components" class="admin-components" aria-live="polite">
<div class="loading-card">正在读取组件生命周期…</div>
</div>
</section>
</main>
</body>
</html>