fix(@desktop/onboarding): getting back to login screen doesn't check if inserted keycard match the selected user - fixed

This commit is contained in:
Sale Djenic 2023-09-22 12:35:01 +02:00 committed by saledjenic
parent f7db677c95
commit b97e1fc8da
3 changed files with 14 additions and 8 deletions

View File

@ -35,11 +35,11 @@ method resolveKeycardNextState*(self: LoginKeycardEnterPinState, keycardFlowType
if not state.isNil:
return state
if self.flowType == FlowType.AppLogin:
if not controller.keyUidMatchSelectedLoginAccount(keycardEvent.keyUid):
controller.setPin("")
return createState(StateType.LoginKeycardWrongKeycard, self.flowType, nil)
if keycardFlowType == ResponseTypeValueKeycardFlowResult and
keycardEvent.error.len == 0:
if not controller.keyUidMatchSelectedLoginAccount(keycardEvent.keyUid):
controller.setPin("")
return createState(StateType.LoginKeycardWrongKeycard, self.flowType, nil)
controller.setKeycardEvent(keycardEvent)
return createState(StateType.LoginKeycardPinVerified, self.flowType, nil)
if keycardFlowType == ResponseTypeValueEnterPIN and

View File

@ -25,31 +25,34 @@ method getNextQuaternaryState*(self: LoginKeycardWrongPinState, controller: Cont
if self.flowType == FlowType.AppLogin:
controller.cancelCurrentFlow()
return createState(StateType.WelcomeOldStatusUser, self.flowType, self)
method getNextQuinaryState*(self: LoginKeycardWrongPinState, controller: Controller): State =
if self.flowType == FlowType.AppLogin:
controller.cancelCurrentFlow()
return createState(StateType.LostKeycardOptions, self.flowType, self)
method resolveKeycardNextState*(self: LoginKeycardWrongPinState, keycardFlowType: string, keycardEvent: KeycardEvent,
method resolveKeycardNextState*(self: LoginKeycardWrongPinState, keycardFlowType: string, keycardEvent: KeycardEvent,
controller: Controller): State =
let state = ensureReaderAndCardPresenceLogin(self, keycardFlowType, keycardEvent, controller)
if not state.isNil:
return state
if self.flowType == FlowType.AppLogin:
if keycardFlowType == ResponseTypeValueEnterPIN and
if not controller.keyUidMatchSelectedLoginAccount(keycardEvent.keyUid):
controller.setPin("")
return createState(StateType.LoginKeycardWrongKeycard, self.flowType, nil)
if keycardFlowType == ResponseTypeValueEnterPIN and
keycardEvent.error.len > 0 and
keycardEvent.error == RequestParamPIN:
controller.setRemainingAttempts(keycardEvent.pinRetries)
if keycardEvent.pinRetries > 0:
return nil
return createState(StateType.LoginKeycardMaxPinRetriesReached, self.flowType, nil)
if keycardFlowType == ResponseTypeValueEnterPUK and
if keycardFlowType == ResponseTypeValueEnterPUK and
keycardEvent.error.len == 0:
if keycardEvent.pinRetries == 0 and keycardEvent.pukRetries > 0:
return createState(StateType.LoginKeycardMaxPinRetriesReached, self.flowType, nil)
return nil
if keycardFlowType == ResponseTypeValueKeycardFlowResult and
if keycardFlowType == ResponseTypeValueKeycardFlowResult and
keycardEvent.error.len == 0:
controller.setKeycardEvent(keycardEvent)
return createState(StateType.LoginKeycardPinVerified, self.flowType, nil)

View File

@ -27,6 +27,9 @@ proc ensureReaderAndCardPresenceAndResolveNextLoginState*(state: State, keycardF
if state.flowType == FlowType.AppLogin:
if keycardFlowType == ResponseTypeValueKeycardFlowResult and
keycardEvent.error.len == 0:
if not controller.keyUidMatchSelectedLoginAccount(keycardEvent.keyUid):
controller.setPin("")
return createState(StateType.LoginKeycardWrongKeycard, state.flowType, nil)
controller.setKeycardEvent(keycardEvent)
return createState(StateType.LoginKeycardPinVerified, state.flowType, nil)
if keycardFlowType == ResponseTypeValueEnterPIN: