Reactivation (Forgot PIN)
After Activation if user forgets their pin then by Reactivation the user can generate a new pin by providing a new activation code and pin - where the activation code can be generated on the SSMS portal. See the test case description on how to do that.
Reactivation flow consists of these events.
Reactivation event flow-diagram
The following diagram shows the working of reactivation.
iOS/Swift
The user needs to trigger a ReactivationEvent, so for Swift you can trigger that by this snippet:
Triggering ReactivationEvent Event (Swift)
static func performReactivateUser(reactivateRequest: ReactivateUserRequest, completion: @escaping (ActionResult) -> Void) {
let userIdentifier = KsUserIdentifier(tenantId: reactivateRequest.tenantId,
userId: reactivateRequest.userId)
let reactivateEvent = KSMReactivationEvent(userIdentifier: userIdentifier,
activationCode: reactivateRequest.activationCode,
pin: reactivateRequest.pin,
enableAutoLogin: reactivateRequest.enableAutoLogin)
let time = CallTimer(event: reactivateEvent)
MasterControllerAdapter.sharedInstance.sendEvent2MasterController(event: reactivateEvent) { event in
let duration = time.stop()
let actionResult: ActionResult
if let resultEvent = event as? KSMReactivationResultEvent {
let result = handleReactivateUserStatus(status: resultEvent.reactivationStatus)
actionResult = ActionResult(title: "reactivationModel.title".localized(table: localizedTable),
success: result.success,
error: result.errorText?.localized(table: localizedTable),
duration: duration,
event: event)
} else if let resultEvent = event as? KSMLoginResultEvent {
let result = handleReactivateUserStatus(status: resultEvent.loginStatus)
actionResult = ActionResult(title: "reactivationModel.title".localized(table: localizedTable),
success: result.success,
error: result.errorText?.localized(table: localizedTable),
duration: duration,
event: event)
} else {
actionResult = ActionResult(title: "reactivationModel.title".localized(table: localizedTable),
success: false,
error: "reactivationModel.status.unexpectedEvent".localized(table: localizedTable),
duration: duration,
event: nil)
}
EventLogObject(actionResult: actionResult,
component: localizedTable)
completion(actionResult)
}
}
Android/Kotlin
Triggering ReactivationEvent Event (Kotlin)
fun triggerReactivationEvent(
userIdentifier: UserIdentifier,
activationCode: String,
pin: String,
autoLogin: Boolean
) {
val reactivationEvent = ReactivationEvent(userIdentifier, activationCode, pin, autoLogin)
synchronousEventHandler.postEvent(reactivationEvent)?.then {
// handle result
}
}
All Platforms
As response to ReactivationEvent the Master Controller sends a ReactivationResultEvent with appropriate status.