mirror of
https://github.com/sparrowwallet/sparrow.git
synced 2024-12-25 21:26:43 +00:00
add master fingerprint to passphrase entry dialog in terminal
This commit is contained in:
parent
e1fb674170
commit
6072f6d31a
3 changed files with 80 additions and 5 deletions
|
@ -0,0 +1,77 @@
|
||||||
|
package com.sparrowwallet.sparrow.terminal;
|
||||||
|
|
||||||
|
import com.googlecode.lanterna.TerminalSize;
|
||||||
|
import com.googlecode.lanterna.gui2.*;
|
||||||
|
import com.googlecode.lanterna.gui2.dialogs.DialogWindow;
|
||||||
|
import com.sparrowwallet.drongo.Utils;
|
||||||
|
import com.sparrowwallet.drongo.wallet.Keystore;
|
||||||
|
import com.sparrowwallet.drongo.wallet.MnemonicException;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
|
||||||
|
public class PassphraseDialog extends DialogWindow {
|
||||||
|
private final Label masterFingerprint;
|
||||||
|
private final TextBox passphrase;
|
||||||
|
private String result;
|
||||||
|
|
||||||
|
public PassphraseDialog(String walletName, Keystore keystore) {
|
||||||
|
super("Passphrase for " + walletName);
|
||||||
|
|
||||||
|
setHints(Collections.singleton(Window.Hint.CENTERED));
|
||||||
|
|
||||||
|
this.masterFingerprint = new Label("");
|
||||||
|
this.passphrase = new TextBox();
|
||||||
|
this.passphrase.setMask('*');
|
||||||
|
|
||||||
|
Panel buttonPanel = new Panel();
|
||||||
|
buttonPanel.setLayoutManager(new GridLayout(2).setHorizontalSpacing(1));
|
||||||
|
buttonPanel.addComponent(new Button(LocalizedString.OK.toString(), this::onOK).setLayoutData(GridLayout.createLayoutData(GridLayout.Alignment.CENTER, GridLayout.Alignment.CENTER, true, false)));
|
||||||
|
buttonPanel.addComponent(new Button(LocalizedString.Cancel.toString(), this::onCancel));
|
||||||
|
|
||||||
|
Panel mainPanel = new Panel();
|
||||||
|
mainPanel.setLayoutManager(new GridLayout(1).setLeftMarginSize(1).setRightMarginSize(1));
|
||||||
|
mainPanel.addComponent(new Label("Enter the BIP39 passphrase for keystore:\n" + keystore.getLabel()));
|
||||||
|
mainPanel.addComponent(new EmptySpace(TerminalSize.ONE));
|
||||||
|
passphrase.setLayoutData(GridLayout.createLayoutData(GridLayout.Alignment.FILL, GridLayout.Alignment.CENTER, true, false)).addTo(mainPanel);
|
||||||
|
mainPanel.addComponent(new EmptySpace(TerminalSize.ONE));
|
||||||
|
mainPanel.addComponent(masterFingerprint);
|
||||||
|
mainPanel.addComponent(new EmptySpace(TerminalSize.ONE));
|
||||||
|
buttonPanel.setLayoutData(GridLayout.createLayoutData(GridLayout.Alignment.END, GridLayout.Alignment.CENTER, false, false)).addTo(mainPanel);
|
||||||
|
setComponent(mainPanel);
|
||||||
|
|
||||||
|
passphrase.setTextChangeListener((newText, changedByUserInteraction) -> {
|
||||||
|
setMasterFingerprintLabel(keystore, newText);
|
||||||
|
});
|
||||||
|
setMasterFingerprintLabel(keystore, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onOK() {
|
||||||
|
result = passphrase.getText();
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onCancel() {
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String showDialog(WindowBasedTextGUI textGUI) {
|
||||||
|
result = null;
|
||||||
|
super.showDialog(textGUI);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setMasterFingerprintLabel(Keystore keystore, String passphrase) {
|
||||||
|
masterFingerprint.setText("Master fingerprint: " + Utils.bytesToHex(getMasterFingerprint(keystore, passphrase)));
|
||||||
|
}
|
||||||
|
|
||||||
|
private byte[] getMasterFingerprint(Keystore keystore, String passphrase) {
|
||||||
|
try {
|
||||||
|
Keystore copyKeystore = keystore.copy();
|
||||||
|
copyKeystore.getSeed().setPassphrase(passphrase);
|
||||||
|
return copyKeystore.getExtendedMasterPrivateKey().getKey().getFingerprint();
|
||||||
|
} catch(MnemonicException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,7 +2,6 @@ package com.sparrowwallet.sparrow.terminal;
|
||||||
|
|
||||||
import com.googlecode.lanterna.gui2.dialogs.MessageDialogBuilder;
|
import com.googlecode.lanterna.gui2.dialogs.MessageDialogBuilder;
|
||||||
import com.googlecode.lanterna.gui2.dialogs.MessageDialogButton;
|
import com.googlecode.lanterna.gui2.dialogs.MessageDialogButton;
|
||||||
import com.googlecode.lanterna.gui2.dialogs.TextInputDialogBuilder;
|
|
||||||
import com.sparrowwallet.drongo.wallet.Keystore;
|
import com.sparrowwallet.drongo.wallet.Keystore;
|
||||||
import com.sparrowwallet.sparrow.InteractionServices;
|
import com.sparrowwallet.sparrow.InteractionServices;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
|
@ -103,10 +102,8 @@ public class TerminalInteractionServices implements InteractionServices {
|
||||||
}
|
}
|
||||||
|
|
||||||
private Optional<String> showPassphraseDialog(String walletName, Keystore keystore) {
|
private Optional<String> showPassphraseDialog(String walletName, Keystore keystore) {
|
||||||
TextInputDialogBuilder builder = new TextInputDialogBuilder().setTitle("Passphrase for " + walletName);
|
PassphraseDialog passphraseDialog = new PassphraseDialog(walletName, keystore);
|
||||||
builder.setDescription("Enter the BIP39 passphrase for keystore:\n" + keystore.getLabel());
|
String passphrase = passphraseDialog.showDialog(SparrowTerminal.get().getGui());
|
||||||
builder.setPasswordInput(true);
|
|
||||||
String passphrase = builder.build().showDialog(SparrowTerminal.get().getGui());
|
|
||||||
return passphrase == null ? Optional.empty() : Optional.of(passphrase);
|
return passphrase == null ? Optional.empty() : Optional.of(passphrase);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -121,6 +121,7 @@ public class LoadWallet implements Runnable {
|
||||||
}
|
}
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
log.error("Wallet Error", e);
|
log.error("Wallet Error", e);
|
||||||
|
SparrowTerminal.get().getGuiThread().invokeLater(() -> SparrowTerminal.get().getGui().removeWindow(loadingDialog));
|
||||||
showErrorDialog("Wallet Error", e.getMessage());
|
showErrorDialog("Wallet Error", e.getMessage());
|
||||||
} finally {
|
} finally {
|
||||||
walletAndKey.clear();
|
walletAndKey.clear();
|
||||||
|
|
Loading…
Reference in a new issue