Skip to content

Commit 3412a5a

Browse files
committed
Validate admin provider key separation
1 parent ed1e654 commit 3412a5a

2 files changed

Lines changed: 32 additions & 8 deletions

File tree

cmd/subrouter/main.go

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,18 @@ func listenAddressIsLoopback(addr string) bool {
214214
return ip != nil && ip.IsLoopback()
215215
}
216216

217+
func credentialIsolationNeedsAdminKeys(adminToken string, gatewayTokens ...string) bool {
218+
if strings.TrimSpace(adminToken) != "" {
219+
return true
220+
}
221+
for _, token := range gatewayTokens {
222+
if strings.TrimSpace(token) != "" {
223+
return true
224+
}
225+
}
226+
return false
227+
}
228+
217229
func serve(args []string) error {
218230
flags := flag.NewFlagSet("serve", flag.ContinueOnError)
219231
addr := flags.String("addr", "127.0.0.1:31415", "listen address")
@@ -334,9 +346,11 @@ func serve(args []string) error {
334346
return err
335347
}
336348
var adminKeys []accounts.AdminKeyEntry
337-
gatewayTokensConfigured := geminiGatewayToken != "" || anthropicGatewayToken != "" || openAIGatewayToken != "" ||
338-
(*bedrockEnable && resolvedBedrockGatewayToken != "")
339-
if gatewayTokensConfigured {
349+
bedrockGatewayTokenIfEnabled := ""
350+
if *bedrockEnable {
351+
bedrockGatewayTokenIfEnabled = resolvedBedrockGatewayToken
352+
}
353+
if credentialIsolationNeedsAdminKeys(*adminToken, geminiGatewayToken, anthropicGatewayToken, openAIGatewayToken, bedrockGatewayTokenIfEnabled) {
340354
adminKeys, err = codexStore.ListAdminKeys()
341355
if err != nil {
342356
return err
@@ -352,15 +366,11 @@ func serve(args []string) error {
352366
return err
353367
}
354368
inheritedListener := listenEnvSet && listenPID == os.Getpid() && listenFDCount > 0
355-
bedrockGatewayTokenForValidation := ""
356-
if *bedrockEnable {
357-
bedrockGatewayTokenForValidation = resolvedBedrockGatewayToken
358-
}
359369
gatewayCredentials := []teamGatewayCredential{
360370
{providerKey: geminiAPIKey, gatewayToken: geminiGatewayToken},
361371
{providerKey: anthropicAPIKey, gatewayToken: anthropicGatewayToken},
362372
{providerKey: openAIAPIKey, gatewayToken: openAIGatewayToken},
363-
{gatewayToken: bedrockGatewayTokenForValidation, enabled: *bedrockEnable},
373+
{gatewayToken: bedrockGatewayTokenIfEnabled, enabled: *bedrockEnable},
364374
{providerKey: claudeFableAPIKey},
365375
}
366376
for _, account := range append(append([]accounts.Account(nil), codexAccounts...), claudeAccounts...) {

cmd/subrouter/main_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,20 @@ func TestValidateTeamGatewayCredentials(t *testing.T) {
8282
}
8383
}
8484

85+
func TestCredentialIsolationNeedsAdminKeys(t *testing.T) {
86+
t.Parallel()
87+
88+
if credentialIsolationNeedsAdminKeys("") {
89+
t.Fatal("empty credentials require admin-key store")
90+
}
91+
if !credentialIsolationNeedsAdminKeys("admin-token") {
92+
t.Fatal("admin token did not require admin-key store")
93+
}
94+
if !credentialIsolationNeedsAdminKeys("", "", "gateway-token") {
95+
t.Fatal("gateway token did not require admin-key store")
96+
}
97+
}
98+
8599
func TestSystemdListenFDsParsesCurrentProcess(t *testing.T) {
86100
env := map[string]string{
87101
"LISTEN_PID": "123",

0 commit comments

Comments
 (0)