设置页重做:配置文件下载上传、内核参数、资源、免责声明
配置每次落盘都打顶层 patchbay: 标记(盐加版本的哈希)。内核忽略未知 顶层键(yaml.Unmarshal 没开严格模式,config/config.go:612)。刻意不对 内容做哈希:本项目只接管部分段落,手改其余段落是正常用法,内容哈希 会把合法手改判成无效。上传配置时靠标记分流:有标记的确认后替换, 没有的用更重的措辞确认导入;两者都走 config-store 完整保护链路 (新端点 POST /api/config/import)。自动备份列表从界面撤下,改成 下载当前配置 + 拖放上传。 内核参数一组编辑五个老式顶层端口和 keep-alive-interval(config.go:444, 整数秒),走带基准指纹的保存链路。资源一组接 POST /configs/geo (同步接口,透传给了 300 秒超时)。测速地址成为本地偏好,延迟测试 读它;prefs 模块顶层的浏览器全局加了存在性守卫——api.ts 开始引用 prefs,而 bun test 环境没有 localStorage。 退出登录挪到侧栏底部;密度设置从设置页撤下(侧栏按钮还在); 免责声明和关于做成子页(左上角返回),登录页输入框下加同一份 免责声明的弹层入口。
This commit is contained in:
@@ -82,8 +82,13 @@ describe('落盘保护链路(内核在线)', () => {
|
||||
|
||||
it('内容没变直接返回,不备份也不重载', async () => {
|
||||
const env = makeEnv()
|
||||
// 先落一次盘让文件带上 Patchbay 标记——没有标记的文件第一次保存必有
|
||||
// 「补标记」这一处内容变化,短路只发生在稳态
|
||||
const first = await readConfig(env)
|
||||
await applyConfig(env, first.data, first.revision)
|
||||
const { data, revision } = await readConfig(env)
|
||||
const before = reloadCount
|
||||
const backupsBefore = (await listBackups(env)).length
|
||||
|
||||
const result = await applyConfig(env, data, revision)
|
||||
|
||||
@@ -93,7 +98,7 @@ describe('落盘保护链路(内核在线)', () => {
|
||||
expect(result.reloadMessage).toBe('内容没有变化')
|
||||
}
|
||||
expect(reloadCount).toBe(before)
|
||||
expect(await listBackups(env)).toHaveLength(0)
|
||||
expect((await listBackups(env)).length).toBe(backupsBefore)
|
||||
})
|
||||
|
||||
it('自检拦下断引用:入站的 proxy 指向不存在的出站', async () => {
|
||||
@@ -137,7 +142,11 @@ describe('落盘保护链路(内核在线)', () => {
|
||||
const result = await restoreBackup(env, backup!)
|
||||
|
||||
expect(result.ok).toBe(true)
|
||||
expect(readFileSync(env.configPath, 'utf8')).toBe(ORIGINAL)
|
||||
// 还原也走落盘链路,所以会重新打上 Patchbay 标记——内容回去了,但不逐字节等于旧文件
|
||||
const body = readFileSync(env.configPath, 'utf8')
|
||||
expect(body).toContain('mixed-port: 7890')
|
||||
expect(body).not.toContain('7891')
|
||||
expect(body).toContain('patchbay:')
|
||||
})
|
||||
|
||||
it('恢复只认列表里的名字,路径穿越进不来', async () => {
|
||||
|
||||
Reference in New Issue
Block a user