mirror of
https://github.com/grafana/grafana.git
synced 2025-07-31 12:22:05 +08:00
75 lines
2.5 KiB
TypeScript
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() };
|
|
}
|
|
}
|