handleRequest method

Future<ApiResponse> handleRequest(
  1. HttpRequest httpRequest
)

Implementation

Future<ApiResponse> handleRequest(HttpRequest httpRequest) async {
  final absolutePath = httpRequest.uri.path;
  final handler = _findRequestHandler(absolutePath);
  final path = absolutePath.substring(basePath.length);

  final headers = <String, List<String>>{};
  httpRequest.headers.forEach((name, values) {
    headers[name] = values;
  });

  final route = (handler is ApiEndpoint)
      ? handler.routePattern.decode(path)
      : Route(RoutePattern.any, path, {}, path);

  // find session
  Session? session;
  if (sessionProvider != null) {
    if (headers['session-token']?.isNotEmpty ?? false) {
      session =
          await sessionProvider!.redeemToken(headers['session-token']!.first);
    }
  }

  //TODO rethink RequestContext. not very sexy
  final context = RequestContext(sessionProvider, session);

  //TODO cookies

  final request = ApiRequest(
    context,
    parseMethod(httpRequest.method),
    route,
    headers,
    httpRequest.uri.queryParameters,
    httpRequest,
  );

  if (middleware != null) {
    return await middleware!.call(handler).handleRequest(request);
  } else {
    return await handler.handleRequest(request);
  }
}