open-vault/ui/app/models/pki/key.js
claire bontempo 04396e5f9c
UI/pki key workflow tests (#18496)
* wip tests

* fix links

* Revert "wip tests"

This reverts commit aed9bb9b8fffb1b4d52d9c27644033ff3d983fff.

* wip tests

* add policy generator

* add workflow tests for key

* change apostrophe -___-

* fix workflow tests

* add update to key form tests

* fix capability check for read

* finish tests

* fix flash messages;

* rename policy generator file, update tests
2023-01-03 18:00:29 -08:00

75 lines
2.5 KiB
JavaScript

import Model, { attr } from '@ember-data/model';
import { inject as service } from '@ember/service';
import lazyCapabilities, { apiPath } from 'vault/macros/lazy-capabilities';
import { withFormFields } from 'vault/decorators/model-form-fields';
import { withModelValidations } from 'vault/decorators/model-validations';
const validations = {
type: [{ type: 'presence', message: 'Type is required.' }],
keyType: [{ type: 'presence', message: 'Please select a key type.' }],
};
const displayFields = ['keyId', 'keyName', 'keyType', 'keyBits'];
const formFieldGroups = [{ default: ['keyName', 'type'] }, { 'Key parameters': ['keyType', 'keyBits'] }];
@withModelValidations(validations)
@withFormFields(displayFields, formFieldGroups)
export default class PkiKeyModel extends Model {
@service secretMountPath;
@attr('string', { detailsLabel: 'Key ID' }) keyId;
@attr('string', {
subText: `Optional, human-readable name for this key. The name must be unique across all keys and cannot be 'default'.`,
})
keyName;
@attr('string', {
noDefault: true,
possibleValues: ['internal', 'exported'],
subText:
'The type of operation. If exported, the private key will be returned in the response; if internal the private key will not be returned and cannot be retrieved later.',
})
type;
@attr('string', {
noDefault: true,
possibleValues: ['rsa', 'ec', 'ed25519'],
subText: 'The type of key that will be generated. Must be rsa, ed25519, or ec. ',
})
keyType;
@attr('string', {
label: 'Key bits',
noDefault: true,
subText: 'Bit length of the key to generate.',
})
keyBits; // no possibleValues because dependent on selected key type
@attr('string') pemBundle;
@attr('string') privateKey;
get backend() {
return this.secretMountPath.currentPath;
}
/* CAPABILITIES
* Default to show UI elements unless we know they can't access the given path
*/
@lazyCapabilities(apiPath`${'backend'}/key/${'keyId'}`, 'backend', 'keyId') keyPath;
get canRead() {
return this.keyPath.get('canRead') !== false;
}
get canEdit() {
return this.keyPath.get('canUpdate') !== false;
}
get canDelete() {
return this.keyPath.get('canDelete') !== false;
}
@lazyCapabilities(apiPath`${'backend'}/keys/generate`, 'backend') generatePath;
get canGenerateKey() {
return this.generatePath.get('canUpdate') !== false;
}
@lazyCapabilities(apiPath`${'backend'}/keys/import`, 'backend') importPath;
get canImportKey() {
return this.importPath.get('canUpdate') !== false;
}
}