-
Notifications
You must be signed in to change notification settings - Fork 458
/
import.ts
99 lines (90 loc) 路 2.32 KB
/
import.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/*
* Copyright 漏 2022 Lisk Foundation
*
* See the LICENSE file at the top-level directory of this distribution
* for licensing information.
*
* Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation,
* no part of this software, including this file, may be copied, modified,
* propagated, or distributed except according to the terms contained in the
* LICENSE file.
*
* Removal or modification of this copyright notice is prohibited.
*
*/
import { encrypt } from '@liskhq/lisk-cryptography';
import { Flags as flagParser } from '@oclif/core';
import * as fs from 'fs-extra';
import { BaseIPCClientCommand } from '../base_ipc_client';
interface EncryptedMessageObject {
readonly version: string;
readonly ciphertext: string;
readonly mac: string;
readonly kdf: encrypt.KDF;
readonly kdfparams: {
parallelism: number;
iterations: number;
memorySize: number;
salt: string;
};
readonly cipher: encrypt.Cipher;
readonly cipherparams: {
iv: string;
tag: string;
};
}
interface Keys {
keys: [
{
address: string;
plain?: {
generatorKey: string;
generatorPrivateKey: string;
blsKey: string;
blsPrivateKey: string;
};
encrypted?: EncryptedMessageObject;
},
];
}
export abstract class ImportCommand extends BaseIPCClientCommand {
static description = 'Import from <FILE>.';
static examples = [
'keys:import --file-path ./my/path/keys.json',
'keys:import --file-path ./my/path/keys.json --data-path ./data ',
];
static flags = {
...BaseIPCClientCommand.flags,
'file-path': flagParser.string({
char: 'f',
description: 'Path of the file to import from',
required: true,
}),
};
async run(): Promise<void> {
const { flags } = await this.parse(ImportCommand);
if (!this._client) {
this.error('APIClient is not initialized.');
}
const fileData = fs.readJSONSync(flags['file-path']) as unknown as Keys;
const keys = fileData.keys.map(k => {
let type: 'encrypted' | 'plain';
let returnData;
if (k.encrypted && Object.keys(k.encrypted).length !== 0) {
type = 'encrypted';
returnData = k.encrypted;
} else {
type = 'plain';
returnData = k.plain;
}
return {
address: k.address,
type,
data: returnData,
};
});
for (const key of keys) {
await this._client.invoke('generator_setKeys', key);
}
}
}