-
-
Notifications
You must be signed in to change notification settings - Fork 2
/
decryptDir.js
67 lines (61 loc) · 2 KB
/
decryptDir.js
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
const fs = require("fs");
const { decrypt, generateKey } = require("./");
const nodeDir = require("node-dir");
const pull = require("pull-stream");
const path = require("path");
const key = process.env.KEY;
if (!key) {
return console.error("KEY environment variable was not set, aborting");
}
const prepareDocumentPath = (fileName) => {
let documentPath = fileName.replace("/files_to_decrypt/", "/decrypted/");
if (!documentPath.includes("/US_TAX_FORM/20")) {
// Get year from filename (US_TAX_FORM_2020_xxx.pdf)
const year = fileName.match(/US_TAX[ _]FORM_(\d{4})/i)[1];
documentPath = documentPath
.replace("/decrypted/", `/decrypted/US_TAX_FORM/${year}/`) // Move to year folder
.replace(/US_TAX_FORM_\d{4}_/, ""); // Remove year prefix from filename
}
return documentPath;
};
const filesToIgnore = [
"robots.txt",
// Not sure where this one is coming from, it's not linked in the DB
"US_TAX_FORM_matthew-davis1.pdf",
"US_TAX_FORM_matthew-davis1.pdf.encrypted",
];
pull(
pull.once(__dirname + "/files_to_decrypt"),
pull.asyncMap((dir, cb) =>
nodeDir.files(dir, "file", cb, { recursive: true })
),
pull.flatten(),
pull.asyncMap((fileName, cb) => {
fs.readFile(fileName, (err, file) => {
cb(err, { fileName, file });
});
}),
pull.filter(
({ fileName }) => !filesToIgnore.includes(path.basename(fileName))
),
pull.map(
({ file, fileName }) =>
console.log(fileName) || { file: decrypt(file, key), fileName }
),
pull.map(({ file, fileName }) => ({
file,
fileName: fileName.replace(/\.encrypted$/, ""),
})),
pull.asyncMap(({ file, fileName }, cb) => {
const outPath = prepareDocumentPath(fileName);
const outDir = path.dirname(outPath);
if (!fs.existsSync(outDir)) {
fs.mkdirSync(outDir, { recursive: true });
}
fs.writeFile(outPath, file, cb);
}),
pull.collect((err, results) => {
if (err) return console.log("Error decrypting: ", err);
console.log(`Done decrypting ${results.length} files`);
})
);