fix(@desktop/onboarding): reading keycards regardless of the way of providing keycards
This commit is contained in:
parent
d107a9f90b
commit
2af8e49ee3
|
@ -32,7 +32,7 @@ method executeCancelCommand*(self: InsertKeycardState, controller: Controller) =
|
||||||
|
|
||||||
method resolveKeycardNextState*(self: InsertKeycardState, keycardFlowType: string, keycardEvent: KeycardEvent,
|
method resolveKeycardNextState*(self: InsertKeycardState, keycardFlowType: string, keycardEvent: KeycardEvent,
|
||||||
controller: Controller): State =
|
controller: Controller): State =
|
||||||
let state = ensureReaderAndCardPresenceAndResolveNextState(self, keycardFlowType, keycardEvent, controller)
|
let state = readingKeycard(self, keycardFlowType, keycardEvent, controller)
|
||||||
if not state.isNil:
|
if not state.isNil:
|
||||||
return state
|
return state
|
||||||
if keycardFlowType == ResponseTypeValueInsertCard and
|
if keycardFlowType == ResponseTypeValueInsertCard and
|
||||||
|
|
|
@ -32,4 +32,4 @@ method executeCancelCommand*(self: PluginReaderState, controller: Controller) =
|
||||||
|
|
||||||
method resolveKeycardNextState*(self: PluginReaderState, keycardFlowType: string, keycardEvent: KeycardEvent,
|
method resolveKeycardNextState*(self: PluginReaderState, keycardFlowType: string, keycardEvent: KeycardEvent,
|
||||||
controller: Controller): State =
|
controller: Controller): State =
|
||||||
return ensureReaderAndCardPresenceAndResolveNextState(self, keycardFlowType, keycardEvent, controller)
|
return readingKeycard(self, keycardFlowType, keycardEvent, controller)
|
|
@ -23,29 +23,4 @@ method getNextSecondaryState*(self: ReadingKeycardState, controller: Controller)
|
||||||
|
|
||||||
method resolveKeycardNextState*(self: ReadingKeycardState, keycardFlowType: string, keycardEvent: KeycardEvent,
|
method resolveKeycardNextState*(self: ReadingKeycardState, keycardFlowType: string, keycardEvent: KeycardEvent,
|
||||||
controller: Controller): State =
|
controller: Controller): State =
|
||||||
if self.flowType == FlowType.UnlockKeycard or
|
return readingKeycard(self, keycardFlowType, keycardEvent, controller)
|
||||||
self.flowType == FlowType.RenameKeycard or
|
|
||||||
self.flowType == FlowType.ChangeKeycardPin or
|
|
||||||
self.flowType == FlowType.ChangeKeycardPuk or
|
|
||||||
self.flowType == FlowType.ChangePairingCode or
|
|
||||||
self.flowType == FlowType.MigrateFromAppToKeycard or
|
|
||||||
(self.flowType == FlowType.CreateCopyOfAKeycard and
|
|
||||||
not isPredefinedKeycardDataFlagSet(controller.getKeycardData(), PredefinedKeycardData.CopyFromAKeycardPartDone)) or
|
|
||||||
self.flowType == FlowType.FactoryReset and
|
|
||||||
not controller.getKeyPairForProcessing().isNil:
|
|
||||||
# this part is only for the flows which are card specific (the card we're running a flow for is known in advance)
|
|
||||||
let ensureKeycardPresenceState = ensureReaderAndCardPresence(self, keycardFlowType, keycardEvent, controller)
|
|
||||||
if ensureKeycardPresenceState.isNil: # means the keycard is inserted
|
|
||||||
let nextState = ensureReaderAndCardPresenceAndResolveNextState(self, keycardFlowType, keycardEvent, controller)
|
|
||||||
if not nextState.isNil and
|
|
||||||
(nextState.stateType == StateType.KeycardEmpty or
|
|
||||||
nextState.stateType == StateType.NotKeycard or
|
|
||||||
nextState.stateType == StateType.KeycardEmptyMetadata):
|
|
||||||
return nextState
|
|
||||||
let keyUid = controller.getKeyPairForProcessing().getKeyUid()
|
|
||||||
if keyUid.len > 0:
|
|
||||||
if keyUid != keycardEvent.keyUid:
|
|
||||||
return createState(StateType.WrongKeycard, self.flowType, nil)
|
|
||||||
controller.setKeycardUid(keycardEvent.instanceUID)
|
|
||||||
# this is used in case a keycard is inserted and we jump to the first meaningful screen
|
|
||||||
return ensureReaderAndCardPresenceAndResolveNextState(self, keycardFlowType, keycardEvent, controller)
|
|
|
@ -39,6 +39,7 @@ proc findBackStateWithTargetedStateType*(currentState: State, targetedStateType:
|
||||||
# Resolve state section
|
# Resolve state section
|
||||||
proc ensureReaderAndCardPresence*(state: State, keycardFlowType: string, keycardEvent: KeycardEvent, controller: Controller): State
|
proc ensureReaderAndCardPresence*(state: State, keycardFlowType: string, keycardEvent: KeycardEvent, controller: Controller): State
|
||||||
proc ensureReaderAndCardPresenceAndResolveNextState*(state: State, keycardFlowType: string, keycardEvent: KeycardEvent, controller: Controller): State
|
proc ensureReaderAndCardPresenceAndResolveNextState*(state: State, keycardFlowType: string, keycardEvent: KeycardEvent, controller: Controller): State
|
||||||
|
proc readingKeycard*(state: State, keycardFlowType: string, keycardEvent: KeycardEvent, controller: Controller): State
|
||||||
|
|
||||||
include biometrics_state
|
include biometrics_state
|
||||||
include biometrics_password_failed_state
|
include biometrics_password_failed_state
|
||||||
|
|
|
@ -576,3 +576,33 @@ proc ensureReaderAndCardPresenceAndResolveNextState*(state: State, keycardFlowTy
|
||||||
if keycardEvent.pinRetries == 0 and keycardEvent.pukRetries > 0:
|
if keycardEvent.pinRetries == 0 and keycardEvent.pukRetries > 0:
|
||||||
controller.setKeycardData(updatePredefinedKeycardData(controller.getKeycardData(), PredefinedKeycardData.UseGeneralMessageForLockedState, add = true))
|
controller.setKeycardData(updatePredefinedKeycardData(controller.getKeycardData(), PredefinedKeycardData.UseGeneralMessageForLockedState, add = true))
|
||||||
return createState(StateType.MaxPinRetriesReached, state.flowType, nil)
|
return createState(StateType.MaxPinRetriesReached, state.flowType, nil)
|
||||||
|
|
||||||
|
proc readingKeycard*(state: State, keycardFlowType: string, keycardEvent: KeycardEvent, controller: Controller): State =
|
||||||
|
controller.setKeycardUid("")
|
||||||
|
if state.flowType == FlowType.UnlockKeycard or
|
||||||
|
state.flowType == FlowType.RenameKeycard or
|
||||||
|
state.flowType == FlowType.ChangeKeycardPin or
|
||||||
|
state.flowType == FlowType.ChangeKeycardPuk or
|
||||||
|
state.flowType == FlowType.ChangePairingCode or
|
||||||
|
state.flowType == FlowType.MigrateFromAppToKeycard or
|
||||||
|
(state.flowType == FlowType.CreateCopyOfAKeycard and
|
||||||
|
not isPredefinedKeycardDataFlagSet(controller.getKeycardData(), PredefinedKeycardData.CopyFromAKeycardPartDone)) or
|
||||||
|
state.flowType == FlowType.FactoryReset and
|
||||||
|
not controller.getKeyPairForProcessing().isNil:
|
||||||
|
# this part is only for the flows which are card specific (the card we're running a flow for is known in advance)
|
||||||
|
let ensureKeycardPresenceState = ensureReaderAndCardPresence(state, keycardFlowType, keycardEvent, controller)
|
||||||
|
if ensureKeycardPresenceState.isNil: # means the keycard is inserted
|
||||||
|
let nextState = ensureReaderAndCardPresenceAndResolveNextState(state, keycardFlowType, keycardEvent, controller)
|
||||||
|
if not nextState.isNil and
|
||||||
|
(nextState.stateType == StateType.KeycardEmpty or
|
||||||
|
nextState.stateType == StateType.NotKeycard or
|
||||||
|
nextState.stateType == StateType.KeycardEmptyMetadata):
|
||||||
|
return nextState
|
||||||
|
let keyUid = controller.getKeyPairForProcessing().getKeyUid()
|
||||||
|
if keyUid.len > 0 and keycardEvent.keyUid.len > 0:
|
||||||
|
if keyUid != keycardEvent.keyUid:
|
||||||
|
return createState(StateType.WrongKeycard, state.flowType, nil)
|
||||||
|
controller.setKeycardUid(keycardEvent.instanceUID)
|
||||||
|
|
||||||
|
# this is used in case a keycard is inserted and we jump to the first meaningful screen
|
||||||
|
return ensureReaderAndCardPresenceAndResolveNextState(state, keycardFlowType, keycardEvent, controller)
|
Loading…
Reference in New Issue