import React from 'react'; import { FormFieldContainer, TextInput } from '@mongodb-js/compass-components'; import type ConnectionStringUrl from 'mongodb-connection-string-url'; import type { UpdateConnectionFormField } from '../../../hooks/use-connect-form'; import type { ConnectionFormError } from '../../../utils/validation'; import { getConnectionStringPassword, getConnectionStringUsername, parseAuthMechanismProperties, } from '../../../utils/connection-string-helpers'; export const AWS_ACCESS_KEY_ID_LABEL = 'AWS Access Key Id'; export const AWS_SECRET_ACCESS_KEY_LABEL = 'AWS Secret Access Key'; export const AWS_SESSION_TOKEN_LABEL = 'AWS Session Token'; function AuthenticationAWS({ connectionStringUrl, updateConnectionFormField, }: { connectionStringUrl: ConnectionStringUrl; errors: ConnectionFormError[]; updateConnectionFormField: UpdateConnectionFormField; }): React.ReactElement { const awsAccessKeyId = getConnectionStringUsername(connectionStringUrl); const awsSecretAccessKey = getConnectionStringPassword(connectionStringUrl); const authMechanismProperties = parseAuthMechanismProperties(connectionStringUrl); const sessionToken = authMechanismProperties.get('AWS_SESSION_TOKEN'); return ( <> ) => { updateConnectionFormField({ type: 'update-username', username: value, }); }} label={AWS_ACCESS_KEY_ID_LABEL} value={awsAccessKeyId || ''} /> ) => { updateConnectionFormField({ type: 'update-password', password: value, }); }} label={AWS_SECRET_ACCESS_KEY_LABEL} type="password" value={awsSecretAccessKey || ''} optional={true} /> ) => { updateConnectionFormField({ type: 'update-auth-mechanism-property', key: 'AWS_SESSION_TOKEN', value: value, }); }} label={AWS_SESSION_TOKEN_LABEL} value={sessionToken || ''} optional={true} type="password" /> ); } export default AuthenticationAWS;