diff --git a/backend/internal/domain/constants.go b/backend/internal/domain/constants.go index 9920a76b..36d043b5 100644 --- a/backend/internal/domain/constants.go +++ b/backend/internal/domain/constants.go @@ -27,10 +27,10 @@ const ( // Account type constants const ( - AccountTypeOAuth = "oauth" // OAuth类型账号(full scope: profile + inference) - AccountTypeSetupToken = "setup-token" // Setup Token类型账号(inference only scope) - AccountTypeAPIKey = "apikey" // API Key类型账号 - AccountTypeUpstream = "upstream" // 上游透传类型账号(通过 Base URL + API Key 连接上游) + AccountTypeOAuth = "oauth" // OAuth类型账号(full scope: profile + inference) + AccountTypeSetupToken = "setup-token" // Setup Token类型账号(inference only scope) + AccountTypeAPIKey = "apikey" // API Key类型账号 + AccountTypeUpstream = "upstream" // 上游透传类型账号(通过 Base URL + API Key 连接上游) AccountTypeBedrock = "bedrock" // AWS Bedrock 类型账号(通过 SigV4 签名连接 Bedrock) AccountTypeBedrockAPIKey = "bedrock-apikey" // AWS Bedrock API Key 类型账号(通过 Bearer Token 连接 Bedrock) ) diff --git a/backend/internal/service/bedrock_stream.go b/backend/internal/service/bedrock_stream.go index 30c1011b..98196d27 100644 --- a/backend/internal/service/bedrock_stream.go +++ b/backend/internal/service/bedrock_stream.go @@ -282,8 +282,8 @@ func (d *bedrockEventStreamDecoder) Decode() ([]byte, error) { // 验证 message CRC(覆盖 prelude + headers + payload) messageCRC := bedrockReadUint32(data[len(data)-4:]) h := crc32.New(crc32IEEETable) - h.Write(prelude) - h.Write(data[:len(data)-4]) + _, _ = h.Write(prelude) + _, _ = h.Write(data[:len(data)-4]) if h.Sum32() != messageCRC { return nil, fmt.Errorf("eventstream message CRC mismatch") } diff --git a/backend/internal/service/bedrock_stream_test.go b/backend/internal/service/bedrock_stream_test.go index 500b9292..3d066137 100644 --- a/backend/internal/service/bedrock_stream_test.go +++ b/backend/internal/service/bedrock_stream_test.go @@ -76,15 +76,15 @@ func TestExtractEventStreamHeaderValue(t *testing.T) { buildStringHeader := func(name, value string) []byte { var buf bytes.Buffer // name length (1 byte) - buf.WriteByte(byte(len(name))) + _ = buf.WriteByte(byte(len(name))) // name - buf.WriteString(name) + _, _ = buf.WriteString(name) // value type (7 = string) - buf.WriteByte(7) + _ = buf.WriteByte(7) // value length (2 bytes, big-endian) _ = binary.Write(&buf, binary.BigEndian, uint16(len(value))) // value - buf.WriteString(value) + _, _ = buf.WriteString(value) return buf.Bytes() } @@ -100,9 +100,9 @@ func TestExtractEventStreamHeaderValue(t *testing.T) { t.Run("multiple headers", func(t *testing.T) { var buf bytes.Buffer - buf.Write(buildStringHeader(":content-type", "application/json")) - buf.Write(buildStringHeader(":event-type", "chunk")) - buf.Write(buildStringHeader(":message-type", "event")) + _, _ = buf.Write(buildStringHeader(":content-type", "application/json")) + _, _ = buf.Write(buildStringHeader(":event-type", "chunk")) + _, _ = buf.Write(buildStringHeader(":message-type", "event")) headers := buf.Bytes() assert.Equal(t, "chunk", extractEventStreamHeaderValue(headers, ":event-type")) @@ -123,17 +123,17 @@ func TestBedrockEventStreamDecoder(t *testing.T) { // Build headers var headersBuf bytes.Buffer // :event-type header - headersBuf.WriteByte(byte(len(":event-type"))) - headersBuf.WriteString(":event-type") - headersBuf.WriteByte(7) // string type + _ = headersBuf.WriteByte(byte(len(":event-type"))) + _, _ = headersBuf.WriteString(":event-type") + _ = headersBuf.WriteByte(7) // string type _ = binary.Write(&headersBuf, binary.BigEndian, uint16(len(eventType))) - headersBuf.WriteString(eventType) + _, _ = headersBuf.WriteString(eventType) // :message-type header - headersBuf.WriteByte(byte(len(":message-type"))) - headersBuf.WriteString(":message-type") - headersBuf.WriteByte(7) + _ = headersBuf.WriteByte(byte(len(":message-type"))) + _, _ = headersBuf.WriteString(":message-type") + _ = headersBuf.WriteByte(7) _ = binary.Write(&headersBuf, binary.BigEndian, uint16(len("event"))) - headersBuf.WriteString("event") + _, _ = headersBuf.WriteString("event") headers := headersBuf.Bytes() headersLen := uint32(len(headers)) @@ -149,10 +149,10 @@ func TestBedrockEventStreamDecoder(t *testing.T) { // Build frame: prelude + prelude_crc + headers + payload var frame bytes.Buffer - frame.Write(preludeBytes) + _, _ = frame.Write(preludeBytes) _ = binary.Write(&frame, binary.BigEndian, preludeCRC) - frame.Write(headers) - frame.Write(payload) + _, _ = frame.Write(headers) + _, _ = frame.Write(payload) // Message CRC covers everything before itself messageCRC := crc32.Checksum(frame.Bytes(), crc32IeeeTab) @@ -173,9 +173,9 @@ func TestBedrockEventStreamDecoder(t *testing.T) { t.Run("skip non-chunk events", func(t *testing.T) { // Write initial-response followed by chunk var buf bytes.Buffer - buf.Write(buildFrame("initial-response", []byte(`{}`))) + _, _ = buf.Write(buildFrame("initial-response", []byte(`{}`))) chunkPayload := []byte(`{"bytes":"aGVsbG8="}`) - buf.Write(buildFrame("chunk", chunkPayload)) + _, _ = buf.Write(buildFrame("chunk", chunkPayload)) decoder := newBedrockEventStreamDecoder(&buf) result, err := decoder.Decode() @@ -214,11 +214,11 @@ func TestBedrockEventStreamDecoder(t *testing.T) { payload := []byte(`{"bytes":"dGVzdA=="}`) var headersBuf bytes.Buffer - headersBuf.WriteByte(byte(len(":event-type"))) - headersBuf.WriteString(":event-type") - headersBuf.WriteByte(7) + _ = headersBuf.WriteByte(byte(len(":event-type"))) + _, _ = headersBuf.WriteString(":event-type") + _ = headersBuf.WriteByte(7) _ = binary.Write(&headersBuf, binary.BigEndian, uint16(len("chunk"))) - headersBuf.WriteString("chunk") + _, _ = headersBuf.WriteString("chunk") headers := headersBuf.Bytes() headersLen := uint32(len(headers)) @@ -230,10 +230,10 @@ func TestBedrockEventStreamDecoder(t *testing.T) { preludeBytes := preludeBuf.Bytes() var frame bytes.Buffer - frame.Write(preludeBytes) + _, _ = frame.Write(preludeBytes) _ = binary.Write(&frame, binary.BigEndian, crc32.Checksum(preludeBytes, castagnoliTab)) - frame.Write(headers) - frame.Write(payload) + _, _ = frame.Write(headers) + _, _ = frame.Write(payload) _ = binary.Write(&frame, binary.BigEndian, crc32.Checksum(frame.Bytes(), castagnoliTab)) decoder := newBedrockEventStreamDecoder(bytes.NewReader(frame.Bytes())) diff --git a/backend/internal/service/domain_constants.go b/backend/internal/service/domain_constants.go index 26905fb9..ad64b467 100644 --- a/backend/internal/service/domain_constants.go +++ b/backend/internal/service/domain_constants.go @@ -29,10 +29,10 @@ const ( // Account type constants const ( - AccountTypeOAuth = domain.AccountTypeOAuth // OAuth类型账号(full scope: profile + inference) - AccountTypeSetupToken = domain.AccountTypeSetupToken // Setup Token类型账号(inference only scope) - AccountTypeAPIKey = domain.AccountTypeAPIKey // API Key类型账号 - AccountTypeUpstream = domain.AccountTypeUpstream // 上游透传类型账号(通过 Base URL + API Key 连接上游) + AccountTypeOAuth = domain.AccountTypeOAuth // OAuth类型账号(full scope: profile + inference) + AccountTypeSetupToken = domain.AccountTypeSetupToken // Setup Token类型账号(inference only scope) + AccountTypeAPIKey = domain.AccountTypeAPIKey // API Key类型账号 + AccountTypeUpstream = domain.AccountTypeUpstream // 上游透传类型账号(通过 Base URL + API Key 连接上游) AccountTypeBedrock = domain.AccountTypeBedrock // AWS Bedrock 类型账号(通过 SigV4 签名连接 Bedrock) AccountTypeBedrockAPIKey = domain.AccountTypeBedrockAPIKey // AWS Bedrock API Key 类型账号(通过 Bearer Token 连接 Bedrock) ) diff --git a/backend/internal/service/gateway_service.go b/backend/internal/service/gateway_service.go index 978ec98f..ce1c746c 100644 --- a/backend/internal/service/gateway_service.go +++ b/backend/internal/service/gateway_service.go @@ -5853,25 +5853,6 @@ func containsBetaToken(header, token string) bool { return false } -// filterBetaTokensFromHeader removes tokens present in filterSet from a comma-separated header value. -// Returns the filtered header string, or "" if all tokens were removed. -func filterBetaTokensFromHeader(header string, filterSet map[string]struct{}) string { - if header == "" || len(filterSet) == 0 { - return header - } - var kept []string - for _, p := range strings.Split(header, ",") { - t := strings.TrimSpace(p) - if t == "" { - continue - } - if _, filtered := filterSet[t]; !filtered { - kept = append(kept, t) - } - } - return strings.Join(kept, ", ") -} - func filterBetaTokens(tokens []string, filterSet map[string]struct{}) []string { if len(tokens) == 0 || len(filterSet) == 0 { return tokens