open-vault/ui/app/machines/secrets-machine.js

225 lines
6.6 KiB
JavaScript

/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import { supportedSecretBackends } from 'vault/helpers/supported-secret-backends';
const supportedBackends = supportedSecretBackends();
export default {
key: 'secrets',
initial: 'idle',
on: {
RESET: 'idle',
DONE: 'complete',
ERROR: 'error',
},
states: {
idle: {
onEntry: [
{ type: 'routeTransition', params: ['vault.cluster.settings.mount-secret-backend'] },
{ type: 'render', level: 'feature', component: 'wizard/mounts-wizard' },
{ type: 'render', level: 'step', component: 'wizard/secrets-idle' },
],
on: {
CONTINUE: 'enable',
},
},
enable: {
onEntry: [
{ type: 'render', level: 'feature', component: 'wizard/mounts-wizard' },
{ type: 'render', level: 'step', component: 'wizard/secrets-enable' },
],
on: {
CONTINUE: {
details: { cond: (type) => supportedBackends.includes(type) },
list: { cond: (type) => !supportedBackends.includes(type) },
},
},
},
details: {
onEntry: [
{ type: 'render', level: 'feature', component: 'wizard/mounts-wizard' },
{ type: 'render', level: 'step', component: 'wizard/secrets-details' },
],
on: {
CONTINUE: {
connection: {
cond: (type) => type === 'database',
},
role: {
cond: (type) => ['pki', 'aws', 'ssh'].includes(type),
},
secret: {
cond: (type) => ['kv'].includes(type),
},
encryption: {
cond: (type) => type === 'transit',
},
provider: {
cond: (type) => type === 'keymgmt',
},
},
},
},
connection: {
onEntry: [
{ type: 'render', level: 'step', component: 'wizard/secrets-connection' },
{ type: 'render', level: 'feature', component: 'wizard/mounts-wizard' },
],
on: {
CONTINUE: 'displayConnection',
},
},
encryption: {
onEntry: [
{ type: 'render', level: 'feature', component: 'wizard/mounts-wizard' },
{ type: 'render', level: 'step', component: 'wizard/secrets-encryption' },
],
on: {
CONTINUE: 'display',
},
},
credentials: {
onEntry: [
{ type: 'render', level: 'step', component: 'wizard/secrets-credentials' },
{ type: 'render', level: 'feature', component: 'wizard/mounts-wizard' },
],
on: {
CONTINUE: 'display',
},
},
role: {
onEntry: [
{ type: 'render', level: 'step', component: 'wizard/secrets-role' },
{ type: 'render', level: 'feature', component: 'wizard/mounts-wizard' },
],
on: {
CONTINUE: 'displayRole',
},
},
displayRole: {
onEntry: [
{ type: 'render', level: 'step', component: 'wizard/secrets-display-role' },
{ type: 'render', level: 'feature', component: 'wizard/mounts-wizard' },
],
on: {
CONTINUE: 'credentials',
},
},
displayConnection: {
onEntry: [
{ type: 'render', level: 'step', component: 'wizard/secrets-connection-show' },
{ type: 'render', level: 'feature', component: 'wizard/mounts-wizard' },
],
on: {
CONTINUE: 'displayRoleDatabase',
},
},
displayRoleDatabase: {
onEntry: [
{ type: 'render', level: 'step', component: 'wizard/secrets-display-database-role' },
{ type: 'render', level: 'feature', component: 'wizard/mounts-wizard' },
],
on: {
CONTINUE: 'display',
},
},
secret: {
onEntry: [
{ type: 'render', level: 'step', component: 'wizard/secrets-secret' },
{ type: 'render', level: 'feature', component: 'wizard/mounts-wizard' },
],
on: {
CONTINUE: 'display',
},
},
provider: {
onEntry: [
{ type: 'render', level: 'step', component: 'wizard/secrets-keymgmt' },
{ type: 'render', level: 'feature', component: 'wizard/mounts-wizard' },
],
on: {
CONTINUE: 'displayProvider',
},
},
displayProvider: {
onEntry: [
{ type: 'render', level: 'step', component: 'wizard/secrets-keymgmt' },
{ type: 'render', level: 'feature', component: 'wizard/mounts-wizard' },
],
on: {
CONTINUE: 'distribute',
},
},
distribute: {
onEntry: [
{ type: 'render', level: 'step', component: 'wizard/secrets-keymgmt' },
{ type: 'render', level: 'feature', component: 'wizard/mounts-wizard' },
],
on: {
CONTINUE: 'display',
},
},
display: {
onEntry: [
{ type: 'render', level: 'step', component: 'wizard/secrets-display' },
{ type: 'render', level: 'feature', component: 'wizard/mounts-wizard' },
],
on: {
REPEAT: {
connection: {
cond: (type) => type === 'database',
actions: [{ type: 'routeTransition', params: ['vault.cluster.secrets.backend.create-root'] }],
},
role: {
cond: (type) => ['pki', 'aws', 'ssh'].includes(type),
actions: [{ type: 'routeTransition', params: ['vault.cluster.secrets.backend.create-root'] }],
},
secret: {
cond: (type) => ['kv'].includes(type),
actions: [{ type: 'routeTransition', params: ['vault.cluster.secrets.backend.create-root'] }],
},
encryption: {
cond: (type) => type === 'transit',
actions: [{ type: 'routeTransition', params: ['vault.cluster.secrets.backend.create-root'] }],
},
provider: {
cond: (type) => type === 'keymgmt',
actions: [
{
type: 'routeTransition',
params: [
'vault.cluster.secrets.backend.create-root',
{ queryParams: { itemType: 'provider' } },
],
},
],
},
},
},
},
list: {
onEntry: [
{ type: 'render', level: 'step', component: 'wizard/secrets-list' },
{ type: 'render', level: 'feature', component: 'wizard/mounts-wizard' },
],
on: {
CONTINUE: 'display',
},
},
error: {
onEntry: [
{ type: 'render', level: 'step', component: 'wizard/tutorial-error' },
{ type: 'render', level: 'feature', component: 'wizard/mounts-wizard' },
],
on: {
CONTINUE: 'complete',
},
},
complete: {
onEntry: ['completeFeature'],
},
},
};