UNPKG

2.86 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.secretsDecrypt = void 0;
4const path = require("path");
5const js_lib_1 = require("@naturalcycles/js-lib");
6const fs = require("fs-extra");
7const globby = require("globby");
8const colors_1 = require("../colors");
9const crypto_util_1 = require("../security/crypto.util");
10// Debug it like this:
11// yarn tsn ./src/bin/secrets-decrypt.ts --file ./src/test/secrets2.json --jsonMode --encKey MPd/30v0Zcce4I5mfwF4NSXrpTYD9OO4/fIqw6rjNiWp2b1GN9Xm8nQZqr7c9kKSsATqtwe0HkJFDUGzDSow44GDgDICgB1u1rGa5eNqtxnOVGRR+lIinCvN/1OnpjzeoJy2bStXPj1DKx8anMqgA8SoOZdlWRNSkEeZlolru8Ey0ujZo22dfwMyRIEniLcqvBm/iMiAkV82fn/TxYw05GarAoJcrfPeDBvuOXsARnMCyX18qTFL0iojxeTU8JHxr8TX3eXDq9cJJmridEKlwRIAzADwtetI4ttlP8lwJj1pmgsBIN3iqYssZYCkZ3HMV6BoEc7LTI5z/45rKrAT1A==
12// yarn tsn ./src/bin/secrets-encrypt.ts --file ./src/test/secrets2.plain.json --jsonMode --encKey MPd/30v0Zcce4I5mfwF4NSXrpTYD9OO4/fIqw6rjNiWp2b1GN9Xm8nQZqr7c9kKSsATqtwe0HkJFDUGzDSow44GDgDICgB1u1rGa5eNqtxnOVGRR+lIinCvN/1OnpjzeoJy2bStXPj1DKx8anMqgA8SoOZdlWRNSkEeZlolru8Ey0ujZo22dfwMyRIEniLcqvBm/iMiAkV82fn/TxYw05GarAoJcrfPeDBvuOXsARnMCyX18qTFL0iojxeTU8JHxr8TX3eXDq9cJJmridEKlwRIAzADwtetI4ttlP8lwJj1pmgsBIN3iqYssZYCkZ3HMV6BoEc7LTI5z/45rKrAT1A==
13/**
14 * Decrypts all files in given directory (*.enc), saves decrypted versions without ending `.enc`.
15 * Using provided encKey.
16 */
17function secretsDecrypt(dir, file, encKey, del = false, jsonMode = false) {
18 // If `file` is provided - only this one file is used
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}
43exports.secretsDecrypt = secretsDecrypt;