hana-cli
Version:
HANA Developer Command Line Interface
74 lines (66 loc) • 2.62 kB
JavaScript
// @ts-check
import * as baseLite from '../utils/base-lite.js'
import * as fs from 'fs'
import * as path from 'path'
import * as xsenv from '@sap/xsenv'
import { buildDocEpilogue } from '../utils/doc-linker.js'
export const command = 'copy2Secrets'
export const aliases = ['secrets', 'make:secrets']
export const describe = baseLite.bundle.getText("copy2Secrets")
export const builder = (yargs) => yargs.options(baseLite.getBuilder({
envJson: {
alias: ['from-file'],
type: 'string',
default: "default-env.json",
desc: baseLite.bundle.getText("envJson")
},
secretsFolder: {
alias: ['to-folder'],
type: 'string',
default: "secrets",
desc: baseLite.bundle.getText("secretsFolder")
},
filter: {
type: 'string',
desc: baseLite.bundle.getText("secretsFilter")
}
}, false)).wrap(160).example(
'hana-cli copy2Secrets --secretsFolder ./secrets',
baseLite.bundle.getText("copy2SecretsExample")
).epilog(buildDocEpilogue('copy2Secrets', 'connection-auth', ['connect', 'copy2Env']))
export async function handler (argv) {
const base = await import('../utils/base.js')
makeSecrets(argv)
}
export async function makeSecrets({ envFile, secretsFolder, filter }) {
const base = await import('../utils/base.js')
base.debug(base.bundle.getText("debug.copy2Secrets.makeSecrets", [envFile, secretsFolder, filter]))
xsenv.loadEnv(envFile)
const VCAP_SERVICES = JSON.parse(process.env.VCAP_SERVICES)
base.debug(VCAP_SERVICES)
for (const service in VCAP_SERVICES) {
const instances = VCAP_SERVICES[service]
for (let i = 0; i < instances.length; i++) {
const instance = instances[i]
const instanceName = instance.name
if (filter && filter.length && !filter.includes(instanceName.toLowerCase())) {
continue
}
const credsPath = path.join(secretsFolder, service, instanceName)
fs.mkdirSync(credsPath, { recursive: true })
for (const key in instance.credentials) {
if (key === "encrypt") {
continue
}
const value = instance.credentials[key]
const keyPath = path.join(secretsFolder, service, instanceName, key)
fs.writeFileSync(
keyPath,
typeof value === 'string' ? value : JSON.stringify(value)
)
console.log(baseLite.bundle.getText("created") + ": " + keyPath)
}
}
}
return base.end()
}