@naturalcycles/nodejs-lib
Version:
Standard library for Node.js
44 lines (43 loc) • 1.82 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.secretsEncrypt = void 0;
const path = require("path");
const js_lib_1 = require("@naturalcycles/js-lib");
const fs = require("fs-extra");
const colors_1 = require("../colors");
const index_1 = require("../index");
const crypto_util_1 = require("../security/crypto.util");
/**
* Encrypts all files in given directory (except *.enc), saves encrypted versions as filename.ext.enc.
* Using provided encKey.
*/
function secretsEncrypt(pattern, file, encKey, del = false, jsonMode = false) {
const patterns = file
? [file]
: [
...pattern,
`!**/*.enc`, // excluding already encoded
];
const filenames = index_1.fastGlob.sync(patterns);
let encFilename;
filenames.forEach(filename => {
if (jsonMode) {
(0, js_lib_1._assert)(filename.endsWith('.plain.json'), `${path.basename(filename)} MUST end with '.plain.json'`);
encFilename = filename.replace('.plain', '');
const json = (0, crypto_util_1.encryptObject)(JSON.parse(fs.readFileSync(filename, 'utf8')), encKey);
fs.writeFileSync(encFilename, JSON.stringify(json, null, 2));
}
else {
const plain = fs.readFileSync(filename);
const enc = (0, crypto_util_1.encryptRandomIVBuffer)(plain, encKey);
encFilename = `${filename}.enc`;
fs.writeFileSync(encFilename, enc);
}
if (del) {
fs.unlinkSync(filename);
}
console.log(` ${path.basename(filename)} > ${path.basename(encFilename)}`);
});
console.log(`encrypted ${(0, colors_1.yellow)(filenames.length)} files in (${(0, colors_1.dimGrey)(pattern.join(' '))})`);
}
exports.secretsEncrypt = secretsEncrypt;
;