From 10c3b66336f434357aa7a4e8f0cc572fce7fb3f4 Mon Sep 17 00:00:00 2001 From: Sale Djenic Date: Tue, 20 Sep 2022 16:05:02 +0200 Subject: [PATCH] feat(@desktop/keycard): unlock keycard flow added to the flows which are using it - factory reset flow updated with unlock keycard flow - setup new keycard (keycard migrate) flow updated with unlock keycard flow - authenticate flow updated with unlock keycard flow --- .../profile_section/keycard/io_interface.nim | 9 +++++++++ .../main/profile_section/keycard/module.nim | 19 +++++++++++++++++-- .../main/profile_section/keycard/view.nim | 11 ++++++++++- .../max_pairing_slots_reached_state.nim | 2 +- .../max_pin_retries_reached_state.nim | 14 +++++++++----- .../max_puk_retries_reached_state.nim | 2 +- .../Profile/stores/KeycardStore.qml | 12 ++++++++++++ .../AppLayouts/Profile/views/KeycardView.qml | 4 ++-- 8 files changed, 61 insertions(+), 12 deletions(-) diff --git a/src/app/modules/main/profile_section/keycard/io_interface.nim b/src/app/modules/main/profile_section/keycard/io_interface.nim index 7737b50167..4ef39871b3 100644 --- a/src/app/modules/main/profile_section/keycard/io_interface.nim +++ b/src/app/modules/main/profile_section/keycard/io_interface.nim @@ -28,6 +28,15 @@ method onSharedKeycarModuleFlowTerminated*(self: AccessInterface, lastStepInTheC method runSetupKeycardPopup*(self: AccessInterface) {.base.} = raise newException(ValueError, "No implementation available") +method runUnlockKeycardPopup*(self: AccessInterface) {.base.} = + raise newException(ValueError, "No implementation available") + +method runDisplayKeycardContentPopup*(self: AccessInterface) {.base.} = + raise newException(ValueError, "No implementation available") + +method runFactoryResetPopup*(self: AccessInterface) {.base.} = + raise newException(ValueError, "No implementation available") + # View Delegate Interface # Delegate for the view must be declared here due to use of QtObject and multi diff --git a/src/app/modules/main/profile_section/keycard/module.nim b/src/app/modules/main/profile_section/keycard/module.nim index 684ce4e070..ce2e039120 100644 --- a/src/app/modules/main/profile_section/keycard/module.nim +++ b/src/app/modules/main/profile_section/keycard/module.nim @@ -95,11 +95,26 @@ method onSharedKeycarModuleFlowTerminated*(self: Module, lastStepInTheCurrentFlo self.keycardSharedModule.delete self.keycardSharedModule = nil +method onDisplayKeycardSharedModuleFlow*(self: Module) = + self.view.emitDisplayKeycardSharedModuleFlow() + method runSetupKeycardPopup*(self: Module) = self.createSharedKeycardModule() if self.keycardSharedModule.isNil: return self.keycardSharedModule.runFlow(keycard_shared_module.FlowType.SetupNewKeycard) -method onDisplayKeycardSharedModuleFlow*(self: Module) = - self.view.emitDisplayKeycardSharedModuleFlow() \ No newline at end of file +method runUnlockKeycardPopup*(self: Module) = + self.createSharedKeycardModule() + if self.keycardSharedModule.isNil: + return + self.keycardSharedModule.runFlow(keycard_shared_module.FlowType.UnlockKeycard) + +method runDisplayKeycardContentPopup*(self: Module) = + info "TODO: Run display keycard content..." + +method runFactoryResetPopup*(self: Module) = + self.createSharedKeycardModule() + if self.keycardSharedModule.isNil: + return + self.keycardSharedModule.runFlow(keycard_shared_module.FlowType.FactoryReset) \ No newline at end of file diff --git a/src/app/modules/main/profile_section/keycard/view.nim b/src/app/modules/main/profile_section/keycard/view.nim index a7c43ee3b2..1837dfa271 100644 --- a/src/app/modules/main/profile_section/keycard/view.nim +++ b/src/app/modules/main/profile_section/keycard/view.nim @@ -32,4 +32,13 @@ QtObject: self.destroyKeycardSharedModuleFlow() proc runSetupKeycardPopup*(self: View) {.slot.} = - self.delegate.runSetupKeycardPopup() \ No newline at end of file + self.delegate.runSetupKeycardPopup() + + proc runUnlockKeycardPopup*(self: View) {.slot.} = + self.delegate.runUnlockKeycardPopup() + + proc runDisplayKeycardContentPopup*(self: View) {.slot.} = + self.delegate.runDisplayKeycardContentPopup() + + proc runFactoryResetPopup*(self: View) {.slot.} = + self.delegate.runFactoryResetPopup() \ No newline at end of file diff --git a/src/app/modules/shared_modules/keycard_popup/internal/max_pairing_slots_reached_state.nim b/src/app/modules/shared_modules/keycard_popup/internal/max_pairing_slots_reached_state.nim index 281e0fdaf7..d292508999 100644 --- a/src/app/modules/shared_modules/keycard_popup/internal/max_pairing_slots_reached_state.nim +++ b/src/app/modules/shared_modules/keycard_popup/internal/max_pairing_slots_reached_state.nim @@ -13,7 +13,7 @@ method getNextPrimaryState*(self: MaxPairingSlotsReachedState, controller: Contr self.flowType == FlowType.SetupNewKeycard: return createState(StateType.FactoryResetConfirmation, self.flowType, self) if self.flowType == FlowType.Authentication: - debug "Run Unlock Keycard flow... (not developed yet)" + controller.runSharedModuleFlow(FlowType.UnlockKeycard) return nil method executeTertiaryCommand*(self: MaxPairingSlotsReachedState, controller: Controller) = diff --git a/src/app/modules/shared_modules/keycard_popup/internal/max_pin_retries_reached_state.nim b/src/app/modules/shared_modules/keycard_popup/internal/max_pin_retries_reached_state.nim index 9763427c21..783a59beb6 100644 --- a/src/app/modules/shared_modules/keycard_popup/internal/max_pin_retries_reached_state.nim +++ b/src/app/modules/shared_modules/keycard_popup/internal/max_pin_retries_reached_state.nim @@ -9,12 +9,16 @@ proc delete*(self: MaxPinRetriesReachedState) = self.State.delete method getNextPrimaryState*(self: MaxPinRetriesReachedState, controller: Controller): State = - if self.flowType == FlowType.FactoryReset or - self.flowType == FlowType.SetupNewKeycard: - debug "Run Unlock Keycard flow... (not developed yet)" - return createState(StateType.FactoryResetConfirmation, self.flowType, self) + if self.flowType == FlowType.FactoryReset: + controller.runSharedModuleFlow(FlowType.UnlockKeycard) + if self.flowType == FlowType.SetupNewKeycard: + let currValue = extractPredefinedKeycardDataToNumber(controller.getKeycardData()) + if (currValue and PredefinedKeycardData.UseUnlockLabelForLockedState.int) > 0: + controller.runSharedModuleFlow(FlowType.UnlockKeycard) + return nil + return createState(StateType.FactoryResetConfirmation, self.flowType, self) if self.flowType == FlowType.Authentication: - debug "Run Unlock Keycard flow... (not developed yet)" + controller.runSharedModuleFlow(FlowType.UnlockKeycard) return nil method executeTertiaryCommand*(self: MaxPinRetriesReachedState, controller: Controller) = diff --git a/src/app/modules/shared_modules/keycard_popup/internal/max_puk_retries_reached_state.nim b/src/app/modules/shared_modules/keycard_popup/internal/max_puk_retries_reached_state.nim index d6ef03d9bb..714f0965cb 100644 --- a/src/app/modules/shared_modules/keycard_popup/internal/max_puk_retries_reached_state.nim +++ b/src/app/modules/shared_modules/keycard_popup/internal/max_puk_retries_reached_state.nim @@ -13,7 +13,7 @@ method getNextPrimaryState*(self: MaxPukRetriesReachedState, controller: Control self.flowType == FlowType.SetupNewKeycard: return createState(StateType.FactoryResetConfirmation, self.flowType, self) if self.flowType == FlowType.Authentication: - debug "Run Unlock Keycard flow... (not developed yet)" + controller.runSharedModuleFlow(FlowType.UnlockKeycard) if self.flowType == FlowType.UnlockKeycard: return createState(StateType.EnterSeedPhrase, self.flowType, self) diff --git a/ui/app/AppLayouts/Profile/stores/KeycardStore.qml b/ui/app/AppLayouts/Profile/stores/KeycardStore.qml index fcf07ae1bc..a9cf450b3a 100644 --- a/ui/app/AppLayouts/Profile/stores/KeycardStore.qml +++ b/ui/app/AppLayouts/Profile/stores/KeycardStore.qml @@ -9,4 +9,16 @@ QtObject { function runSetupKeycardPopup() { root.keycardModule.runSetupKeycardPopup() } + + function runUnlockKeycardPopup() { + root.keycardModule.runUnlockKeycardPopup() + } + + function runDisplayKeycardContentPopup() { + root.keycardModule.runDisplayKeycardContentPopup() + } + + function runFactoryResetPopup() { + root.keycardModule.runFactoryResetPopup() + } } diff --git a/ui/app/AppLayouts/Profile/views/KeycardView.qml b/ui/app/AppLayouts/Profile/views/KeycardView.qml index 10e7305bcd..eee04f3b65 100644 --- a/ui/app/AppLayouts/Profile/views/KeycardView.qml +++ b/ui/app/AppLayouts/Profile/views/KeycardView.qml @@ -167,7 +167,7 @@ SettingsContentBase { } ] onClicked: { - console.warn("TODO: Check what’s on a Keycard...") + root.keycardStore.runDisplayKeycardContentPopup() } } @@ -182,7 +182,7 @@ SettingsContentBase { } ] onClicked: { - console.warn("TODO: Factory reset a Keycard...") + root.keycardStore.runFactoryResetPopup() } } }