2018-04-03 14:16:57 +00:00
import Ember from 'ember' ;
import DS from 'ember-data' ;
2018-06-12 21:06:37 +00:00
import lazyCapabilities , { apiPath } from 'vault/macros/lazy-capabilities' ;
2018-04-03 14:16:57 +00:00
import { fragment } from 'ember-data-model-fragments/attributes' ;
2018-08-28 05:03:55 +00:00
import fieldToAttrs , { expandAttributeMeta } from 'vault/utils/field-to-attrs' ;
2018-05-23 16:25:52 +00:00
2018-04-03 14:16:57 +00:00
const { attr } = DS ;
const { computed } = Ember ;
//identity will be managed separately and the inclusion
//of the system backend is an implementation detail
const LIST _EXCLUDED _BACKENDS = [ 'system' , 'identity' ] ;
export default DS . Model . extend ( {
path : attr ( 'string' ) ,
accessor : attr ( 'string' ) ,
name : attr ( 'string' ) ,
2018-08-28 05:03:55 +00:00
type : attr ( 'string' , {
label : 'Secret engine type' ,
} ) ,
description : attr ( 'string' , {
editType : 'textarea' ,
} ) ,
2018-05-23 16:25:52 +00:00
config : fragment ( 'mount-config' , { defaultValue : { } } ) ,
options : fragment ( 'mount-options' , { defaultValue : { } } ) ,
2018-08-28 05:03:55 +00:00
local : attr ( 'boolean' , {
helpText :
'When replication is enabled, a local mount will not be replicated across clusters. This can only be specified at mount time.' ,
} ) ,
sealWrap : attr ( 'boolean' , {
helpText :
'When enabled - if a seal supporting seal wrapping is specified in the configuration, all critical security parameters (CSPs) in this backend will be seal wrapped. (For K/V mounts, all values will be seal wrapped.) This can only be specified at mount time.' ,
} ) ,
2018-04-03 14:16:57 +00:00
2018-08-16 17:48:24 +00:00
modelTypeForKV : computed ( 'engineType' , 'options.version' , function ( ) {
let type = this . get ( 'engineType' ) ;
2018-06-14 04:06:19 +00:00
let version = this . get ( 'options.version' ) ;
let modelType = 'secret' ;
if ( ( type === 'kv' || type === 'generic' ) && version === 2 ) {
modelType = 'secret-v2' ;
}
return modelType ;
} ) ,
2018-08-28 05:03:55 +00:00
formFields : computed ( 'engineType' , function ( ) {
let type = this . get ( 'engineType' ) ;
let fields = [
'type' ,
'path' ,
'description' ,
'accessor' ,
'local' ,
'sealWrap' ,
'config.{defaultLeaseTtl,maxLeaseTtl,auditNonHmacRequestKeys,auditNonHmacResponseKeys,passthroughRequestHeaders}' ,
] ;
if ( type === 'kv' || type === 'generic' ) {
fields . push ( 'options.{version}' ) ;
}
return fields ;
} ) ,
formFieldGroups : computed ( 'engineType' , function ( ) {
let type = this . get ( 'engineType' ) ;
let defaultGroup = { default : [ 'path' ] } ;
if ( type === 'kv' || type === 'generic' ) {
defaultGroup . default . push ( 'options.{version}' ) ;
}
return [
defaultGroup ,
{
'Method Options' : [
'description' ,
'config.listingVisibility' ,
'local' ,
'sealWrap' ,
'config.{defaultLeaseTtl,maxLeaseTtl,auditNonHmacRequestKeys,auditNonHmacResponseKeys,passthroughRequestHeaders}' ,
] ,
} ,
] ;
} ) ,
2018-05-23 16:25:52 +00:00
attrs : computed ( 'formFields' , function ( ) {
return expandAttributeMeta ( this , this . get ( 'formFields' ) ) ;
} ) ,
2018-08-28 05:03:55 +00:00
fieldGroups : computed ( 'formFieldGroups' , function ( ) {
return fieldToAttrs ( this , this . get ( 'formFieldGroups' ) ) ;
} ) ,
2018-08-16 17:48:24 +00:00
// namespaces introduced types with a `ns_` prefix for built-in engines
// so we need to strip that to normalize the type
engineType : computed ( 'type' , function ( ) {
return ( this . get ( 'type' ) || '' ) . replace ( /^ns_/ , '' ) ;
} ) ,
shouldIncludeInList : computed ( 'engineType' , function ( ) {
return ! LIST _EXCLUDED _BACKENDS . includes ( this . get ( 'engineType' ) ) ;
2018-04-03 14:16:57 +00:00
} ) ,
localDisplay : Ember . computed ( 'local' , function ( ) {
return this . get ( 'local' ) ? 'local' : 'replicated' ;
} ) ,
// ssh specific ones
privateKey : attr ( 'string' ) ,
publicKey : attr ( 'string' ) ,
generateSigningKey : attr ( 'boolean' , {
defaultValue : true ,
} ) ,
saveCA ( options ) {
if ( this . get ( 'type' ) !== 'ssh' ) {
return ;
}
if ( options . isDelete ) {
this . setProperties ( {
privateKey : null ,
publicKey : null ,
generateSigningKey : false ,
} ) ;
}
return this . save ( {
adapterOptions : {
options : options ,
apiPath : 'config/ca' ,
attrsToSend : [ 'privateKey' , 'publicKey' , 'generateSigningKey' ] ,
} ,
} ) ;
} ,
saveZeroAddressConfig ( ) {
return this . save ( {
adapterOptions : {
adapterMethod : 'saveZeroAddressConfig' ,
} ,
} ) ;
} ,
2018-06-12 21:06:37 +00:00
zeroAddressPath : lazyCapabilities ( apiPath ` ${ 'id' } /config/zeroaddress ` , 'id' ) ,
2018-04-03 14:16:57 +00:00
canEditZeroAddress : computed . alias ( 'zeroAddressPath.canUpdate' ) ,
// aws backend attrs
lease : attr ( 'string' ) ,
leaseMax : attr ( 'string' ) ,
} ) ;