improve incorrect password handling on final mix confirm

This commit is contained in:
Craig Raw 2021-12-01 14:43:48 +02:00
parent 00181875c1
commit 3b9c87abc7
2 changed files with 18 additions and 2 deletions

View file

@ -1,6 +1,7 @@
package com.sparrowwallet.sparrow.soroban; package com.sparrowwallet.sparrow.soroban;
import com.sparrowwallet.drongo.SecureString; import com.sparrowwallet.drongo.SecureString;
import com.sparrowwallet.drongo.crypto.InvalidPasswordException;
import com.sparrowwallet.drongo.protocol.Transaction; import com.sparrowwallet.drongo.protocol.Transaction;
import com.sparrowwallet.drongo.wallet.Wallet; import com.sparrowwallet.drongo.wallet.Wallet;
import com.sparrowwallet.drongo.wallet.WalletTransaction; import com.sparrowwallet.drongo.wallet.WalletTransaction;
@ -10,14 +11,21 @@ import com.sparrowwallet.sparrow.control.WalletPasswordDialog;
import com.sparrowwallet.sparrow.event.StorageEvent; import com.sparrowwallet.sparrow.event.StorageEvent;
import com.sparrowwallet.sparrow.event.TimedEvent; import com.sparrowwallet.sparrow.event.TimedEvent;
import com.sparrowwallet.sparrow.io.Storage; import com.sparrowwallet.sparrow.io.Storage;
import javafx.application.Platform;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;
import javafx.scene.control.*; import javafx.scene.control.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException; import java.io.IOException;
import java.util.Optional; import java.util.Optional;
import static com.sparrowwallet.sparrow.AppServices.showErrorDialog;
public class InitiatorDialog extends Dialog<Transaction> { public class InitiatorDialog extends Dialog<Transaction> {
private static final Logger log = LoggerFactory.getLogger(InitiatorDialog.class);
private final boolean confirmationRequired; private final boolean confirmationRequired;
public InitiatorDialog(String walletId, Wallet wallet, WalletTransaction walletTransaction) { public InitiatorDialog(String walletId, Wallet wallet, WalletTransaction walletTransaction) {
@ -34,7 +42,7 @@ public class InitiatorDialog extends Dialog<Transaction> {
initiatorController.initializeView(walletId, wallet, walletTransaction); initiatorController.initializeView(walletId, wallet, walletTransaction);
dialogPane.setPrefWidth(730); dialogPane.setPrefWidth(730);
dialogPane.setPrefHeight(520); dialogPane.setPrefHeight(530);
AppServices.moveToActiveWindowScreen(this); AppServices.moveToActiveWindowScreen(this);
dialogPane.getStylesheets().add(AppServices.class.getResource("app.css").toExternalForm()); dialogPane.getStylesheets().add(AppServices.class.getResource("app.css").toExternalForm());
@ -114,6 +122,14 @@ public class InitiatorDialog extends Dialog<Transaction> {
}); });
keyDerivationService.setOnFailed(workerStateEvent -> { keyDerivationService.setOnFailed(workerStateEvent -> {
EventManager.get().post(new StorageEvent(walletId, TimedEvent.Action.END, "Failed")); EventManager.get().post(new StorageEvent(walletId, TimedEvent.Action.END, "Failed"));
if(keyDerivationService.getException() instanceof InvalidPasswordException) {
Optional<ButtonType> optResponse = showErrorDialog("Invalid Password", "The wallet password was invalid. Try again?", ButtonType.CANCEL, ButtonType.OK);
if(optResponse.isPresent() && optResponse.get().equals(ButtonType.OK)) {
Platform.runLater(() -> acceptAndBroadcast(initiatorController, walletId, wallet));
}
} else {
log.error("Error deriving wallet key", keyDerivationService.getException());
}
}); });
EventManager.get().post(new StorageEvent(walletId, TimedEvent.Action.START, "Decrypting wallet...")); EventManager.get().post(new StorageEvent(walletId, TimedEvent.Action.START, "Decrypting wallet..."));
keyDerivationService.start(); keyDerivationService.start();

View file

@ -37,7 +37,7 @@
<Label text="Ask your partner for their PayNym, or use their payment code found in their Sparrow Tools menu → Find Mix Partner. They will need a Native Segwit software wallet like this one." wrapText="true" styleClass="content-text" /> <Label text="Ask your partner for their PayNym, or use their payment code found in their Sparrow Tools menu → Find Mix Partner. They will need a Native Segwit software wallet like this one." wrapText="true" styleClass="content-text" />
<BorderPane> <BorderPane>
<padding> <padding>
<Insets top="20" right="70" /> <Insets top="15" right="70" />
</padding> </padding>
<center> <center>
<VBox spacing="15"> <VBox spacing="15">