/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: BUSL-1.1
*/
import Component from '@glimmer/component';
import { toLabel } from 'core/helpers/to-label';
import engineDisplayData from 'vault/helpers/engines-display-data';
import SecretsEngineResource from 'vault/resources/secrets/engine';
/**
* @module PluginSettingsComponent is used to configure extended plugin level settings for secrets engines.
*
* @example
* ```js
*
* ```
*
* @param {string} secretsEngine - secrets engine resource
*/
interface Args {
model: {
secretsEngine: SecretsEngineResource;
};
}
export default class PluginSettingsComponent extends Component {
awsFields = [
'role_arn',
'identity_token_audience',
'identity_token_ttl',
'access_key',
'region',
'iam_endpoint',
'sts_endpoint',
'max_retries',
'lease',
'lease_max',
'issuer',
];
azureFields = [
'subscription_id',
'tenant_id',
'client_id',
'identity_token_audience',
'identity_token_ttl',
'root_password_ttl',
'environment',
'issuer',
];
gcpFields = [
'service_account_email',
'ttl',
'max_ttl',
'identity_token_audience',
'identity_token_ttl',
'issuer',
];
sshFields = ['public_key', 'generate_signing_key'];
get displayFields() {
switch (engineDisplayData(this.args.model.secretsEngine.type)?.displayName) {
case 'AWS':
return this.awsFields;
case 'Azure':
return this.azureFields;
case 'Google Cloud':
return this.gcpFields;
case 'SSH':
return this.sshFields;
default:
return [];
}
}
label = (field: string) => {
const label = toLabel([field]);
// convert words like id and ttl to uppercase
const formattedLabel = label
.split(' ')
.map((word: string) => {
const acronyms = ['id', 'ttl', 'arn', 'iam', 'sts'];
return acronyms.includes(word.toLowerCase()) ? word.toUpperCase() : word;
})
.join(' ');
// map specific fields to custom labels
return (
{
lease: 'Default Lease TTL',
lease_max: 'Max Lease TTL',
ttl: 'Config TTL',
}[field] || formattedLabel
);
};
isDuration = (field: string) => {
return ['identity_token_ttl', 'root_password_ttl', 'lease', 'lease_max', 'ttl', 'max_ttl'].includes(
field
);
};
}