From e82f6ebf53831796bfb7c26f3f0934160d925642 Mon Sep 17 00:00:00 2001 From: Igor Sirotin Date: Thu, 1 Jun 2023 11:15:51 +0300 Subject: [PATCH] fix: Manual login after local pairing (#10858) --- .../core/signals/remote_signals/pairing.nim | 4 ++-- src/app/modules/startup/controller.nim | 9 +++++++-- .../startup/internal/sync_device_result.nim | 2 +- src/app/modules/startup/io_interface.nim | 2 +- .../devices/dto/local_pairing_event.nim | 18 +++++++++++++++++- .../devices/dto/local_pairing_status.nim | 4 +++- src/app_service/service/devices/service.nim | 4 ++-- .../Onboarding/views/SyncDeviceResult.qml | 12 +++++------- vendor/status-go | 2 +- 9 files changed, 39 insertions(+), 18 deletions(-) diff --git a/src/app/core/signals/remote_signals/pairing.nim b/src/app/core/signals/remote_signals/pairing.nim index 86744eded3..b7604cdeac 100644 --- a/src/app/core/signals/remote_signals/pairing.nim +++ b/src/app/core/signals/remote_signals/pairing.nim @@ -9,7 +9,7 @@ type LocalPairingSignal* = ref object of Signal eventType*: EventType action*: Action error*: string - account*: AccountDto + accountData*: LocalPairingAccountData installation*: InstallationDto proc fromEvent*(T: type LocalPairingSignal, event: JsonNode): LocalPairingSignal = @@ -26,7 +26,7 @@ proc fromEvent*(T: type LocalPairingSignal, event: JsonNode): LocalPairingSignal return case result.eventType: of EventReceivedAccount: - result.account = e["data"].toAccountDto() + result.accountData = e["data"].toLocalPairingAccountData() of EventReceivedInstallation: result.installation = e["data"].toInstallationDto() else: diff --git a/src/app/modules/startup/controller.nim b/src/app/modules/startup/controller.nim index f68645ba97..23fcc81d8a 100644 --- a/src/app/modules/startup/controller.nim +++ b/src/app/modules/startup/controller.nim @@ -56,6 +56,7 @@ type tmpKeychainErrorOccurred: bool tmpRecoverUsingSeedPhraseWhileLogin: bool tmpConnectionString: string + localPairingStatus: LocalPairingStatus proc newController*(delegate: io_interface.AccessInterface, events: EventEmitter, @@ -167,8 +168,8 @@ proc init*(self: Controller) = self.connectionIds.add(handlerId) handlerId = self.events.onWithUUID(SIGNAL_LOCAL_PAIRING_STATUS_UPDATE) do(e: Args): - let args = LocalPairingStatus(e) - self.delegate.onLocalPairingStatusUpdate(args) + self.localPairingStatus = LocalPairingStatus(e) + self.delegate.onLocalPairingStatusUpdate(self.localPairingStatus) self.connectionIds.add(handlerId) handlerId = self.events.onWithUUID(SIGNAL_REENCRYPTION_PROCESS_STARTED) do(e: Args): @@ -447,6 +448,10 @@ proc login*(self: Controller) = let selectedAccount = self.getSelectedLoginAccount() self.accountsService.login(selectedAccount, hashPassword(self.tmpPassword)) +proc loginLocalPairingAccount*(self: Controller) = + self.delegate.moveToLoadingAppState() + self.accountsService.login(self.localPairingStatus.account, self.localPairingStatus.password) + proc loginAccountKeycard*(self: Controller, storeToKeychainValue: string, syncWalletAfterLogin = false) = if syncWalletAfterLogin: self.syncKeycardBasedOnAppWalletStateAfterLogin() diff --git a/src/app/modules/startup/internal/sync_device_result.nim b/src/app/modules/startup/internal/sync_device_result.nim index 4d578c24d8..a181de1c0d 100644 --- a/src/app/modules/startup/internal/sync_device_result.nim +++ b/src/app/modules/startup/internal/sync_device_result.nim @@ -9,4 +9,4 @@ proc delete*(self: SyncDeviceResultState) = self.State.delete method executePrimaryCommand*(self: SyncDeviceResultState, controller: Controller) = - controller.login() \ No newline at end of file + controller.loginLocalPairingAccount() diff --git a/src/app/modules/startup/io_interface.nim b/src/app/modules/startup/io_interface.nim index 34f190193b..e331867b6f 100644 --- a/src/app/modules/startup/io_interface.nim +++ b/src/app/modules/startup/io_interface.nim @@ -195,4 +195,4 @@ type c.storeDefaultKeyPairForNewKeycardUser() c.syncKeycardBasedOnAppWalletStateAfterLogin() c.addToKeycardUidPairsToCheckForAChangeAfterLogin(string, string) - c.removeAllKeycardUidPairsForCheckingForAChangeAfterLogin() \ No newline at end of file + c.removeAllKeycardUidPairsForCheckingForAChangeAfterLogin() diff --git a/src/app_service/service/devices/dto/local_pairing_event.nim b/src/app_service/service/devices/dto/local_pairing_event.nim index ef3e1f1edf..81c9cc1c47 100644 --- a/src/app_service/service/devices/dto/local_pairing_event.nim +++ b/src/app_service/service/devices/dto/local_pairing_event.nim @@ -1,3 +1,5 @@ +import json +include ../../../common/[json_utils] import ../../../../app/core/eventemitter import ../../accounts/dto/accounts import installation @@ -22,12 +24,17 @@ type ActionSyncDevice = 3, ActionPairingInstallation = 4, +type + LocalPairingAccountData* = ref object + account*: AccountDTO + password*: string + type LocalPairingEventArgs* = ref object of Args eventType*: EventType action*: Action error*: string - account*: AccountDTO + accountData*: LocalPairingAccountData installation*: InstallationDto proc parse*(self: string): EventType = @@ -63,3 +70,12 @@ proc parse*(self: int): Action = return ActionPairingInstallation else: return ActionUnknown + + +proc toLocalPairingAccountData*(jsonObj: JsonNode): LocalPairingAccountData = + result = LocalPairingAccountData() + discard jsonObj.getProp("password", result.password) + + var accountObj: JsonNode + if(jsonObj.getProp("account", accountObj)): + result.account = toAccountDto(accountObj) diff --git a/src/app_service/service/devices/dto/local_pairing_status.nim b/src/app_service/service/devices/dto/local_pairing_status.nim index a572cfe499..a203a2d60b 100644 --- a/src/app_service/service/devices/dto/local_pairing_status.nim +++ b/src/app_service/service/devices/dto/local_pairing_status.nim @@ -21,6 +21,7 @@ type mode*: LocalPairingMode state*: LocalPairingState account*: AccountDTO + password*: string installation*: InstallationDto error*: string @@ -47,7 +48,8 @@ proc update*(self: LocalPairingStatus, data: LocalPairingEventArgs) = # process any incoming data case data.eventType: of EventReceivedAccount: - self.account = data.account + self.account = data.accountData.account + self.password = data.accountData.password of EventReceivedInstallation: self.installation = data.installation of EventConnectionError: diff --git a/src/app_service/service/devices/service.nim b/src/app_service/service/devices/service.nim index 2ceac7b545..c17cb53905 100644 --- a/src/app_service/service/devices/service.nim +++ b/src/app_service/service/devices/service.nim @@ -92,7 +92,7 @@ QtObject: let data = LocalPairingEventArgs( eventType: signalData.eventType, action: signalData.action, - account: signalData.account, + accountData: signalData.accountData, installation: signalData.installation, error: signalData.error) self.updateLocalPairingStatus(data) @@ -169,7 +169,7 @@ QtObject: let data = LocalPairingEventArgs( eventType: EventConnectionError, action: ActionUnknown, - account: AccountDto(), + accountData: LocalPairingAccountData(), error: errorDescription) self.updateLocalPairingStatus(data) diff --git a/ui/app/AppLayouts/Onboarding/views/SyncDeviceResult.qml b/ui/app/AppLayouts/Onboarding/views/SyncDeviceResult.qml index 0df853a96a..ac44f3ff7c 100644 --- a/ui/app/AppLayouts/Onboarding/views/SyncDeviceResult.qml +++ b/ui/app/AppLayouts/Onboarding/views/SyncDeviceResult.qml @@ -60,16 +60,14 @@ Item { text: qsTr("Sign in") opacity: d.finished ? 1 : 0 enabled: d.finished - onClicked: { - // NOTE: Current status-go implementation automatically signs in - // So we don't actually ever use this button. - // I leave this code here for further implementaion by design. - //const keyUid = "TODO: Get keyUid somehow" - //root.startupStore.setSelectedLoginAccountByKeyUid(keyUid) - } + Behavior on opacity { NumberAnimation { duration: 250 } } + + onClicked: { + root.startupStore.doPrimaryAction() + } } } diff --git a/vendor/status-go b/vendor/status-go index 790efc16aa..a7df4ed388 160000 --- a/vendor/status-go +++ b/vendor/status-go @@ -1 +1 @@ -Subproject commit 790efc16aa2787b7afc9be2b09116055eb75fc1f +Subproject commit a7df4ed388e4d78653326ed7a35e72221e23a5d9