registerChallengeHandler method
- {@required SecurityCheckChallengeHandler challengeHandler}
Register a security check challenge handler challengeHandler
to handle the challenges recieved for a given security check.
Implementation
registerChallengeHandler(
{@required SecurityCheckChallengeHandler challengeHandler}) {
// Listen to the 'challengeHandlerEvent' events to receive challenge handler method from bridge layer to invoke corresponding challenge handler method in dart.
// A 'challengeHandlerEvent' event is sent when bridge layer recieves the challenges for the registered challenge handler [challengeHandler].
// For example when a user try to access a resource protected by a security check, one of the challenge handler methods (handleChallenge, handleSuccess and handleFailure) of a registered challenge handler class will be called in bridge layer.
// The called challenge handler method in bridge layer is then sent to dart layer.
void _listener(dynamic event) {
// The _challengeEvent map stores the keys 'challengeHandlerMethod' containing challange handler method and 'mapObject' containing challange handler method's argument map object.
final Map<dynamic, dynamic> _challengeEvent = event;
// Validates recieved '_challengeEvent' map data to invoke corresponding challenge handler method in dart.
if (_challengeEvent['challengeHandlerMethod'] ==
'handleChallengeEvent' + challengeHandler.securityCheck) {
challengeHandler.handleChallenge(_challengeEvent['mapObject']);
} else if (_challengeEvent['challengeHandlerMethod'] ==
'challengeSuccessEvent' + challengeHandler.securityCheck) {
challengeHandler.handleSuccess(_challengeEvent['mapObject']);
} else if (_challengeEvent['challengeHandlerMethod'] ==
'challengeFailureEvent' + challengeHandler.securityCheck) {
challengeHandler.handleFailure(_challengeEvent['mapObject']);
}
}
// The 'challengeHandlerEvent' event channel is used to receive challenges for the registered challenge handler from bridge layer.
// The corresponding 'challengeHandlerEvent' event channel in bridge layer will also be implemented to send events.
EventChannel('challengeHandlerEvent')
.receiveBroadcastStream()
.listen(_listener);
_channel.invokeMethod(WLCLIENT_REGISTER_CHALLENGEHANDLER,
<String, dynamic>{SECURITY_CHECKNAME: challengeHandler.securityCheck});
}