animiassumenda
Version:
Blox live, desktop app for managing staking accounts
73 lines (68 loc) • 2.67 kB
text/typescript
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;
}
}