fix(cliproxy): prevent management key leak on runtime proxy overrides (#1386)

* fix(cliproxy): clear yaml management key on runtime overrides

* style: apply prettier formatting
This commit is contained in:
Kai (Tam Nhu) Tran
2026-05-23 22:37:39 -04:00
committed by GitHub
parent 2237011b59
commit 4cf840ea0a
2 changed files with 40 additions and 1 deletions
@@ -294,6 +294,33 @@ describe('proxy-config-resolver', () => {
expect(config.managementKey).toBe('remote-management-key');
});
it('should clear YAML management key when CLI overrides remote host', () => {
const { config } = resolveProxyConfig(['--proxy-host', 'cli-host.example.com'], {
remote: {
host: 'yaml-host.example.com',
auth_token: 'remote-auth-token',
management_key: 'remote-management-key',
},
});
expect(config.mode).toBe('remote');
expect(config.host).toBe('cli-host.example.com');
expect(config.managementKey).toBeUndefined();
});
it('should clear YAML management key when ENV overrides auth token', () => {
process.env.CCS_PROXY_AUTH_TOKEN = 'env-auth-token';
const { config } = resolveProxyConfig([], {
remote: {
host: 'yaml-host.example.com',
auth_token: 'remote-auth-token',
management_key: 'remote-management-key',
},
});
expect(config.mode).toBe('remote');
expect(config.authToken).toBe('env-auth-token');
expect(config.managementKey).toBeUndefined();
});
it('should allow CLI --proxy-host to override YAML enabled:false', () => {
const { config } = resolveProxyConfig(['--proxy-host', 'cli-host'], {
remote: { enabled: false, host: 'yaml-host' },
+13 -1
View File
@@ -291,7 +291,19 @@ export function resolveProxyConfig(
// Merge auth token: CLI > ENV > config.yaml
resolved.authToken = cliFlags.authToken ?? envConfig.authToken ?? yamlConfig.remote?.auth_token;
resolved.managementKey = yamlConfig.remote?.management_key;
// Keep YAML management key only when remote target/auth are not overridden via CLI/ENV.
// Prevents leaking a saved management key to a different runtime target.
const hasRuntimeRemoteOverride =
cliFlags.host !== undefined ||
envConfig.host !== undefined ||
cliFlags.port !== undefined ||
envConfig.port !== undefined ||
cliFlags.protocol !== undefined ||
envConfig.protocol !== undefined ||
cliFlags.authToken !== undefined ||
envConfig.authToken !== undefined;
resolved.managementKey = hasRuntimeRemoteOverride ? undefined : yamlConfig.remote?.management_key;
// Merge timeout: CLI > ENV > config.yaml > default (2000ms in executor)
resolved.timeout = cliFlags.timeout ?? envConfig.timeout ?? yamlConfig.remote?.timeout;