fix: 封堵 ask-status domain 枚举、私聊写路径 fail-open、压缩兜底重复提交
三处小修 + 两个格式清理,均来自全盘复查: 1. ask-status domain 枚举:ErrUserNotExists 分支原返回空数组、正常分支返回带元素 数组,凭空/非空可枚举 domain 是否存在(含被 L1 隐藏或设了页面密码的半公开箱)。 改为箱主不存在时也回显 ok:false,四种失败响应完全同形。 2. 私聊 SendMessage 写路径用 FeatureStateOf(fail-open 变体):读配置失败会回退默认值, 与「写路径必须 FeatureStateOfStrict(失败即拒)」的约定不符。此前靠 chat 默认关闭 的巧合侥幸安全,现统一改 Strict。 3. 图片压缩 submit 兜底可重复提交:capture 监听器里 tbBeginSubmit 从 Promise 回调提前 到 preventDefault 同步栈,物理阻止压缩窗口内双击重复提交。 顺带:box_views.go / message_image.go / insights 两个文件补末尾换行与 struct 字段对齐 (gofmt 干净)。
This commit is contained in:
@@ -289,6 +289,10 @@
|
||||
// 兜底:极少数情况下用户选完图立刻提交(压缩还没跑完)。
|
||||
// capture 阶段先拦下,等压缩结束再真正提交 —— 用 form.submit() 而不是
|
||||
// 再走一次 submit 事件,天然避开死循环,也不会二次触发上面的防重复逻辑。
|
||||
//
|
||||
// 注意 tbBeginSubmit(禁用按钮)必须在 preventDefault 的同一同步栈里立刻调用,
|
||||
// 而不是推迟到 Promise 回调里:大图压缩要 0.5~2s,这期间按钮若仍可点,
|
||||
// 用户双击会触发两次 submit,各等同一个压缩任务、各 form.submit() 一次。
|
||||
document.addEventListener('submit', function (e) {
|
||||
var form = e.target;
|
||||
if (!form || form.tagName !== 'FORM') return;
|
||||
@@ -301,8 +305,9 @@
|
||||
if (!waits.length) return;
|
||||
|
||||
e.preventDefault();
|
||||
// 同步进入「提交中」:物理阻止压缩窗口内的重复提交。
|
||||
if (window.tbBeginSubmit) window.tbBeginSubmit(form, e.submitter || null);
|
||||
Promise.all(waits).then(function () {
|
||||
if (window.tbBeginSubmit) window.tbBeginSubmit(form, e.submitter || null);
|
||||
form.submit();
|
||||
});
|
||||
}, true);
|
||||
|
||||
Reference in New Issue
Block a user