Merge pull request #8906 from accumulator/old_2fa_passphrase
wizard: skip/hide passphrase option for 'old' and '2fa' seeds (see #4326)
This commit is contained in:
@@ -20,20 +20,23 @@ WizardComponent {
|
|||||||
|
|
||||||
property string _seedType
|
property string _seedType
|
||||||
property string _validationMessage
|
property string _validationMessage
|
||||||
|
property bool _canPassphrase
|
||||||
|
property bool _seedValid
|
||||||
|
|
||||||
function apply() {
|
function apply() {
|
||||||
|
var seed_extend = extendcb.checked && _canPassphrase
|
||||||
if (cosigner) {
|
if (cosigner) {
|
||||||
wizard_data['multisig_cosigner_data'][cosigner.toString()]['seed'] = seedtext.text
|
wizard_data['multisig_cosigner_data'][cosigner.toString()]['seed'] = seedtext.text
|
||||||
wizard_data['multisig_cosigner_data'][cosigner.toString()]['seed_variant'] = seed_variant_cb.currentValue
|
wizard_data['multisig_cosigner_data'][cosigner.toString()]['seed_variant'] = seed_variant_cb.currentValue
|
||||||
wizard_data['multisig_cosigner_data'][cosigner.toString()]['seed_type'] = _seedType
|
wizard_data['multisig_cosigner_data'][cosigner.toString()]['seed_type'] = _seedType
|
||||||
wizard_data['multisig_cosigner_data'][cosigner.toString()]['seed_extend'] = extendcb.checked
|
wizard_data['multisig_cosigner_data'][cosigner.toString()]['seed_extend'] = seed_extend
|
||||||
wizard_data['multisig_cosigner_data'][cosigner.toString()]['seed_extra_words'] = extendcb.checked ? customwordstext.text : ''
|
wizard_data['multisig_cosigner_data'][cosigner.toString()]['seed_extra_words'] = seed_extend ? customwordstext.text : ''
|
||||||
} else {
|
} else {
|
||||||
wizard_data['seed'] = seedtext.text
|
wizard_data['seed'] = seedtext.text
|
||||||
wizard_data['seed_variant'] = seed_variant_cb.currentValue
|
wizard_data['seed_variant'] = seed_variant_cb.currentValue
|
||||||
wizard_data['seed_type'] = _seedType
|
wizard_data['seed_type'] = _seedType
|
||||||
wizard_data['seed_extend'] = extendcb.checked
|
wizard_data['seed_extend'] = seed_extend
|
||||||
wizard_data['seed_extra_words'] = extendcb.checked ? customwordstext.text : ''
|
wizard_data['seed_extra_words'] = seed_extend ? customwordstext.text : ''
|
||||||
|
|
||||||
// determine script type from electrum seed type
|
// determine script type from electrum seed type
|
||||||
// (used to limit script type options for bip39 cosigners)
|
// (used to limit script type options for bip39 cosigners)
|
||||||
@@ -69,19 +72,16 @@ WizardComponent {
|
|||||||
|
|
||||||
function checkValid() {
|
function checkValid() {
|
||||||
valid = false
|
valid = false
|
||||||
_validationMessage = ''
|
_seedValid = false
|
||||||
|
|
||||||
if (extendcb.checked && customwordstext.text == '')
|
|
||||||
return
|
|
||||||
|
|
||||||
var verifyResult = wiz.verifySeed(seedtext.text, seed_variant_cb.currentValue, wizard_data['wallet_type'])
|
var verifyResult = wiz.verifySeed(seedtext.text, seed_variant_cb.currentValue, wizard_data['wallet_type'])
|
||||||
|
|
||||||
_validationMessage = verifyResult.message
|
_validationMessage = verifyResult.message
|
||||||
_seedType = verifyResult.type
|
_seedType = verifyResult.type
|
||||||
|
_canPassphrase = verifyResult.can_passphrase
|
||||||
|
|
||||||
if (!cosigner || !verifyResult.valid) {
|
if (!cosigner || !verifyResult.valid) {
|
||||||
valid = verifyResult.valid
|
_seedValid = verifyResult.valid
|
||||||
return
|
|
||||||
} else {
|
} else {
|
||||||
// bip39 validate after derivation path is known
|
// bip39 validate after derivation path is known
|
||||||
if (seed_variant_cb.currentValue == 'electrum') {
|
if (seed_variant_cb.currentValue == 'electrum') {
|
||||||
@@ -93,12 +93,19 @@ WizardComponent {
|
|||||||
validationtext.text = qsTr('Error: master public key types do not match')
|
validationtext.text = qsTr('Error: master public key types do not match')
|
||||||
return
|
return
|
||||||
} else {
|
} else {
|
||||||
valid = true
|
_seedValid = true
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
valid = true
|
_seedValid = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_canPassphrase && extendcb.checked && customwordstext.text == '') {
|
||||||
|
valid = false
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
valid = _seedValid
|
||||||
}
|
}
|
||||||
|
|
||||||
Flickable {
|
Flickable {
|
||||||
@@ -202,16 +209,14 @@ WizardComponent {
|
|||||||
|
|
||||||
placeholderText: cosigner ? qsTr('Enter cosigner seed') : qsTr('Enter your seed')
|
placeholderText: cosigner ? qsTr('Enter cosigner seed') : qsTr('Enter your seed')
|
||||||
|
|
||||||
indicatorValid: root.valid
|
indicatorValid: root._seedValid
|
||||||
? root._seedType == 'bip39' && root._validationMessage
|
? root._seedType == 'bip39' && root._validationMessage
|
||||||
? false
|
? false
|
||||||
: root.valid
|
: root._seedValid
|
||||||
: root.valid
|
: root._seedValid
|
||||||
indicatorText: root.valid
|
indicatorText: root._validationMessage
|
||||||
? root._validationMessage
|
|
||||||
? root._validationMessage
|
? root._validationMessage
|
||||||
: root._seedType
|
: root._seedType
|
||||||
: ''
|
|
||||||
onTextChanged: {
|
onTextChanged: {
|
||||||
startValidationTimer()
|
startValidationTimer()
|
||||||
}
|
}
|
||||||
@@ -221,13 +226,14 @@ WizardComponent {
|
|||||||
id: extendcb
|
id: extendcb
|
||||||
Layout.columnSpan: 2
|
Layout.columnSpan: 2
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
|
visible: _canPassphrase
|
||||||
text: qsTr('Extend seed with custom words')
|
text: qsTr('Extend seed with custom words')
|
||||||
onCheckedChanged: startValidationTimer()
|
onCheckedChanged: startValidationTimer()
|
||||||
}
|
}
|
||||||
|
|
||||||
TextField {
|
TextField {
|
||||||
id: customwordstext
|
id: customwordstext
|
||||||
visible: extendcb.checked
|
visible: extendcb.checked && extendcb.visible
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.columnSpan: 2
|
Layout.columnSpan: 2
|
||||||
placeholderText: qsTr('Enter your custom word(s)')
|
placeholderText: qsTr('Enter your custom word(s)')
|
||||||
|
|||||||
@@ -111,11 +111,12 @@ class QENewWalletWizard(NewWalletWizard, QEAbstractWizard):
|
|||||||
|
|
||||||
@pyqtSlot(str, str, str, result='QVariantMap')
|
@pyqtSlot(str, str, str, result='QVariantMap')
|
||||||
def verifySeed(self, seed, seed_variant, wallet_type='standard'):
|
def verifySeed(self, seed, seed_variant, wallet_type='standard'):
|
||||||
seed_valid, seed_type, validation_message = self.validate_seed(seed, seed_variant, wallet_type)
|
seed_valid, seed_type, validation_message, can_passphrase = self.validate_seed(seed, seed_variant, wallet_type)
|
||||||
return {
|
return {
|
||||||
'valid': seed_valid,
|
'valid': seed_valid,
|
||||||
'type': seed_type,
|
'type': seed_type,
|
||||||
'message': validation_message
|
'message': validation_message,
|
||||||
|
'can_passphrase': can_passphrase
|
||||||
}
|
}
|
||||||
|
|
||||||
def _wallet_path_from_wallet_name(self, wallet_name: str) -> str:
|
def _wallet_path_from_wallet_name(self, wallet_name: str) -> str:
|
||||||
|
|||||||
@@ -612,6 +612,8 @@ class WCHaveSeed(WalletWizardComponent, Logger):
|
|||||||
|
|
||||||
self.next_button = Hack()
|
self.next_button = Hack()
|
||||||
|
|
||||||
|
self.can_passphrase = True
|
||||||
|
|
||||||
def on_ready(self):
|
def on_ready(self):
|
||||||
options = ['ext'] if self.wizard_data['wallet_type'] == '2fa' else ['ext', 'bip39', 'slip39']
|
options = ['ext'] if self.wizard_data['wallet_type'] == '2fa' else ['ext', 'bip39', 'slip39']
|
||||||
self.slayout = SeedLayout(
|
self.slayout = SeedLayout(
|
||||||
@@ -640,7 +642,7 @@ class WCHaveSeed(WalletWizardComponent, Logger):
|
|||||||
seed = self.slayout.get_seed()
|
seed = self.slayout.get_seed()
|
||||||
seed_variant = self.slayout.seed_type
|
seed_variant = self.slayout.seed_type
|
||||||
wallet_type = self.wizard_data['wallet_type']
|
wallet_type = self.wizard_data['wallet_type']
|
||||||
seed_valid, seed_type, validation_message = self.wizard.validate_seed(seed, seed_variant, wallet_type) #
|
seed_valid, seed_type, validation_message, self.can_passphrase = self.wizard.validate_seed(seed, seed_variant, wallet_type)
|
||||||
|
|
||||||
is_cosigner = self.wizard_data['wallet_type'] == 'multisig' and 'multisig_current_cosigner' in self.wizard_data
|
is_cosigner = self.wizard_data['wallet_type'] == 'multisig' and 'multisig_current_cosigner' in self.wizard_data
|
||||||
|
|
||||||
@@ -664,7 +666,7 @@ class WCHaveSeed(WalletWizardComponent, Logger):
|
|||||||
cosigner_data['seed_type'] = mnemonic.seed_type(self.slayout.get_seed())
|
cosigner_data['seed_type'] = mnemonic.seed_type(self.slayout.get_seed())
|
||||||
else:
|
else:
|
||||||
cosigner_data['seed_type'] = self.slayout.seed_type
|
cosigner_data['seed_type'] = self.slayout.seed_type
|
||||||
cosigner_data['seed_extend'] = self.slayout.is_ext
|
cosigner_data['seed_extend'] = self.slayout.is_ext if self.can_passphrase else False
|
||||||
cosigner_data['seed_extra_words'] = '' # empty default
|
cosigner_data['seed_extra_words'] = '' # empty default
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -486,11 +486,14 @@ class NewWalletWizard(AbstractWizard):
|
|||||||
seed_type = ''
|
seed_type = ''
|
||||||
seed_valid = False
|
seed_valid = False
|
||||||
validation_message = ''
|
validation_message = ''
|
||||||
|
can_passphrase = True
|
||||||
|
|
||||||
if seed_variant == 'electrum':
|
if seed_variant == 'electrum':
|
||||||
seed_type = mnemonic.seed_type(seed)
|
seed_type = mnemonic.seed_type(seed)
|
||||||
if seed_type != '':
|
if seed_type != '':
|
||||||
seed_valid = True
|
seed_valid = True
|
||||||
|
if seed_type in ['old', '2fa']:
|
||||||
|
can_passphrase = False
|
||||||
elif seed_variant == 'bip39':
|
elif seed_variant == 'bip39':
|
||||||
is_checksum, is_wordlist = keystore.bip39_is_checksum_valid(seed)
|
is_checksum, is_wordlist = keystore.bip39_is_checksum_valid(seed)
|
||||||
validation_message = ('' if is_checksum else _('BIP39 checksum failed')) if is_wordlist else _('Unknown BIP39 wordlist')
|
validation_message = ('' if is_checksum else _('BIP39 checksum failed')) if is_wordlist else _('Unknown BIP39 wordlist')
|
||||||
@@ -520,7 +523,7 @@ class NewWalletWizard(AbstractWizard):
|
|||||||
|
|
||||||
self._logger.debug(f'seed verified: {seed_valid}, type={seed_type}, validation_message={validation_message}')
|
self._logger.debug(f'seed verified: {seed_valid}, type={seed_type}, validation_message={validation_message}')
|
||||||
|
|
||||||
return seed_valid, seed_type, validation_message
|
return seed_valid, seed_type, validation_message, can_passphrase
|
||||||
|
|
||||||
def create_storage(self, path: str, data: dict):
|
def create_storage(self, path: str, data: dict):
|
||||||
assert data['wallet_type'] in ['standard', '2fa', 'imported', 'multisig']
|
assert data['wallet_type'] in ['standard', '2fa', 'imported', 'multisig']
|
||||||
|
|||||||
Reference in New Issue
Block a user