summaryrefslogtreecommitdiff
path: root/src/routers/vault/utils/flatfile.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/routers/vault/utils/flatfile.js')
-rw-r--r--src/routers/vault/utils/flatfile.js31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/routers/vault/utils/flatfile.js b/src/routers/vault/utils/flatfile.js
new file mode 100644
index 0000000..e9d6fee
--- /dev/null
+++ b/src/routers/vault/utils/flatfile.js
@@ -0,0 +1,31 @@
+const execFile = require("child_process").execFile;
+const ripgrep = require("ripgrep-bin");
+
+const execAsync = (cmd, par) =>
+ new Promise((resolve, reject) =>
+ execFile(cmd, par, (error, stdout, stderr) =>
+ resolve(error ? "" : (stdout ? stdout : stderr))));
+
+const tmwa_account_regex = new RegExp("^(?<id>[0-9]+)\t(?<name>[^\t]+)\t(?<password>[^\t]+)\t");
+
+const parseAccountLine = (line) => {
+ const { groups: account } = tmwa_account_regex.exec(line);
+ return {
+ id: +account.id,
+ name: account.name,
+ password: account.password,
+ };
+}
+
+const findAccount = async (account_id, name) => {
+ const regex = `^${account_id}\t${name}\t`;
+ const stdout = await execAsync(ripgrep, ["--case-sensitive", `--max-count=1`, regex, "account.txt"]);
+ let account = null;
+ if (stdout.length)
+ account = parseAccountLine(stdout.slice(0, -1).split("\n")[0]);
+ return account;
+};
+
+module.exports = {
+ findAccount,
+};