Files
logan 2c0bfafd8d 同步完整源码至远程:扁平化重构现状 + 未入库源文件
- 补入库:server/internal/db/dump.go、redis 分页/扫描预算测试、opsxdb-mcp main_test、
  packages/opsxdb-mcp package-lock、docs 审计与对比文档等 37 个新文件
- 含结构扁平化进行中的 80 处修改与 155 处旧结构删除(server/ src/ src-tauri/ 为当前有效源)
- 构建产物(bin/target/dist)与签名私钥仍按规则排除
2026-10-16 03:47:33 +08:00

42 lines
1.5 KiB
Go

package aitools
import (
"crypto/sha256"
"encoding/hex"
"fmt"
"strings"
)
// ConfirmBindHash 绑定 connection + 规范化语句;改语句则哈希变,须重确认。
func ConfirmBindHash(connectionID, statement string) string {
connectionID = strings.TrimSpace(connectionID)
statement = strings.Join(strings.Fields(strings.TrimSpace(statement)), " ")
sum := sha256.Sum256([]byte(connectionID + "\n" + statement))
return hex.EncodeToString(sum[:])
}
// Agent 写操作还绑定数据库,避免确认时切换到同连接的其他库。
func ConfirmAgentBindHash(connectionID, database, statement string) string {
return ConfirmBindHash(connectionID, strings.TrimSpace(database)+"\n"+statement)
}
func VerifyAgentBind(connectionID, database, statement, bind string) error {
if strings.TrimSpace(bind) == "" || !strings.EqualFold(bind, ConfirmAgentBindHash(connectionID, database, statement)) {
return fmt.Errorf("confirmBind mismatch: statement, connection or database changed; re-confirm required")
}
return nil
}
// VerifyConfirmBind 校验客户端带回的 bind;空 bind 视为不合法(桌面路径必须带)。
func VerifyConfirmBind(connectionID, statement, bind string) error {
bind = strings.TrimSpace(bind)
if bind == "" {
return fmt.Errorf("confirmBind required")
}
want := ConfirmBindHash(connectionID, statement)
if !strings.EqualFold(bind, want) {
return fmt.Errorf("confirmBind mismatch: statement or connection changed; re-confirm required")
}
return nil
}