Files
MC_Report/public/index.html
canglan 65edbaf157 refactor: session-based external auth, dynamic sources, drop netease UID
Auth (external API):
- ID: 16-digit random (non-sequential); Secret: SeaReport- + 32 hex
- POST /auth/session: ID+Secret -> Bearer SESSION (24h, single-session,
  old session invalidated on re-issue, disabled client invalidates)
- clientAuth now validates Bearer SESSION via api_sessions JOIN api_clients

Sources (dynamic, no default, open-source friendly):
- sources table + CRUD route (/api/sources, owner; delete guarded by usage)
- users/user_identities.source ENUM -> VARCHAR, seeded netease/skin
- register/admin create/identity bind: validate against enabled sources
- UI: 来源管理 page; source dropdowns loaded dynamically everywhere
  (register, dashboard identity, users admin, bans), labels dynamic

UID removal:
- game_uid/reporter_game_uid no longer required (db default '', validations
  dropped, frontend fields optional)

Docs: EXTERNAL-API.md session flow + new credential format; API.md updated
Verified: 37 checks (syntax, session logic, source CRUD, UID removal, docs)
2026-08-19 20:08:06 +08:00

85 lines
3.3 KiB
HTML

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title id="site-title">MC举报系统</title>
<link rel="stylesheet" href="css/style.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
</head>
<body>
<div id="top-bar">
<div class="top-bar-inner">
<a href="#/home" class="top-logo"><i class="fas fa-shield-halved"></i><span id="logo-text">MC举报系统</span></a>
<div id="top-auth">
<a href="#/login" class="btn btn-o btn-sm"><i class="fas fa-sign-in-alt"></i> 登录</a>
<a href="#/register" class="btn btn-p btn-sm"><i class="fas fa-user-plus"></i> 注册</a>
</div>
</div>
</div>
<div id="app">
<div id="public-page" class="page hidden"></div>
<div id="main-layout" class="hidden">
<aside id="sidebar">
<div class="sidebar-header"><i class="fas fa-shield-halved"></i><span id="sidebar-title">举报系统</span></div>
<nav id="sidebar-nav"></nav>
<div class="sidebar-footer">
<div id="user-info"></div>
<button class="btn btn-sm btn-outline w-full" id="sidebar-logout"><i class="fas fa-sign-out-alt"></i> 退出</button>
</div>
</aside>
<main id="main-content">
<header id="page-header"><h1 id="page-title"></h1><div id="page-actions"></div></header>
<div id="page-alert"></div>
<div id="page-content"></div>
</main>
</div>
</div>
<footer id="page-footer">
<div class="footer-inner">
<span id="footer-copyright">&copy; 2024 MC举报系统</span>
<span id="footer-icp"></span>
</div>
</footer>
<div id="modal-overlay" class="hidden">
<div class="modal-box">
<div class="modal-h"><h3 id="modal-title"></h3><button id="modal-close-btn">&times;</button></div>
<div class="modal-b" id="modal-body"></div>
</div>
</div>
<script src="js/utils.js"></script>
<script src="js/api.js"></script>
<script src="js/auth.js"></script>
<script src="js/pages/install.js"></script>
<script src="js/pages/login.js"></script>
<script src="js/pages/register.js"></script>
<script src="js/pages/forgot.js"></script>
<script src="js/pages/verify.js"></script>
<script src="js/pages/home.js"></script>
<script src="js/pages/dashboard.js"></script>
<script src="js/pages/tickets.js"></script>
<script src="js/pages/ticket-create.js"></script>
<script src="js/pages/ticket-detail.js"></script>
<script src="js/pages/tracking.js"></script>
<script src="js/pages/unclaimed.js"></script>
<script src="js/pages/users.js"></script>
<script src="js/pages/templates.js"></script>
<script src="js/pages/notifications.js"></script>
<script src="js/pages/external-api.js"></script>
<script src="js/pages/settings-page.js"></script>
<script src="js/pages/export-page.js"></script>
<script src="js/pages/polls.js"></script>
<script src="js/pages/servers.js"></script>
<script src="js/pages/bans.js"></script>
<script src="js/pages/logs.js"></script>
<script src="js/pages/sources.js"></script>
<script src="js/pages/features.js"></script>
<script src="js/pages/feature-detail.js"></script>
<script src="js/app.js"></script>
</body>
</html>