1. 28 Dec, 2025 1 commit
    • yangjianbo's avatar
      fix: 代码的核心问题是判错条件用错了层级: · fd51ff69
      yangjianbo authored
        - apiKeyService.GetByKey(...) 返回的“找不到 API key”在这个项目里通常会被翻译成业务错误(比如
          service.ErrApiKeyNotFound 这类 ApplicationError),而不是直接把 gorm.ErrRecordNotFound 透传到中
          间件层。
        - 因此你在中间件里用 errors.Is(err, gorm.ErrRecordNotFound) 去判断“无效 key”,很容易匹配不到(尤其
          是:后面加 Redis 缓存、换存储实现、或测试里用 stub repo 时,根本不会出现 gorm 的错误)。
        - 匹配不到时就会走到 500 Failed to validate API key,导致无效 API key 被错误地当成服务端故障返回
          500(应该是 401)。
      
        修复思路:中间件不要依赖 gorm 的错误,改成判断业务层错误,例如:
      
        if errors.Is(err, service.ErrApiKeyNotFound) {
            abortWithGoogleError(c, 401, "Invalid API key")
            return
        }
      
        如果你把 GetByKey 的“not found”统一封装成业务错误,这样才不会被底层实现(gorm/redis/mock)影响。
      fd51ff69
  2. 27 Dec, 2025 1 commit
    • IanShaw's avatar
      fix: 修复 Gemini API 认证和 /responses 端点路由问题 (#45) · cf8a6452
      IanShaw authored
      * fix(middleware): 修复 Gemini API Key 认证中间件用户上下文类型错误
      
      修复了 ApiKeyAuthWithSubscriptionGoogle 中间件中设置用户上下文时的类型错误。
      
      **问题:**
      - 中间件直接设置 `apiKey.User` 对象到上下文
      - 导致 handler 中获取 `AuthSubject` 时类型断言失败
      - 所有 Gemini v1beta 端点返回 500 "User context not found"
      
      **修复:**
      - 改为设置 `AuthSubject` 结构体,与 `api_key_auth.go` 保持一致
      - 添加 `ContextKeyUserRole` 设置以完整支持角色检查
      
      **影响范围:**
      - Gemini v1beta API 端点 (generateContent, streamGenerateContent)
      - 使用 Google API Key 认证的所有请求
      
      **测试:**
      - 验证 Gemini CLI 调用成功返回 200
      - 确认用户上下文正确传递到 handler
      
      * fix(web): 修复 /responses 端点被前端中间件拦截的问题
      
      - 将 /responses 路径添加到 API 白名单,防止其被当作前端路由处理
      - 修复 /responses 端点返回 HTML 而非 API 响应的 BUG
      - 解决 codex CLI stream 在远程服务器上断开连接的问题
      
      根本原因:
      在 6c469b42 提交中添加了 /responses 路由,但未同步更新前端嵌入中间件
      的 API 白名单,导致该路由被拦截并返回 index.html 而非 API 响应。
      cf8a6452
  3. 26 Dec, 2025 2 commits
    • ianshaw's avatar
      fix(backend): 修复 rebase 后的代码集成问题 · 9780f0fd
      ianshaw authored
      - 更新 middleware import 路径到 internal/server/middleware
      - 修复 api_key_auth_google.go 使用正确的 service 类型
      - 更新 router.go 和 http.go 支持 Gemini v1beta 路由
      - 在 routes/gateway.go 中添加 Gemini v1beta API 端点
      - 在 routes/admin.go 中添加 Gemini OAuth 路由
      - 更新 wire.go 添加 GeminiOAuthService cleanup
      - 重新生成 wire_gen.go
      9780f0fd
    • ianshaw's avatar
      feat(backend): 添加 Google API Key 认证中间件 · 50734c5e
      ianshaw authored
      - 新增 api_key_auth_google.go: 支持 x-goog-api-key 格式认证
      - 更新 api_key_auth.go: 适配 Gemini 原生 API 格式
      50734c5e