先说 #802:我同意那里对改口令流程的解释。改口令前先用旧口令同步,成功后再用新口令重写,这个流程是合理的。这里想单独说一下旁边那个「旧口令」输入框。
我的情况是自建 kiss-worker(Cloudflare Workers),某次不小心往加密口令里粘错了一串东西,之后就改不回来了。
弹窗里的旧口令比对的是本地存的 syncEncryptKey:
https://github.com/fishjar/kiss-translator/blob/master/src/views/Options/SyncSetting.js#L188
if (encryptKeyDialogMode === "change" && oldEncryptKey !== syncEncryptKey) {
它比对的不是云端,也不是那个真正能解开云端数据的口令,而是本地那份字符串。我本地已经存成粘错的内容了,所以填真正的口令会被提示「旧口令不正确」。插件认定的当前口令,反而是那串错值。
这里有个比较尴尬的点:这个校验拦不住能打开弹窗的人。口令框虽然是 readOnly,但旁边就有眼睛图标可以明文显示(SyncSetting.js#L322-L340)。点一下眼睛,再把显示出来的内容填进「旧口令」框,就能通过这一层。它查的其实不是「你知道旧口令」,而是「你能把屏幕上已经露出的字符串再输入一遍」。
真正卡住的是后面。填真口令,过不了上面的本地值校验;照着眼睛图标填错值,changeSyncEncryptKey 第一步的 syncSettingAndRules()(sync.js#L488-L489)会拿这个错值去同步云端,还是失败。
另一条路也走不到。openEncryptKeyDialog(syncEncryptKey ? "change" : "set")(SyncSetting.js#L351),只有 syncEncryptKey 为空时才会进 set 模式。set 模式本来正适合这种恢复场景:跳过重加密,只写本地。但珰在 UI 里没有入口能把 syncEncryptKey 清空。
我最后是手动改 chrome.storage.local 里的 KISS-Translator_sync 才恢复的。
可以考虑把旧口令校验改成用它试解一次云端密文。这样验证的是实际能不能解开云端数据,也能把「本地口令和云端数据对不上」这个问题暴露出来,不会停在一句「旧口令不正确」。
另外,如果能提供一个清除口令的入口,让 syncEncryptKey 回到空值状态,也可以直接走现有的 set 路径恢复。
先说 #802:我同意那里对改口令流程的解释。改口令前先用旧口令同步,成功后再用新口令重写,这个流程是合理的。这里想单独说一下旁边那个「旧口令」输入框。
我的情况是自建 kiss-worker(Cloudflare Workers),某次不小心往加密口令里粘错了一串东西,之后就改不回来了。
弹窗里的旧口令比对的是本地存的 syncEncryptKey:
https://github.com/fishjar/kiss-translator/blob/master/src/views/Options/SyncSetting.js#L188
它比对的不是云端,也不是那个真正能解开云端数据的口令,而是本地那份字符串。我本地已经存成粘错的内容了,所以填真正的口令会被提示「旧口令不正确」。插件认定的当前口令,反而是那串错值。
这里有个比较尴尬的点:这个校验拦不住能打开弹窗的人。口令框虽然是 readOnly,但旁边就有眼睛图标可以明文显示(SyncSetting.js#L322-L340)。点一下眼睛,再把显示出来的内容填进「旧口令」框,就能通过这一层。它查的其实不是「你知道旧口令」,而是「你能把屏幕上已经露出的字符串再输入一遍」。
真正卡住的是后面。填真口令,过不了上面的本地值校验;照着眼睛图标填错值,changeSyncEncryptKey 第一步的 syncSettingAndRules()(sync.js#L488-L489)会拿这个错值去同步云端,还是失败。
另一条路也走不到。openEncryptKeyDialog(syncEncryptKey ? "change" : "set")(SyncSetting.js#L351),只有 syncEncryptKey 为空时才会进 set 模式。set 模式本来正适合这种恢复场景:跳过重加密,只写本地。但珰在 UI 里没有入口能把 syncEncryptKey 清空。
我最后是手动改 chrome.storage.local 里的 KISS-Translator_sync 才恢复的。
可以考虑把旧口令校验改成用它试解一次云端密文。这样验证的是实际能不能解开云端数据,也能把「本地口令和云端数据对不上」这个问题暴露出来,不会停在一句「旧口令不正确」。
另外,如果能提供一个清除口令的入口,让 syncEncryptKey 回到空值状态,也可以直接走现有的 set 路径恢复。