fix: use correct prompt for existing passhprases
authorAJ ONeal <coolaj86@gmail.com>
Sat, 25 Jun 2022 07:42:25 +0000 (01:42 -0600)
committerAJ ONeal <coolaj86@gmail.com>
Sat, 25 Jun 2022 09:36:54 +0000 (03:36 -0600)
bin/crowdnode.js

index 7815cbf5c329d4873cc679abfc48e13a4c3c6ed7..f3b1d88a4f6fc7db31cfe9e9aab9ab19e687c0de 100755 (executable)
@@ -614,7 +614,7 @@ async function setPassphrase({ _askPreviousPassphrase }, args) {
 
   // get the old passphrase
   if (false !== _askPreviousPassphrase) {
-    await cmds.getPassphrase(null, []);
+    await cmds.getPassphrase({ _rotatePassphrase: true }, []);
   }
 
   // get the new passphrase
@@ -702,6 +702,37 @@ async function importKey(_, args) {
   console.info(``);
 }
 
+/**
+ * Import and Encrypt
+ * @param {Null} _
+ * @param {Array<String>} args
+ */
+async function importKey(_, args) {
+  let keypath = args.shift() || "";
+  let key = await maybeReadKeyFileRaw(keypath);
+  if (!key?.wif) {
+    console.error(`no key found for '${keypath}'`);
+    process.exit(1);
+    return;
+  }
+
+  let encWif = await maybeEncrypt(key.wif);
+  let icon = "💾";
+  if (encWif.includes(":")) {
+    icon = "🔐";
+  }
+  let date = getFsDateString();
+
+  await safeSave(
+    Path.join(keysDir, `${key.addr}.wif`),
+    encWif,
+    Path.join(keysDir, `${key.addr}.${date}.bak`),
+  );
+
+  console.info(`${icon} Imported ${keysDirRel}/${key.addr}.wif`);
+  console.info(``);
+}
+
 /**
  * Encrypt ALL-the-things!
  * @param {Object} [opts]
@@ -797,10 +828,11 @@ async function safeSave(filepath, wif, bakpath) {
 }
 
 /**
- * @param {Null} psuedoState
+ * @param {Object} opts
+ * @param {Boolean} [opts._rotatePassphrase]
  * @param {Array<String>} args
  */
-cmds.getPassphrase = async function (psuedoState, args) {
+cmds.getPassphrase = async function ({ _rotatePassphrase }, args) {
   // Three possible states:
   //   1. no shadow file yet (ask to set one)
   //   2. empty shadow file (initialized, but not set - don't ask to set one)
@@ -851,7 +883,11 @@ cmds.getPassphrase = async function (psuedoState, args) {
 
   // State 3: passphrase & shadow already in use
   for (;;) {
-    let passphrase = await Prompt.prompt("Enter (current) passphrase: ", {
+    let prompt = `Enter passphrase: `;
+    if (_rotatePassphrase) {
+      prompt = `Enter (current) passphrase: `;
+    }
+    let passphrase = await Prompt.prompt(prompt, {
       mask: true,
     });
     passphrase = passphrase.trim();
@@ -991,7 +1027,7 @@ async function maybeReadKeyFileRaw(filepath, opts) {
 async function decrypt(encWif) {
   let passphrase = cmds._getPassphrase();
   if (!passphrase) {
-    passphrase = await cmds.getPassphrase(null, []);
+    passphrase = await cmds.getPassphrase({}, []);
   }
   let key128 = await Cipher.deriveKey(passphrase);
   let cipher = Cipher.create(key128);
@@ -1005,7 +1041,7 @@ async function decrypt(encWif) {
 async function maybeEncrypt(plainWif) {
   let passphrase = cmds._getPassphrase();
   if (!passphrase) {
-    passphrase = await cmds.getPassphrase(null, []);
+    passphrase = await cmds.getPassphrase({}, []);
   }
   if (!passphrase) {
     return plainWif;