feat: 认证key兼容处理
This commit is contained in:
@@ -60,25 +60,6 @@ func (ch *AnthropicChannel) IsStreamRequest(c *gin.Context, bodyBytes []byte) bo
|
||||
return false
|
||||
}
|
||||
|
||||
// ExtractKey extracts the API key from the x-api-key header.
|
||||
func (ch *AnthropicChannel) ExtractKey(c *gin.Context) string {
|
||||
// Check x-api-key header (Anthropic's standard)
|
||||
if key := c.GetHeader("x-api-key"); key != "" {
|
||||
return key
|
||||
}
|
||||
|
||||
// Fallback to Authorization header for compatibility
|
||||
authHeader := c.GetHeader("Authorization")
|
||||
if authHeader != "" {
|
||||
const bearerPrefix = "Bearer "
|
||||
if strings.HasPrefix(authHeader, bearerPrefix) {
|
||||
return authHeader[len(bearerPrefix):]
|
||||
}
|
||||
}
|
||||
|
||||
return ""
|
||||
}
|
||||
|
||||
// ValidateKey checks if the given API key is valid by making a messages request.
|
||||
func (ch *AnthropicChannel) ValidateKey(ctx context.Context, key string) (bool, error) {
|
||||
upstreamURL := ch.getUpstreamURL()
|
||||
|
@@ -29,9 +29,6 @@ type ChannelProxy interface {
|
||||
// IsStreamRequest checks if the request is for a streaming response,
|
||||
IsStreamRequest(c *gin.Context, bodyBytes []byte) bool
|
||||
|
||||
// ExtractKey extracts the API key from the request.
|
||||
ExtractKey(c *gin.Context) string
|
||||
|
||||
// ValidateKey checks if the given API key is valid.
|
||||
ValidateKey(ctx context.Context, key string) (bool, error)
|
||||
}
|
||||
|
@@ -40,7 +40,6 @@ func (ch *GeminiChannel) ModifyRequest(req *http.Request, apiKey *models.APIKey,
|
||||
req.URL.RawQuery = q.Encode()
|
||||
}
|
||||
|
||||
|
||||
// IsStreamRequest checks if the request is for a streaming response.
|
||||
func (ch *GeminiChannel) IsStreamRequest(c *gin.Context, bodyBytes []byte) bool {
|
||||
path := c.Request.URL.Path
|
||||
@@ -59,21 +58,6 @@ func (ch *GeminiChannel) IsStreamRequest(c *gin.Context, bodyBytes []byte) bool
|
||||
return false
|
||||
}
|
||||
|
||||
// ExtractKey extracts the API key from the X-Goog-Api-Key header or the "key" query parameter.
|
||||
func (ch *GeminiChannel) ExtractKey(c *gin.Context) string {
|
||||
// 1. Check X-Goog-Api-Key header
|
||||
if key := c.GetHeader("X-Goog-Api-Key"); key != "" {
|
||||
return key
|
||||
}
|
||||
|
||||
// 2. Check "key" query parameter
|
||||
if key := c.Query("key"); key != "" {
|
||||
return key
|
||||
}
|
||||
|
||||
return ""
|
||||
}
|
||||
|
||||
// ValidateKey checks if the given API key is valid by making a generateContent request.
|
||||
func (ch *GeminiChannel) ValidateKey(ctx context.Context, key string) (bool, error) {
|
||||
upstreamURL := ch.getUpstreamURL()
|
||||
|
@@ -59,18 +59,6 @@ func (ch *OpenAIChannel) IsStreamRequest(c *gin.Context, bodyBytes []byte) bool
|
||||
return false
|
||||
}
|
||||
|
||||
// ExtractKey extracts the API key from the Authorization header.
|
||||
func (ch *OpenAIChannel) ExtractKey(c *gin.Context) string {
|
||||
authHeader := c.GetHeader("Authorization")
|
||||
if authHeader != "" {
|
||||
const bearerPrefix = "Bearer "
|
||||
if strings.HasPrefix(authHeader, bearerPrefix) {
|
||||
return authHeader[len(bearerPrefix):]
|
||||
}
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
// ValidateKey checks if the given API key is valid by making a chat completion request.
|
||||
func (ch *OpenAIChannel) ValidateKey(ctx context.Context, key string) (bool, error) {
|
||||
upstreamURL := ch.getUpstreamURL()
|
||||
|
Reference in New Issue
Block a user