mirror of
https://github.com/router-for-me/CLIProxyAPIPlus.git
synced 2026-03-08 06:43:41 +00:00
- Fix SSRF: validate API endpoint host against allowlist before use - Limit /models response body to 2MB to prevent memory exhaustion (DoS) - Use MakeAuthenticatedRequest for consistent headers across API calls - Trim trailing slash on API endpoint to prevent double-slash URLs - Use ListModelsWithGitHubToken to simplify token exchange + listing - Deduplicate model IDs to prevent incorrect registry reference counting - Remove dead capabilities enrichment code block - Remove unused ModelExtra field with misleading json:"-" tag - Extract magic numbers to named constants (defaultCopilotContextLength) - Remove redundant hyphenID == id check (already filtered by Contains) - Use defer cancel() for context timeout in service.go
62 lines
2.5 KiB
Go
62 lines
2.5 KiB
Go
package config
|
|
|
|
import "strings"
|
|
|
|
// defaultKiroAliases returns default oauth-model-alias entries for Kiro.
|
|
// These aliases expose standard Claude IDs for Kiro-prefixed upstream models.
|
|
func defaultKiroAliases() []OAuthModelAlias {
|
|
return []OAuthModelAlias{
|
|
// Sonnet 4.6
|
|
{Name: "kiro-claude-sonnet-4-6", Alias: "claude-sonnet-4-6", Fork: true},
|
|
// Sonnet 4.5
|
|
{Name: "kiro-claude-sonnet-4-5", Alias: "claude-sonnet-4-5-20250929", Fork: true},
|
|
{Name: "kiro-claude-sonnet-4-5", Alias: "claude-sonnet-4-5", Fork: true},
|
|
// Sonnet 4
|
|
{Name: "kiro-claude-sonnet-4", Alias: "claude-sonnet-4-20250514", Fork: true},
|
|
{Name: "kiro-claude-sonnet-4", Alias: "claude-sonnet-4", Fork: true},
|
|
// Opus 4.6
|
|
{Name: "kiro-claude-opus-4-6", Alias: "claude-opus-4-6", Fork: true},
|
|
// Opus 4.5
|
|
{Name: "kiro-claude-opus-4-5", Alias: "claude-opus-4-5-20251101", Fork: true},
|
|
{Name: "kiro-claude-opus-4-5", Alias: "claude-opus-4-5", Fork: true},
|
|
// Haiku 4.5
|
|
{Name: "kiro-claude-haiku-4-5", Alias: "claude-haiku-4-5-20251001", Fork: true},
|
|
{Name: "kiro-claude-haiku-4-5", Alias: "claude-haiku-4-5", Fork: true},
|
|
}
|
|
}
|
|
|
|
// defaultGitHubCopilotAliases returns default oauth-model-alias entries for
|
|
// GitHub Copilot Claude models. It exposes hyphen-style IDs used by clients.
|
|
func defaultGitHubCopilotAliases() []OAuthModelAlias {
|
|
return []OAuthModelAlias{
|
|
{Name: "claude-haiku-4.5", Alias: "claude-haiku-4-5", Fork: true},
|
|
{Name: "claude-opus-4.1", Alias: "claude-opus-4-1", Fork: true},
|
|
{Name: "claude-opus-4.5", Alias: "claude-opus-4-5", Fork: true},
|
|
{Name: "claude-opus-4.6", Alias: "claude-opus-4-6", Fork: true},
|
|
{Name: "claude-sonnet-4.5", Alias: "claude-sonnet-4-5", Fork: true},
|
|
{Name: "claude-sonnet-4.6", Alias: "claude-sonnet-4-6", Fork: true},
|
|
}
|
|
}
|
|
|
|
// GitHubCopilotAliasesFromModels generates oauth-model-alias entries from a dynamic
|
|
// list of model IDs fetched from the Copilot API. It auto-creates aliases for
|
|
// models whose ID contains a dot (e.g. "claude-opus-4.6" → "claude-opus-4-6"),
|
|
// which is the pattern used by Claude models on Copilot.
|
|
func GitHubCopilotAliasesFromModels(modelIDs []string) []OAuthModelAlias {
|
|
var aliases []OAuthModelAlias
|
|
seen := make(map[string]struct{})
|
|
for _, id := range modelIDs {
|
|
if !strings.Contains(id, ".") {
|
|
continue
|
|
}
|
|
hyphenID := strings.ReplaceAll(id, ".", "-")
|
|
key := id + "→" + hyphenID
|
|
if _, ok := seen[key]; ok {
|
|
continue
|
|
}
|
|
seen[key] = struct{}{}
|
|
aliases = append(aliases, OAuthModelAlias{Name: id, Alias: hyphenID, Fork: true})
|
|
}
|
|
return aliases
|
|
}
|