handleRequest method
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);
}
}