feat: 新增作息报时器功能并替换短链接前缀为/to/

- 新增作息报时器独立模块,包含完整的日程管理、语音播报和待机功能
- 短链接正式前缀由/l/改为/to/,解决手机小屏下与I、i、1字形混淆问题
- 保留旧前缀/l/、/L/、/I/、/i/兼容已分发的旧短链
- 新增短码大小写兜底匹配,仅唯一匹配时生效避免歧义
- 新增防爆紧急替换功能,可轮换首页鉴权并替换短链接
- 新增多个调试和集成测试脚本,保障数据安全和功能回归
This commit is contained in:
yangxiangyuan
2026-10-09 14:04:37 +08:00
parent ac475b6659
commit a3e8911deb
131 changed files with 7695 additions and 60 deletions
+55
View File
@@ -31,11 +31,66 @@
</header>
<nav id="toolTabs" class="tab-nav" hidden>
<button class="tab-btn" data-tab="emergency">首页导航防爆紧急替换</button>
<button class="tab-btn active" data-tab="nav">首页导航生成器</button>
<button class="tab-btn" data-tab="tool">Tool 令牌生成器</button>
</nav>
<main id="appMain" hidden>
<section class="tab-panel" data-panel="emergency">
<div class="layout-grid">
<section class="card">
<div class="card-head">
<h2>首页导航防爆紧急替换</h2>
</div>
<p class="card-desc">
怀疑首页 token 或短链接被窥屏、被泄露,或有危险预感时,按顺序点下面两个按钮即可完成更换。
旧 token 与旧短链接都会<strong>立即失效</strong>,无需手工改文件、改数据库。
</p>
<div class="actions wrap">
<button id="btnEmergencyRotate" class="btn btn-primary">自动生成向后 X 个月的鉴权,且当前鉴权立即失效</button>
<select id="emergencyMonths" class="input emergency-months" title="有效期(月)"></select>
<button id="btnEmergencyRelink" class="btn btn-primary">将新的首页鉴权token,自动生成新的短链接,且当前短链接立即失效</button>
</div>
<label class="field">
<span>执行过程</span>
<textarea id="emergencyLog" class="textarea mono emergency-log" rows="14" readonly wrap="off" placeholder="点击上方按钮后,这里会滚动显示每一步的执行过程…"></textarea>
</label>
<label class="field">
<span>最终 token(第 1 步产出)</span>
<textarea id="emergencyTokenOut" class="textarea mono" rows="4" readonly wrap="off" placeholder="第 1 步完成后,新的首页鉴权 token 会显示在这里"></textarea>
</label>
<div class="actions">
<button id="btnEmergencyCopyToken" class="btn">复制 token</button>
</div>
<label class="field">
<span>最终短链接(第 2 步产出)</span>
<textarea id="emergencyShortUrlOut" class="textarea mono" rows="2" readonly wrap="off" placeholder="第 2 步完成后,新的短链接会显示在这里"></textarea>
</label>
<div class="actions">
<button id="btnEmergencyCopyShortUrl" class="btn">复制短链接</button>
</div>
<div id="emergencyMeta" class="result-grid"></div>
<details class="raw-details">
<summary>说明与回滚</summary>
<div class="card-desc">
第 1 步:轮换导航密钥对(`config/nav-private.jwk.json` 与 `config/nav.jwk.json`),
并用新私钥签发一枚有效期 30 天的首页 token。旧 token 会因旧公钥离开信任池而立即失效。<br>
第 2 步:把新 token 绑到一条全新的短链接上,同时把旧的首页短链置为停用,旧短链立即失效。<br>
两步执行前都会自动备份(密钥文件 + 短链库)到 `config/_nav-key-backup-时间戳/`,需要回滚时把备份覆盖回原位即可。<br>
原有的手工做法(首页导航生成器 / Tool 令牌生成器 / 物理替换文件)全部保留有效,本页签只是快捷通道。
</div>
</details>
</section>
</div>
</section>
<section class="tab-panel active" data-panel="nav">
<div class="layout-grid">
<section class="card">