1import { SelectableValue } from '@grafana/data';
2
3export enum AzureCloud {
4  Public = 'AzureCloud',
5  China = 'AzureChinaCloud',
6  USGovernment = 'AzureUSGovernment',
7  Germany = 'AzureGermanCloud',
8  None = '',
9}
10
11export const KnownAzureClouds = [
12  { value: AzureCloud.Public, label: 'Azure' },
13  { value: AzureCloud.China, label: 'Azure China' },
14  { value: AzureCloud.USGovernment, label: 'Azure US Government' },
15  { value: AzureCloud.Germany, label: 'Azure Germany' },
16] as SelectableValue[];
17
18export type AzureAuthType = 'msi' | 'clientsecret';
19
20export type ConcealedSecret = symbol;
21
22interface AzureCredentialsBase {
23  authType: AzureAuthType;
24  defaultSubscriptionId?: string;
25}
26
27export interface AzureManagedIdentityCredentials extends AzureCredentialsBase {
28  authType: 'msi';
29}
30
31export interface AzureClientSecretCredentials extends AzureCredentialsBase {
32  authType: 'clientsecret';
33  azureCloud?: string;
34  tenantId?: string;
35  clientId?: string;
36  clientSecret?: string | ConcealedSecret;
37}
38
39export type AzureCredentials = AzureManagedIdentityCredentials | AzureClientSecretCredentials;
40
41export function isCredentialsComplete(credentials: AzureCredentials): boolean {
42  switch (credentials.authType) {
43    case 'msi':
44      return true;
45    case 'clientsecret':
46      return !!(credentials.azureCloud && credentials.tenantId && credentials.clientId && credentials.clientSecret);
47  }
48}
49