1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.secretsDecrypt = void 0;
|
4 | const path = require("path");
|
5 | const js_lib_1 = require("@naturalcycles/js-lib");
|
6 | const fs = require("fs-extra");
|
7 | const globby = require("globby");
|
8 | const colors_1 = require("../colors");
|
9 | const crypto_util_1 = require("../security/crypto.util");
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 | function secretsDecrypt(dir, file, encKey, del = false, jsonMode = false) {
|
18 |
|
19 | const patterns = file ? [file] : dir.map(d => `${d}/**/*.enc`);
|
20 | const filenames = globby.sync(patterns);
|
21 | filenames.forEach(filename => {
|
22 | let plainFilename;
|
23 | if (jsonMode) {
|
24 | (0, js_lib_1._assert)(filename.endsWith('.json'), `${path.basename(filename)} MUST end with '.json'`);
|
25 | (0, js_lib_1._assert)(!filename.endsWith('.plain.json'), `${path.basename(filename)} MUST NOT end with '.plain.json'`);
|
26 | plainFilename = filename.replace('.json', '.plain.json');
|
27 | const json = (0, crypto_util_1.decryptObject)(JSON.parse(fs.readFileSync(filename, 'utf8')), encKey);
|
28 | fs.writeFileSync(plainFilename, JSON.stringify(json, null, 2));
|
29 | }
|
30 | else {
|
31 | const enc = fs.readFileSync(filename);
|
32 | const plain = (0, crypto_util_1.decryptRandomIVBuffer)(enc, encKey);
|
33 | plainFilename = filename.slice(0, filename.length - '.enc'.length);
|
34 | fs.writeFileSync(plainFilename, plain);
|
35 | }
|
36 | if (del) {
|
37 | fs.unlinkSync(filename);
|
38 | }
|
39 | console.log(` ${path.basename(filename)} > ${path.basename(plainFilename)}`);
|
40 | });
|
41 | console.log(`decrypted ${(0, colors_1.yellow)(filenames.length)} files in ${(0, colors_1.dimGrey)(dir.join(' '))}`);
|
42 | }
|
43 | exports.secretsDecrypt = secretsDecrypt;
|