fix(@desktop/settings): Store pass to keychain does not validate current password which results to inability to login
fixes #4358
This commit is contained in:
parent
343ce69e29
commit
dcac7977d9
|
@ -57,3 +57,6 @@ method getMessagesFromContactsOnly*(self: Controller): bool =
|
||||||
|
|
||||||
method setMessagesFromContactsOnly*(self: Controller, value: bool): bool =
|
method setMessagesFromContactsOnly*(self: Controller, value: bool): bool =
|
||||||
return self.settingsService.saveMessagesFromContactsOnly(value)
|
return self.settingsService.saveMessagesFromContactsOnly(value)
|
||||||
|
|
||||||
|
method validatePassword*(self: Controller, password: string): bool =
|
||||||
|
return self.privacyService.validatePassword(password)
|
||||||
|
|
|
@ -31,3 +31,6 @@ method getMessagesFromContactsOnly*(self: AccessInterface): bool {.base.} =
|
||||||
|
|
||||||
method setMessagesFromContactsOnly*(self: AccessInterface, value: bool): bool {.base.} =
|
method setMessagesFromContactsOnly*(self: AccessInterface, value: bool): bool {.base.} =
|
||||||
raise newException(ValueError, "No implementation available")
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
||||||
|
method validatePassword*(self: AccessInterface, password: string): bool {.base.} =
|
||||||
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
|
@ -52,3 +52,6 @@ method getMessagesFromContactsOnly*(self: AccessInterface): bool {.base.} =
|
||||||
|
|
||||||
method setMessagesFromContactsOnly*(self: AccessInterface, value: bool) {.base.} =
|
method setMessagesFromContactsOnly*(self: AccessInterface, value: bool) {.base.} =
|
||||||
raise newException(ValueError, "No implementation available")
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
||||||
|
method validatePassword*(self: AccessInterface, password: string): bool {.base.} =
|
||||||
|
raise newException(ValueError, "No implementation available")
|
||||||
|
|
|
@ -75,3 +75,6 @@ method getMessagesFromContactsOnly*(self: Module): bool =
|
||||||
method setMessagesFromContactsOnly*(self: Module, value: bool) =
|
method setMessagesFromContactsOnly*(self: Module, value: bool) =
|
||||||
if(not self.controller.setMessagesFromContactsOnly(value)):
|
if(not self.controller.setMessagesFromContactsOnly(value)):
|
||||||
error "an error occurred while saving messages from contacts only flag"
|
error "an error occurred while saving messages from contacts only flag"
|
||||||
|
|
||||||
|
method validatePassword*(self: Module, password: string): bool =
|
||||||
|
self.controller.validatePassword(password)
|
||||||
|
|
|
@ -57,3 +57,6 @@ QtObject:
|
||||||
read = getMessagesFromContactsOnly
|
read = getMessagesFromContactsOnly
|
||||||
write = setMessagesFromContactsOnly
|
write = setMessagesFromContactsOnly
|
||||||
notify = messagesFromContactsOnlyChanged
|
notify = messagesFromContactsOnlyChanged
|
||||||
|
|
||||||
|
proc validatePassword*(self: View, password: string): bool {.slot.} =
|
||||||
|
self.delegate.validatePassword(password)
|
||||||
|
|
|
@ -130,3 +130,21 @@ QtObject:
|
||||||
return
|
return
|
||||||
|
|
||||||
return mnemonics[index]
|
return mnemonics[index]
|
||||||
|
|
||||||
|
proc validatePassword*(self: Service, password: string): bool =
|
||||||
|
try:
|
||||||
|
let defaultAccount = self.getDefaultAccount()
|
||||||
|
|
||||||
|
if(defaultAccount.len == 0):
|
||||||
|
error "error: ", methodName="validatePassword", errDesription = "default eth account is empty"
|
||||||
|
return false
|
||||||
|
|
||||||
|
let isPasswordOk = self.accountsService.verifyAccountPassword(defaultAccount, password)
|
||||||
|
if not isPasswordOk:
|
||||||
|
error "error: ", methodName="validatePassword", errDesription = "password cannnot be verified"
|
||||||
|
return false
|
||||||
|
|
||||||
|
return true
|
||||||
|
except Exception as e:
|
||||||
|
error "error: ", methodName="validatePassword", errName = e.name, errDesription = e.msg
|
||||||
|
return false
|
||||||
|
|
|
@ -12,6 +12,7 @@ import shared.controls 1.0
|
||||||
|
|
||||||
// TODO: replace with StatusModal
|
// TODO: replace with StatusModal
|
||||||
ModalPopup {
|
ModalPopup {
|
||||||
|
property var privacyStore
|
||||||
property bool loading: false
|
property bool loading: false
|
||||||
property bool firstPasswordFieldValid: false
|
property bool firstPasswordFieldValid: false
|
||||||
property bool repeatPasswordFieldValid: false
|
property bool repeatPasswordFieldValid: false
|
||||||
|
@ -45,6 +46,8 @@ ModalPopup {
|
||||||
onTextChanged: {
|
onTextChanged: {
|
||||||
[firstPasswordFieldValid, passwordValidationError] =
|
[firstPasswordFieldValid, passwordValidationError] =
|
||||||
Utils.validatePasswords("first", firstPasswordField, repeatPasswordField);
|
Utils.validatePasswords("first", firstPasswordField, repeatPasswordField);
|
||||||
|
[repeatPasswordFieldValid, repeatPasswordValidationError] =
|
||||||
|
Utils.validatePasswords("repeat", firstPasswordField, repeatPasswordField);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -159,9 +162,17 @@ ModalPopup {
|
||||||
onClicked: {
|
onClicked: {
|
||||||
if (storingPasswordModal)
|
if (storingPasswordModal)
|
||||||
{
|
{
|
||||||
|
// validate the entered password
|
||||||
|
var validatePassword = privacyStore.validatePassword(repeatPasswordField.text)
|
||||||
|
if(!validatePassword) {
|
||||||
|
firstPasswordFieldValid = false
|
||||||
|
passwordValidationError = qsTr("Incorrect password")
|
||||||
|
}
|
||||||
|
else {
|
||||||
Global.applicationWindow.prepareForStoring(repeatPasswordField.text, true)
|
Global.applicationWindow.prepareForStoring(repeatPasswordField.text, true)
|
||||||
popup.close()
|
popup.close()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
loading = true
|
loading = true
|
||||||
|
|
|
@ -39,7 +39,6 @@ Item {
|
||||||
if(localAccountSettings.storeToKeychainValue === Constants.storeToKeychainValueStore)
|
if(localAccountSettings.storeToKeychainValue === Constants.storeToKeychainValueStore)
|
||||||
{
|
{
|
||||||
connection.enabled = true
|
connection.enabled = true
|
||||||
txtPassword.visible = false
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -12,6 +12,8 @@ import "../../Onboarding/shared" as OnboardingComponents
|
||||||
ModalPopup {
|
ModalPopup {
|
||||||
id: popup
|
id: popup
|
||||||
|
|
||||||
|
property var privacyStore
|
||||||
|
|
||||||
title: qsTr("Store pass to Keychain")
|
title: qsTr("Store pass to Keychain")
|
||||||
|
|
||||||
onClosed: {
|
onClosed: {
|
||||||
|
@ -95,6 +97,7 @@ ModalPopup {
|
||||||
Component {
|
Component {
|
||||||
id: storePasswordModal
|
id: storePasswordModal
|
||||||
OnboardingComponents.CreatePasswordModal {
|
OnboardingComponents.CreatePasswordModal {
|
||||||
|
privacyStore: popup.privacyStore
|
||||||
storingPasswordModal: true
|
storingPasswordModal: true
|
||||||
height: 350
|
height: 350
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,4 +28,8 @@ QtObject {
|
||||||
function getMnemonicWordAtIndex(index) {
|
function getMnemonicWordAtIndex(index) {
|
||||||
return root.privacyModule.getMnemonicWordAtIndex(index)
|
return root.privacyModule.getMnemonicWordAtIndex(index)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function validatePassword(password) {
|
||||||
|
return root.privacyModule.validatePassword(password)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -111,7 +111,9 @@ Item {
|
||||||
|
|
||||||
Component {
|
Component {
|
||||||
id: storeToKeychainSelectionModal
|
id: storeToKeychainSelectionModal
|
||||||
StoreToKeychainSelectionModal {}
|
StoreToKeychainSelectionModal {
|
||||||
|
privacyStore: root.privacyStore
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue