Skip to content

【架构优化】合并 UpdateUserCredentials 中四处重复的密钥清空/覆盖逻辑为 updatedSecret #767

Open

Description

@fx-kurumi

现状问题

internal/repo/users.go 中 UsersRepo.UpdateUserCredentials(约 62 行)和 applyAgentCLICredentialUpdates 里,同一段「密钥字段更新」规则重复写了 4 遍:

if update.XxxAPIKeyClear {
    user.XxxAPIKey = ""
} else if value := strings.TrimSpace(update.XxxAPIKey); value != "" {
    user.XxxAPIKey = value
}

分别用于 CodeBuddy、Codex、Claude Code 的 API Key 以及各 Agent CLI 凭据的 APIKey。规则一致(清空优先;空白输入保持原值;否则用去掉首尾空白的新值覆盖),但散落多处,后续新增凭据或调整规则容易漏改。

重构方案

  • 新增包内函数 updatedSecret(current, value string, clear bool) string,集中表达上述规则。
  • 上述 4 处改为一行调用 x = updatedSecret(x, update.X, update.XClear)。
  • Git Token 分支带有额外的「清掉工蜂 OAuth refresh token」副作用,保持原写法不动。

影响范围

仅 internal/repo/users.go 内部实现;对外接口、JSON 字段、行为与报错均不变。

验证方式

  • 新增 updatedSecret 单元测试,覆盖清空、空白输入保持原值、去空白覆盖、清空优先于新值。
  • gofmt、go vet ./internal/repo/、go test ./internal/repo/ 通过(含已有 TestAgentCLICredentialsRoundTrip、TestProviderUserCredentials)。

Activity

  1. Robert0622 commented on Nov 14, 2026

    @Robert0622
    Collaborator

    已对照当前 main 代码核实:internal/repo/users.go 的 UpdateUserCredentials(283/291/296 行)与 applyAgentCLICredentialUpdates(385 行)共 4 处重复“清空优先、空白输入保持原值、否则覆盖”逻辑;仓库内未发现 updatedSecret(grep 无命中),与描述完全匹配,方案与验收标准清晰可执行,非重复。已记入本 Loop 候选,backlog 当前已满(5/5),待腾出名额后建单开发。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions