27bb03bbc0
* adding copyright header * fix fmt and a test
135 lines
3 KiB
JavaScript
135 lines
3 KiB
JavaScript
/**
|
|
* Copyright (c) HashiCorp, Inc.
|
|
* SPDX-License-Identifier: MPL-2.0
|
|
*/
|
|
|
|
import Model, { attr } from '@ember-data/model';
|
|
import { expandAttributeMeta } from 'vault/utils/field-to-attrs';
|
|
import lazyCapabilities, { apiPath } from 'vault/macros/lazy-capabilities';
|
|
|
|
export const KEY_TYPES = [
|
|
'aes256-gcm96',
|
|
'rsa-2048',
|
|
'rsa-3072',
|
|
'rsa-4096',
|
|
'ecdsa-p256',
|
|
'ecdsa-p384',
|
|
'ecdsa-p521',
|
|
];
|
|
export default class KeymgmtKeyModel extends Model {
|
|
@attr('string', {
|
|
label: 'Key name',
|
|
subText: 'This is the name of the key that shows in Vault.',
|
|
})
|
|
name;
|
|
|
|
@attr('string')
|
|
backend;
|
|
|
|
@attr('string', {
|
|
subText: 'The type of cryptographic key that will be created.',
|
|
possibleValues: KEY_TYPES,
|
|
defaultValue: 'rsa-2048',
|
|
})
|
|
type;
|
|
|
|
@attr('boolean', {
|
|
label: 'Allow deletion',
|
|
defaultValue: false,
|
|
})
|
|
deletionAllowed;
|
|
|
|
@attr('number', {
|
|
label: 'Current version',
|
|
})
|
|
latestVersion;
|
|
|
|
@attr('number', {
|
|
defaultValue: 0,
|
|
defaultShown: 'All versions enabled',
|
|
})
|
|
minEnabledVersion;
|
|
|
|
@attr('array')
|
|
versions;
|
|
|
|
// The following are calculated in serializer
|
|
@attr('date')
|
|
created;
|
|
|
|
@attr('date', {
|
|
defaultShown: 'Not yet rotated',
|
|
})
|
|
lastRotated;
|
|
|
|
// The following are from endpoints other than the main read one
|
|
@attr() provider; // string, or object with permissions error
|
|
@attr() distribution;
|
|
|
|
icon = 'key';
|
|
|
|
get hasVersions() {
|
|
return this.versions.length > 1;
|
|
}
|
|
|
|
get createFields() {
|
|
const createFields = ['name', 'type', 'deletionAllowed'];
|
|
return expandAttributeMeta(this, createFields);
|
|
}
|
|
|
|
get updateFields() {
|
|
return expandAttributeMeta(this, ['minEnabledVersion', 'deletionAllowed']);
|
|
}
|
|
get showFields() {
|
|
return expandAttributeMeta(this, [
|
|
'name',
|
|
'created',
|
|
'type',
|
|
'deletionAllowed',
|
|
'latestVersion',
|
|
'minEnabledVersion',
|
|
'lastRotated',
|
|
]);
|
|
}
|
|
|
|
get keyTypeOptions() {
|
|
return expandAttributeMeta(this, ['type'])[0];
|
|
}
|
|
|
|
get distFields() {
|
|
return [
|
|
{
|
|
name: 'name',
|
|
type: 'string',
|
|
label: 'Distributed name',
|
|
subText: 'The name given to the key by the provider.',
|
|
},
|
|
{ name: 'purpose', type: 'string', label: 'Key Purpose' },
|
|
{ name: 'protection', type: 'string', subText: 'Where cryptographic operations are performed.' },
|
|
];
|
|
}
|
|
|
|
@lazyCapabilities(apiPath`${'backend'}/key/${'id'}`, 'backend', 'id') keyPath;
|
|
@lazyCapabilities(apiPath`${'backend'}/key`, 'backend') keysPath;
|
|
@lazyCapabilities(apiPath`${'backend'}/key/${'id'}/kms`, 'backend', 'id') keyProvidersPath;
|
|
|
|
get canCreate() {
|
|
return this.keyPath.get('canCreate');
|
|
}
|
|
get canDelete() {
|
|
return this.keyPath.get('canDelete');
|
|
}
|
|
get canEdit() {
|
|
return this.keyPath.get('canUpdate');
|
|
}
|
|
get canRead() {
|
|
return this.keyPath.get('canRead');
|
|
}
|
|
get canList() {
|
|
return this.keysPath.get('canList');
|
|
}
|
|
get canListProviders() {
|
|
return this.keyProvidersPath.get('canList');
|
|
}
|
|
}
|