Files
Younjin Song 44d206c272 Azure: Unify credentials in frontend (#95354)
* init

* fix lint

* fix lint

* lint

* update version

* fix
2024-11-12 10:36:48 +00:00

75 lines
2.5 KiB
TypeScript

import {
AzureCredentials,
getDatasourceCredentials,
getDefaultAzureCloud,
getClientSecret,
resolveLegacyCloudName,
updateDatasourceCredentials,
} from '@grafana/azure-sdk';
import { config } from '@grafana/runtime';
import { AzureMonitorDataSourceInstanceSettings, AzureMonitorDataSourceSettings } from './types';
export function getCredentials(
options: AzureMonitorDataSourceSettings | AzureMonitorDataSourceInstanceSettings
): AzureCredentials {
// Try to get the credentials from the datasource settings,
// If not found, return the legacy azure monitor credentials if they exist or fallback to default credentials
const creds = getDatasourceCredentials(options);
if (creds) {
return creds;
}
return getLegacyCredentials(options) || getDefaultCredentials();
}
export function updateCredentials(
options: AzureMonitorDataSourceSettings,
credentials: AzureCredentials
): AzureMonitorDataSourceSettings {
return updateDatasourceCredentials(options, credentials);
}
function getLegacyCredentials(
options: AzureMonitorDataSourceSettings | AzureMonitorDataSourceInstanceSettings
): AzureCredentials | undefined {
try {
// If authentication type isn't explicitly specified and datasource has client credentials,
// then this is existing datasource which is configured for app registration (client secret)
if (
options.jsonData.azureAuthType === 'clientsecret' ||
(!options.jsonData.azureAuthType && options.jsonData.tenantId && options.jsonData.clientId)
) {
return {
authType: 'clientsecret',
tenantId: options.jsonData.tenantId,
clientId: options.jsonData.clientId,
azureCloud: resolveLegacyCloudName(options.jsonData.cloudName) || getDefaultAzureCloud(),
clientSecret: getClientSecret(options),
};
}
// If the authentication type is not set, then no legacy credentials exist so return undefined
if (!options.jsonData.azureAuthType) {
return undefined;
}
return { authType: options.jsonData.azureAuthType };
} catch (e) {
if (e instanceof Error) {
console.error('Unable to restore legacy credentials: %s', e.message);
}
return undefined;
}
}
function getDefaultCredentials(): AzureCredentials {
if (config.azure.managedIdentityEnabled) {
return { authType: 'msi' };
} else if (config.azure.workloadIdentityEnabled) {
return { authType: 'workloadidentity' };
} else {
return { authType: 'clientsecret', azureCloud: getDefaultAzureCloud() };
}
}