onRequest method

  1. @override
FutureOr<Request> onRequest(
  1. Request request
)

Handles chopper request and creates alice http call

Implementation

@override
FutureOr<chopper.Request> onRequest(chopper.Request request) async {
  try {
    final headers = request.headers;
    headers['alice_token'] = DateTime.now().millisecondsSinceEpoch.toString();
    final changedRequest = request.copyWith(headers: headers);
    final baseRequest = await changedRequest.toBaseRequest();

    final call = AliceHttpCall(getRequestHashCode(baseRequest));
    var endpoint = '';
    var server = '';

    final split = request.url.toString().split('/');
    if (split.length > 2) {
      server = split[1] + split[2];
    }
    if (split.length > 4) {
      endpoint = '/';
      for (var splitIndex = 3; splitIndex < split.length; splitIndex++) {
        // ignore: use_string_buffers
        endpoint += '${split[splitIndex]}/';
      }
      endpoint = endpoint.substring(0, endpoint.length - 1);
    }

    call
      ..method = request.method
      ..endpoint = endpoint
      ..server = server
      ..client = 'Chopper';
    if (request.url.toString().contains('https')) {
      call.secure = true;
    }

    final aliceHttpRequest = AliceHttpRequest();

    if (request.body == null) {
      aliceHttpRequest
        ..size = 0
        ..body = '';
    } else {
      aliceHttpRequest
        ..size = utf8.encode(request.body as String).length
        ..body = request.body;
    }
    aliceHttpRequest
      ..time = DateTime.now()
      ..headers = request.headers;

    String? contentType = 'unknown';
    if (request.headers.containsKey('Content-Type')) {
      contentType = request.headers['Content-Type'];
    }
    aliceHttpRequest
      ..contentType = contentType
      ..queryParameters = request.parameters;

    call
      ..request = aliceHttpRequest
      ..response = AliceHttpResponse();

    aliceCore.addCall(call);
  } catch (exception) {
    AliceUtils.log(exception.toString());
  }
  return request;
}