Add check for removed config

Signed-off-by: Andre Wanlin <awanlin@spotify.com>
This commit is contained in:
Andre Wanlin
2026-02-21 07:05:16 -06:00
parent e27bd4e40f
commit 5da7c6c5c2
+25 -49
View File
@@ -218,9 +218,17 @@ function asAzureDevOpsCredential(
export function readAzureIntegrationConfig(
config: Config,
): AzureIntegrationConfig {
deprecatedConfigCheck(config);
const host = config.getOptionalString('host') ?? AZURE_HOST;
let credentialConfigs = config
if (!isValidHost(host)) {
throw new Error(
`Invalid Azure integration config, '${host}' is not a valid host`,
);
}
const credentialConfigs = config
.getOptionalConfigArray('credentials')
?.map(credential => {
const result: Partial<AzureDevOpsCredentialLike> = {
@@ -239,54 +247,6 @@ export function readAzureIntegrationConfig(
return result;
});
const token = config.getOptionalString('token')?.trim();
if (
config.getOptional('credential') !== undefined &&
config.getOptional('credentials') !== undefined
) {
throw new Error(
`Invalid Azure integration config, 'credential' and 'credentials' cannot be used together. Use 'credentials' instead.`,
);
}
if (
config.getOptional('token') !== undefined &&
config.getOptional('credentials') !== undefined
) {
throw new Error(
`Invalid Azure integration config, 'token' and 'credentials' cannot be used together. Use 'credentials' instead.`,
);
}
if (token !== undefined) {
const mapped = [{ personalAccessToken: token }];
credentialConfigs = credentialConfigs?.concat(mapped) ?? mapped;
}
if (config.getOptional('credential') !== undefined) {
const mapped = [
{
organizations: config.getOptionalStringArray(
'credential.organizations',
),
token: config.getOptionalString('credential.token')?.trim(),
tenantId: config.getOptionalString('credential.tenantId'),
clientId: config.getOptionalString('credential.clientId'),
clientSecret: config
.getOptionalString('credential.clientSecret')
?.trim(),
},
];
credentialConfigs = credentialConfigs?.concat(mapped) ?? mapped;
}
if (!isValidHost(host)) {
throw new Error(
`Invalid Azure integration config, '${host}' is not a valid host`,
);
}
let credentials: AzureDevOpsCredential[] | undefined = undefined;
if (credentialConfigs !== undefined) {
const errors = credentialConfigs
@@ -397,3 +357,19 @@ export function readAzureIntegrationConfigs(
return result;
}
/**
* These config sections have been removed but to insure they
* don't leak sensitive tokens we have this check in place
* to throw an error if found
*
* @internal
* @deprecated To be removed at a later date
*/
export function deprecatedConfigCheck(config: Config) {
if (config.getOptional('credential') || config.getOptional('token')) {
throw new Error(
`Invalid Azure integration config, 'credential' and 'token' have been removed. Use 'credentials' instead.`,
);
}
}