Search in sources :

Example 1 with StorageEvent

use of com.sparrowwallet.sparrow.event.StorageEvent in project sparrow by sparrowwallet.

the class MessageSignDialog method openWallets.

@Subscribe
public void openWallets(OpenWalletsEvent event) {
    Storage storage = event.getStorage(wallet);
    if (storage == null) {
        // Another window, ignore
        return;
    }
    WalletPasswordDialog dlg = new WalletPasswordDialog(wallet.getMasterName(), WalletPasswordDialog.PasswordRequirement.LOAD);
    Optional<SecureString> password = dlg.showAndWait();
    if (password.isPresent()) {
        Storage.DecryptWalletService decryptWalletService = new Storage.DecryptWalletService(walletNode.getWallet().copy(), password.get());
        decryptWalletService.setOnSucceeded(workerStateEvent -> {
            EventManager.get().post(new StorageEvent(storage.getWalletId(wallet), TimedEvent.Action.END, "Done"));
            Wallet decryptedWallet = decryptWalletService.getValue();
            signUnencryptedKeystore(decryptedWallet);
            decryptedWallet.clearPrivate();
        });
        decryptWalletService.setOnFailed(workerStateEvent -> {
            EventManager.get().post(new StorageEvent(storage.getWalletId(wallet), TimedEvent.Action.END, "Failed"));
            AppServices.showErrorDialog("Incorrect Password", decryptWalletService.getException().getMessage());
        });
        EventManager.get().post(new StorageEvent(storage.getWalletId(wallet), TimedEvent.Action.START, "Decrypting wallet..."));
        decryptWalletService.start();
    }
}
Also used : Storage(com.sparrowwallet.sparrow.io.Storage) StorageEvent(com.sparrowwallet.sparrow.event.StorageEvent) Wallet(com.sparrowwallet.drongo.wallet.Wallet) SecureString(com.sparrowwallet.drongo.SecureString) Subscribe(com.google.common.eventbus.Subscribe)

Example 2 with StorageEvent

use of com.sparrowwallet.sparrow.event.StorageEvent in project sparrow by sparrowwallet.

the class FileWalletExportPane method exportWallet.

private void exportWallet(File file) {
    if (wallet.isEncrypted() && exporter.walletExportRequiresDecryption()) {
        Wallet copy = wallet.copy();
        WalletPasswordDialog dlg = new WalletPasswordDialog(wallet.getMasterName(), WalletPasswordDialog.PasswordRequirement.LOAD);
        Optional<SecureString> password = dlg.showAndWait();
        if (password.isPresent()) {
            final String walletId = AppServices.get().getOpenWallets().get(wallet).getWalletId(wallet);
            Storage.DecryptWalletService decryptWalletService = new Storage.DecryptWalletService(copy, password.get());
            decryptWalletService.setOnSucceeded(workerStateEvent -> {
                EventManager.get().post(new StorageEvent(walletId, TimedEvent.Action.END, "Done"));
                Wallet decryptedWallet = decryptWalletService.getValue();
                try {
                    exportWallet(file, decryptedWallet);
                } finally {
                    decryptedWallet.clearPrivate();
                }
            });
            decryptWalletService.setOnFailed(workerStateEvent -> {
                EventManager.get().post(new StorageEvent(walletId, TimedEvent.Action.END, "Failed"));
                setError("Export Error", decryptWalletService.getException().getMessage());
            });
            EventManager.get().post(new StorageEvent(walletId, TimedEvent.Action.START, "Decrypting wallet..."));
            decryptWalletService.start();
        }
    } else {
        exportWallet(file, wallet);
    }
}
Also used : StorageEvent(com.sparrowwallet.sparrow.event.StorageEvent) Wallet(com.sparrowwallet.drongo.wallet.Wallet) SecureString(com.sparrowwallet.drongo.SecureString) SecureString(com.sparrowwallet.drongo.SecureString)

Example 3 with StorageEvent

use of com.sparrowwallet.sparrow.event.StorageEvent in project sparrow by sparrowwallet.

the class InitiatorDialog method acceptAndBroadcast.

private void acceptAndBroadcast(InitiatorController initiatorController, String walletId, Wallet wallet) {
    if (confirmationRequired && wallet.isEncrypted()) {
        WalletPasswordDialog dlg = new WalletPasswordDialog(wallet.getMasterName(), WalletPasswordDialog.PasswordRequirement.LOAD);
        Optional<SecureString> password = dlg.showAndWait();
        if (password.isPresent()) {
            Storage storage = AppServices.get().getOpenWallets().get(wallet);
            Storage.KeyDerivationService keyDerivationService = new Storage.KeyDerivationService(storage, password.get(), true);
            keyDerivationService.setOnSucceeded(workerStateEvent -> {
                EventManager.get().post(new StorageEvent(walletId, TimedEvent.Action.END, "Done"));
                initiatorController.accept();
                password.get().clear();
            });
            keyDerivationService.setOnFailed(workerStateEvent -> {
                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..."));
            keyDerivationService.start();
        }
    } else {
        initiatorController.accept();
    }
}
Also used : WalletPasswordDialog(com.sparrowwallet.sparrow.control.WalletPasswordDialog) Storage(com.sparrowwallet.sparrow.io.Storage) StorageEvent(com.sparrowwallet.sparrow.event.StorageEvent) InvalidPasswordException(com.sparrowwallet.drongo.crypto.InvalidPasswordException) SecureString(com.sparrowwallet.drongo.SecureString)

Aggregations

SecureString (com.sparrowwallet.drongo.SecureString)3 StorageEvent (com.sparrowwallet.sparrow.event.StorageEvent)3 Wallet (com.sparrowwallet.drongo.wallet.Wallet)2 Storage (com.sparrowwallet.sparrow.io.Storage)2 Subscribe (com.google.common.eventbus.Subscribe)1 InvalidPasswordException (com.sparrowwallet.drongo.crypto.InvalidPasswordException)1 WalletPasswordDialog (com.sparrowwallet.sparrow.control.WalletPasswordDialog)1