import Model, { attr } from '@ember-data/model'; import lazyCapabilities, { apiPath } from 'vault/macros/lazy-capabilities'; import { expandAttributeMeta } from 'vault/utils/field-to-attrs'; import { withModelValidations } from 'vault/decorators/model-validations'; const validations = { name: [ { type: 'presence', message: 'Name is required.' }, { type: 'containsWhiteSpace', message: 'Name cannot contain whitespace.', }, ], }; @withModelValidations(validations) export default class OidcKeyModel extends Model { @attr('string', { editDisabled: true }) name; @attr('string', { defaultValue: 'RS256', possibleValues: ['RS256', 'RS384', 'RS512', 'ES256', 'ES384', 'ES512', 'EdDSA'], }) algorithm; @attr({ editType: 'ttl', defaultValue: '24h' }) rotationPeriod; @attr({ label: 'Verification TTL', editType: 'ttl', defaultValue: '24h' }) verificationTtl; @attr('array', { label: 'Allowed applications' }) allowedClientIds; // no editType because does not use form-field component // TODO refactor when field-to-attrs is refactored as decorator _attributeMeta = null; // cache initial result of expandAttributeMeta in getter and return get formFields() { if (!this._attributeMeta) { this._attributeMeta = expandAttributeMeta(this, [ 'name', 'algorithm', 'rotationPeriod', 'verificationTtl', ]); } return this._attributeMeta; } @lazyCapabilities(apiPath`identity/oidc/key/${'name'}`, 'name') keyPath; @lazyCapabilities(apiPath`identity/oidc/key/${'name'}/rotate`, 'name') rotatePath; @lazyCapabilities(apiPath`identity/oidc/key`) keysPath; get canCreate() { return this.keyPath.get('canCreate'); } get canRead() { return this.keyPath.get('canRead'); } get canEdit() { return this.keyPath.get('canUpdate'); } get canRotate() { return this.rotatePath.get('canUpdate'); } get canDelete() { return this.keyPath.get('canDelete'); } get canList() { return this.keysPath.get('canList'); } }