registerChallengeHandler method

dynamic registerChallengeHandler (
  1. {@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});
}