mirror of
https://github.com/sparrowwallet/sparrow.git
synced 2024-11-05 05:46:44 +00:00
fix import of sparrow wallet with seed, alphabetically sort import and export choices
This commit is contained in:
parent
c68c713a4b
commit
9b8f97c041
7 changed files with 30 additions and 5 deletions
|
@ -961,6 +961,10 @@ public class AppController implements Initializable {
|
||||||
walletFile.delete();
|
walletFile.delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(wallet.isEncrypted()) {
|
||||||
|
throw new IllegalArgumentException("Imported wallet must be unencrypted");
|
||||||
|
}
|
||||||
|
|
||||||
Storage storage = new Storage(Storage.getWalletFile(wallet.getName()));
|
Storage storage = new Storage(Storage.getWalletFile(wallet.getName()));
|
||||||
WalletPasswordDialog dlg = new WalletPasswordDialog(wallet.getName(), WalletPasswordDialog.PasswordRequirement.UPDATE_NEW);
|
WalletPasswordDialog dlg = new WalletPasswordDialog(wallet.getName(), WalletPasswordDialog.PasswordRequirement.UPDATE_NEW);
|
||||||
Optional<SecureString> password = dlg.showAndWait();
|
Optional<SecureString> password = dlg.showAndWait();
|
||||||
|
@ -969,8 +973,10 @@ public class AppController implements Initializable {
|
||||||
try {
|
try {
|
||||||
storage.setEncryptionPubKey(Storage.NO_PASSWORD_KEY);
|
storage.setEncryptionPubKey(Storage.NO_PASSWORD_KEY);
|
||||||
storage.saveWallet(wallet);
|
storage.saveWallet(wallet);
|
||||||
|
checkWalletNetwork(wallet);
|
||||||
|
restorePublicKeysFromSeed(wallet, null);
|
||||||
addWalletTabOrWindow(storage, wallet, null, false);
|
addWalletTabOrWindow(storage, wallet, null, false);
|
||||||
} catch(IOException | StorageException e) {
|
} catch(IOException | StorageException | MnemonicException e) {
|
||||||
log.error("Error saving imported wallet", e);
|
log.error("Error saving imported wallet", e);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -986,8 +992,10 @@ public class AppController implements Initializable {
|
||||||
wallet.encrypt(key);
|
wallet.encrypt(key);
|
||||||
storage.setEncryptionPubKey(encryptionPubKey);
|
storage.setEncryptionPubKey(encryptionPubKey);
|
||||||
storage.saveWallet(wallet);
|
storage.saveWallet(wallet);
|
||||||
|
checkWalletNetwork(wallet);
|
||||||
|
restorePublicKeysFromSeed(wallet, key);
|
||||||
addWalletTabOrWindow(storage, wallet, null, false);
|
addWalletTabOrWindow(storage, wallet, null, false);
|
||||||
} catch(IOException | StorageException e) {
|
} catch(IOException | StorageException | MnemonicException e) {
|
||||||
log.error("Error saving imported wallet", e);
|
log.error("Error saving imported wallet", e);
|
||||||
} finally {
|
} finally {
|
||||||
encryptionFullKey.clear();
|
encryptionFullKey.clear();
|
||||||
|
|
|
@ -16,6 +16,7 @@ import java.util.Arrays;
|
||||||
import java.util.OptionalDouble;
|
import java.util.OptionalDouble;
|
||||||
|
|
||||||
public class TitledDescriptionPane extends TitledPane {
|
public class TitledDescriptionPane extends TitledPane {
|
||||||
|
private Label mainLabel;
|
||||||
private Label descriptionLabel;
|
private Label descriptionLabel;
|
||||||
protected Hyperlink showHideLink;
|
protected Hyperlink showHideLink;
|
||||||
protected HBox buttonBox;
|
protected HBox buttonBox;
|
||||||
|
@ -50,7 +51,7 @@ public class TitledDescriptionPane extends TitledPane {
|
||||||
VBox labelsBox = new VBox();
|
VBox labelsBox = new VBox();
|
||||||
labelsBox.setSpacing(5);
|
labelsBox.setSpacing(5);
|
||||||
labelsBox.setAlignment(Pos.CENTER_LEFT);
|
labelsBox.setAlignment(Pos.CENTER_LEFT);
|
||||||
Label mainLabel = new Label();
|
mainLabel = new Label();
|
||||||
mainLabel.setText(title);
|
mainLabel.setText(title);
|
||||||
mainLabel.getStyleClass().add("main-label");
|
mainLabel.getStyleClass().add("main-label");
|
||||||
labelsBox.getChildren().add(mainLabel);
|
labelsBox.getChildren().add(mainLabel);
|
||||||
|
@ -99,6 +100,10 @@ public class TitledDescriptionPane extends TitledPane {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getTitle() {
|
||||||
|
return mainLabel.getText();
|
||||||
|
}
|
||||||
|
|
||||||
protected void setDescription(String text) {
|
protected void setDescription(String text) {
|
||||||
descriptionLabel.getStyleClass().remove("description-error");
|
descriptionLabel.getStyleClass().remove("description-error");
|
||||||
descriptionLabel.getStyleClass().add("description-label");
|
descriptionLabel.getStyleClass().add("description-label");
|
||||||
|
|
|
@ -11,6 +11,7 @@ import javafx.scene.control.*;
|
||||||
import javafx.scene.layout.AnchorPane;
|
import javafx.scene.layout.AnchorPane;
|
||||||
import javafx.scene.layout.StackPane;
|
import javafx.scene.layout.StackPane;
|
||||||
|
|
||||||
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class WalletExportDialog extends Dialog<Wallet> {
|
public class WalletExportDialog extends Dialog<Wallet> {
|
||||||
|
@ -53,6 +54,8 @@ public class WalletExportDialog extends Dialog<Wallet> {
|
||||||
FileWalletExportPane exportPane = new FileWalletExportPane(wallet, exporter);
|
FileWalletExportPane exportPane = new FileWalletExportPane(wallet, exporter);
|
||||||
exportAccordion.getPanes().add(exportPane);
|
exportAccordion.getPanes().add(exportPane);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
exportAccordion.getPanes().sort(Comparator.comparing(o -> ((TitledDescriptionPane) o).getTitle()));
|
||||||
scrollPane.setContent(exportAccordion);
|
scrollPane.setContent(exportAccordion);
|
||||||
|
|
||||||
final ButtonType cancelButtonType = new javafx.scene.control.ButtonType("Cancel", ButtonBar.ButtonData.CANCEL_CLOSE);
|
final ButtonType cancelButtonType = new javafx.scene.control.ButtonType("Cancel", ButtonBar.ButtonData.CANCEL_CLOSE);
|
||||||
|
|
|
@ -16,6 +16,7 @@ import javafx.scene.layout.AnchorPane;
|
||||||
import javafx.scene.layout.StackPane;
|
import javafx.scene.layout.StackPane;
|
||||||
import org.controlsfx.glyphfont.Glyph;
|
import org.controlsfx.glyphfont.Glyph;
|
||||||
|
|
||||||
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class WalletImportDialog extends Dialog<Wallet> {
|
public class WalletImportDialog extends Dialog<Wallet> {
|
||||||
|
@ -58,6 +59,8 @@ public class WalletImportDialog extends Dialog<Wallet> {
|
||||||
FileWalletImportPane importPane = new FileWalletImportPane(importer);
|
FileWalletImportPane importPane = new FileWalletImportPane(importer);
|
||||||
importAccordion.getPanes().add(importPane);
|
importAccordion.getPanes().add(importPane);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
importAccordion.getPanes().sort(Comparator.comparing(o -> ((TitledDescriptionPane) o).getTitle()));
|
||||||
scrollPane.setContent(importAccordion);
|
scrollPane.setContent(importAccordion);
|
||||||
|
|
||||||
final ButtonType cancelButtonType = new javafx.scene.control.ButtonType("Cancel", ButtonBar.ButtonData.CANCEL_CLOSE);
|
final ButtonType cancelButtonType = new javafx.scene.control.ButtonType("Cancel", ButtonBar.ButtonData.CANCEL_CLOSE);
|
||||||
|
|
|
@ -91,7 +91,9 @@ public class Sparrow implements WalletImport, WalletExport {
|
||||||
if(!isEncrypted(tempFile)) {
|
if(!isEncrypted(tempFile)) {
|
||||||
return storage.loadUnencryptedWallet().getWallet();
|
return storage.loadUnencryptedWallet().getWallet();
|
||||||
} else {
|
} else {
|
||||||
return storage.loadEncryptedWallet(password).getWallet();
|
WalletBackupAndKey walletBackupAndKey = storage.loadEncryptedWallet(password);
|
||||||
|
walletBackupAndKey.getWallet().decrypt(walletBackupAndKey.getKey());
|
||||||
|
return walletBackupAndKey.getWallet();
|
||||||
}
|
}
|
||||||
} catch(IOException | StorageException e) {
|
} catch(IOException | StorageException e) {
|
||||||
log.error("Error importing Sparrow wallet", e);
|
log.error("Error importing Sparrow wallet", e);
|
||||||
|
|
|
@ -555,7 +555,7 @@ public class DbPersistence implements Persistence {
|
||||||
log.error("Wallet file may already be in use. Make sure the application is not running elsewhere.", e);
|
log.error("Wallet file may already be in use. Make sure the application is not running elsewhere.", e);
|
||||||
throw new StorageException("Wallet file may already be in use. Make sure the application is not running elsewhere.", e);
|
throw new StorageException("Wallet file may already be in use. Make sure the application is not running elsewhere.", e);
|
||||||
} else if(e.getMessage() != null && (e.getMessage().contains("Wrong user name or password") || e.getMessage().contains("Encryption error in file"))) {
|
} else if(e.getMessage() != null && (e.getMessage().contains("Wrong user name or password") || e.getMessage().contains("Encryption error in file"))) {
|
||||||
throw new InvalidPasswordException("Incorrect password for wallet file.", e);
|
throw new InvalidPasswordException("Incorrect password for wallet file " + walletFile.getAbsolutePath(), e);
|
||||||
} else {
|
} else {
|
||||||
log.error("Failed to open database file", e);
|
log.error("Failed to open database file", e);
|
||||||
throw new StorageException("Failed to open database file.\n" + e.getMessage(), e);
|
throw new StorageException("Failed to open database file.\n" + e.getMessage(), e);
|
||||||
|
|
|
@ -2,11 +2,13 @@ package com.sparrowwallet.sparrow.keystoreimport;
|
||||||
|
|
||||||
import com.sparrowwallet.drongo.policy.PolicyType;
|
import com.sparrowwallet.drongo.policy.PolicyType;
|
||||||
import com.sparrowwallet.sparrow.control.FileKeystoreImportPane;
|
import com.sparrowwallet.sparrow.control.FileKeystoreImportPane;
|
||||||
|
import com.sparrowwallet.sparrow.control.TitledDescriptionPane;
|
||||||
import com.sparrowwallet.sparrow.io.*;
|
import com.sparrowwallet.sparrow.io.*;
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
import javafx.scene.control.Accordion;
|
import javafx.scene.control.Accordion;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class HwAirgappedController extends KeystoreImportDetailController {
|
public class HwAirgappedController extends KeystoreImportDetailController {
|
||||||
|
@ -25,5 +27,7 @@ public class HwAirgappedController extends KeystoreImportDetailController {
|
||||||
FileKeystoreImportPane importPane = new FileKeystoreImportPane(getMasterController().getWallet(), (KeystoreFileImport)importer);;
|
FileKeystoreImportPane importPane = new FileKeystoreImportPane(getMasterController().getWallet(), (KeystoreFileImport)importer);;
|
||||||
importAccordion.getPanes().add(importPane);
|
importAccordion.getPanes().add(importPane);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
importAccordion.getPanes().sort(Comparator.comparing(o -> ((TitledDescriptionPane) o).getTitle()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue