import { cx } from '@emotion/css'; import { ChangeEvent, useMemo } from 'react'; import { AzureAuthType, AzureCredentials } from '@grafana/azure-sdk'; import { SelectableValue } from '@grafana/data'; import { InlineFormLabel, Button, Select, Input } from '@grafana/ui'; export interface Props { managedIdentityEnabled: boolean; workloadIdentityEnabled: boolean; credentials: AzureCredentials; azureCloudOptions?: SelectableValue[]; onCredentialsChange: (updatedCredentials: AzureCredentials) => void; getSubscriptions?: () => Promise; disabled?: boolean; } export const AzureCredentialsForm = (props: Props) => { const { credentials, azureCloudOptions, onCredentialsChange, disabled, managedIdentityEnabled, workloadIdentityEnabled, } = props; const authTypeOptions = useMemo(() => { let opts: Array> = [ { value: 'clientsecret', label: 'App Registration', }, ]; if (managedIdentityEnabled) { opts.push({ value: 'msi', label: 'Managed Identity', }); } if (workloadIdentityEnabled) { opts.push({ value: 'workloadidentity', label: 'Workload Identity', }); } return opts; }, [managedIdentityEnabled, workloadIdentityEnabled]); const onAuthTypeChange = (selected: SelectableValue) => { const defaultAuthType = managedIdentityEnabled ? 'msi' : workloadIdentityEnabled ? 'workloadidentity' : 'clientsecret'; const updated: AzureCredentials = { ...credentials, authType: selected.value || defaultAuthType, }; onCredentialsChange(updated); }; const onAzureCloudChange = (selected: SelectableValue) => { if (credentials.authType === 'clientsecret') { const updated: AzureCredentials = { ...credentials, azureCloud: selected.value, }; onCredentialsChange(updated); } }; const onTenantIdChange = (event: ChangeEvent) => { if (credentials.authType === 'clientsecret') { const updated: AzureCredentials = { ...credentials, tenantId: event.target.value, }; onCredentialsChange(updated); } }; const onClientIdChange = (event: ChangeEvent) => { if (credentials.authType === 'clientsecret') { const updated: AzureCredentials = { ...credentials, clientId: event.target.value, }; onCredentialsChange(updated); } }; const onClientSecretChange = (event: ChangeEvent) => { if (credentials.authType === 'clientsecret') { const updated: AzureCredentials = { ...credentials, clientSecret: event.target.value, }; onCredentialsChange(updated); } }; const onClientSecretReset = () => { if (credentials.authType === 'clientsecret') { const updated: AzureCredentials = { ...credentials, clientSecret: '', }; onCredentialsChange(updated); } }; return (
{authTypeOptions.length > 1 && (
Authentication opt.value === credentials.azureCloud)} options={azureCloudOptions} onChange={onAzureCloudChange} isDisabled={disabled} />
)}
Directory (tenant) ID
Application (client) ID
{typeof credentials.clientSecret === 'symbol' ? (
Client Secret
{!disabled && (
)}
) : (
Client Secret
)} )}
); }; export default AzureCredentialsForm;