UNPKG

animiassumenda

Version:

Blox live, desktop app for managing staking accounts

73 lines (68 loc) 2.67 kB
import Http from './http'; import config from '../config'; import { Log } from '../logger/logger'; import KeyVaultSsh from './key-vault-ssh'; import Connection from '../store-manager/connection'; import { isVersionHigherOrEqual } from '../../../utils/service'; export default class KeyVaultApi extends Http { private storePrefix: string; private readonly keyVaultSsh: KeyVaultSsh; constructor(prefix: string = '') { super(); this.logger = new Log('key-vault-api'); this.storePrefix = prefix; this.keyVaultSsh = new KeyVaultSsh(prefix); } init(isNetworkRequired: boolean = true) { let network: string; if (isNetworkRequired) { network = Connection.db(this.storePrefix).get('network'); if (!network) { throw new Error('Configuration settings network not found'); } } this.instance.defaults.baseURL = `http://${Connection.db(this.storePrefix).get('publicIp')}:8200/v1/${isNetworkRequired ? `ethereum/${network}` : ''}`; this.instance.defaults.headers.common.Authorization = `Bearer ${Connection.db(this.storePrefix).get('vaultRootToken')}`; } async requestThruSsh({ method, path, data = null, isNetworkRequired = true }): Promise<any> { let network: string; if (isNetworkRequired) { network = Connection.db(this.storePrefix).get('network'); if (!network) { throw new Error('Configuration settings network not found'); } } const ssh = await this.keyVaultSsh.getConnection(); let remoteFileName; if (data) { remoteFileName = await this.keyVaultSsh.dataToRemoteFile(data); } const keyVaultVersion = Connection.db(this.storePrefix).get('keyVaultVersion'); const command = this.keyVaultSsh.buildCurlCommand({ authToken: Connection.db(this.storePrefix).get('vaultRootToken'), method, // data: { data }, dataAsFile: remoteFileName, route: `http${isVersionHigherOrEqual(keyVaultVersion, config.env.SSL_SUPPORTED_TAG) ? 's' : ''}://localhost:8200/v1/${isNetworkRequired ? `ethereum/${network}/` : ''}${path}` }, true); this.logger.trace('keyvault server cmd', command); const { stdout, stderr } = await ssh.execCommand(command, {}); if (stderr) { this.logger.trace('keyvault stdout error', stderr); throw new Error(stderr); } const body = JSON.parse(stdout); // remoteFileName && await ssh.execCommand(`rm ${remoteFileName}`, {}); this.logger.trace('keyvault server answer', command); if (body.errors) { this.logger.trace('keyvault server errors', body); throw new Error(JSON.stringify(body)); } return body; } }