- 补入库: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)与签名私钥仍按规则排除
42 lines
1.5 KiB
Go
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
|
|
}
|