|
|
@ -67,6 +67,13 @@ class WizardStackItem(NamedTuple): |
|
|
|
storage_data: dict |
|
|
|
|
|
|
|
|
|
|
|
class WizardWalletPasswordSetting(NamedTuple): |
|
|
|
password: Optional[str] |
|
|
|
encrypt_storage: bool |
|
|
|
storage_enc_version: StorageEncryptionVersion |
|
|
|
encrypt_keystore: bool |
|
|
|
|
|
|
|
|
|
|
|
class BaseWizard(Logger): |
|
|
|
|
|
|
|
def __init__(self, config: SimpleConfig, plugins: Plugins): |
|
|
@ -75,7 +82,7 @@ class BaseWizard(Logger): |
|
|
|
self.config = config |
|
|
|
self.plugins = plugins |
|
|
|
self.data = {} |
|
|
|
self.pw_args = None |
|
|
|
self.pw_args = None # type: Optional[WizardWalletPasswordSetting] |
|
|
|
self._stack = [] # type: List[WizardStackItem] |
|
|
|
self.plugin = None |
|
|
|
self.keystores = [] |
|
|
@ -555,8 +562,9 @@ class BaseWizard(Logger): |
|
|
|
encrypt_keystore=encrypt_keystore), |
|
|
|
force_disable_encrypt_cb=not encrypt_keystore) |
|
|
|
|
|
|
|
def on_password(self, password, *, encrypt_storage, |
|
|
|
storage_enc_version=StorageEncryptionVersion.USER_PASSWORD, encrypt_keystore): |
|
|
|
def on_password(self, password, *, encrypt_storage: bool, |
|
|
|
storage_enc_version=StorageEncryptionVersion.USER_PASSWORD, |
|
|
|
encrypt_keystore: bool): |
|
|
|
for k in self.keystores: |
|
|
|
if k.may_have_password(): |
|
|
|
k.update_password(None, password) |
|
|
@ -573,7 +581,10 @@ class BaseWizard(Logger): |
|
|
|
self.data['keystore'] = keys |
|
|
|
else: |
|
|
|
raise Exception('Unknown wallet type') |
|
|
|
self.pw_args = password, encrypt_storage, storage_enc_version |
|
|
|
self.pw_args = WizardWalletPasswordSetting(password=password, |
|
|
|
encrypt_storage=encrypt_storage, |
|
|
|
storage_enc_version=storage_enc_version, |
|
|
|
encrypt_keystore=encrypt_keystore) |
|
|
|
self.terminate() |
|
|
|
|
|
|
|
def create_storage(self, path): |
|
|
@ -581,12 +592,12 @@ class BaseWizard(Logger): |
|
|
|
raise Exception('file already exists at path') |
|
|
|
if not self.pw_args: |
|
|
|
return |
|
|
|
password, encrypt_storage, storage_enc_version = self.pw_args |
|
|
|
pw_args = self.pw_args |
|
|
|
self.pw_args = None # clean-up so that it can get GC-ed |
|
|
|
storage = WalletStorage(path) |
|
|
|
storage.set_keystore_encryption(bool(password)) |
|
|
|
if encrypt_storage: |
|
|
|
storage.set_password(password, enc_version=storage_enc_version) |
|
|
|
storage.set_keystore_encryption(bool(pw_args.password) and pw_args.encrypt_keystore) |
|
|
|
if pw_args.encrypt_storage: |
|
|
|
storage.set_password(pw_args.password, enc_version=pw_args.storage_enc_version) |
|
|
|
for key, value in self.data.items(): |
|
|
|
storage.put(key, value) |
|
|
|
storage.write() |
|
|
|