]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/commitdiff
Make seed field editable
authorIan Coleman <ian@iancoleman.io>
Tue, 17 Dec 2019 23:32:25 +0000 (10:32 +1100)
committerIan Coleman <ian@iancoleman.io>
Tue, 17 Dec 2019 23:32:25 +0000 (10:32 +1100)
src/index.html
src/js/index.js
tests/spec/tests.js

index fe048dcb051f5127df95dc4239e3f63933a8635e..e8aac4da924edda9a6a76d2d18bec35ca074ca01 100644 (file)
                         <div class="form-group">
                             <label for="seed" class="col-sm-2 control-label">BIP39 Seed</label>
                             <div class="col-sm-10">
-                                <textarea id="seed" class="seed private-data form-control" readonly="readonly" data-show-qr autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"></textarea>
+                                <textarea id="seed" class="seed private-data form-control" data-show-qr autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"></textarea>
                             </div>
                         </div>
                         <div class="form-group">
index d169ed28dc2ebcd808c2d1ec9edbb0b1455d3280..3148ca49bcd2993b8aa6d6d813abeebade70d58e 100644 (file)
@@ -19,6 +19,7 @@
     var entropyTypeAutoDetect = true;
     var entropyChangeTimeoutEvent = null;
     var phraseChangeTimeoutEvent = null;
+    var seedChangedTimeoutEvent = null;
     var rootKeyChangedTimeoutEvent = null;
 
     var generationProcesses = [];
         DOM.passphrase.on("input", delayedPhraseChanged);
         DOM.generate.on("click", generateClicked);
         DOM.more.on("click", showMore);
+        DOM.seed.on("input", delayedSeedChanged);
         DOM.rootKey.on("input", delayedRootKeyChanged);
         DOM.litecoinUseLtub.on("change", litecoinUseLtubChanged);
         DOM.bip32path.on("input", calcForDerivationPath);
         entropyChanged();
     }
 
+    function delayedSeedChanged() {
+        // Warn if there is an existing mnemonic or passphrase.
+        if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
+            if (!confirm("This will clear existing mnemonic and passphrase")) {
+                DOM.seed.val(seed);
+                return
+            }
+        }
+        hideValidationError();
+        showPending();
+        // Clear existing mnemonic and passphrase
+        DOM.phrase.val("");
+        DOM.phraseSplit.val("");
+        DOM.passphrase.val("");
+        DOM.rootKey.val("");
+        clearAddressesList();
+        clearDerivedKeys();
+        seed = null;
+        if (seedChangedTimeoutEvent != null) {
+            clearTimeout(seedChangedTimeoutEvent);
+        }
+        seedChangedTimeoutEvent = setTimeout(seedChanged, 400);
+    }
+
     function delayedRootKeyChanged() {
         // Warn if there is an existing mnemonic or passphrase.
         if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
         rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
     }
 
+    function seedChanged() {
+        showPending();
+        hideValidationError();
+        seed = DOM.seed.val();
+        bip32RootKey = bitcoinjs.bitcoin.HDNode.fromSeedHex(seed, network);
+        var rootKeyBase58 = bip32RootKey.toBase58();
+        DOM.rootKey.val(rootKeyBase58);
+        var errorText = validateRootKey(rootKeyBase58);
+        if (errorText) {
+            showValidationError(errorText);
+            return;
+        }
+        // Calculate and display
+        calcForDerivationPath();
+    }
+
     function rootKeyChanged() {
         showPending();
         hideValidationError();
index 260ff2c73a72b9eadfb44e6047387de18784bf14..0e933439cdad2035415745f4b10b75d8e541feef 100644 (file)
@@ -4336,4 +4336,17 @@ it('Allows entropy type to be manually selected', function(done) {
     });
 });
 
+// https://github.com/iancoleman/bip39/issues/388
+// Make field for bip39 seed editable
+it('Generates addresses when seed is set', function(done) {
+    driver.findElement(By.css('.seed'))
+        .sendKeys("20da140d3dd1df8713cefcc4d54ce0e445b4151027a1ab567b832f6da5fcc5afc1c3a3f199ab78b8e0ab4652efd7f414ac2c9a3b81bceb879a70f377aa0a58f3");
+    driver.sleep(generateDelay).then(function() {
+        getFirstAddress(function(address) {
+            expect(address).toBe("1Di3Vp7tBWtyQaDABLAjfWtF6V7hYKJtug");
+            done();
+        });
+    });
+});
+
 });