intercept method

  1. @override
Future<HttpResponse> intercept(
  1. HttpRequest request,
  2. CancellationToken token,
  3. HttpRequestHandler next
)
override

Implementation

@override
Future<HttpResponse> intercept(HttpRequest request, CancellationToken token,
    HttpRequestHandler next) async {
  if (!allowedOrigins.contains(request.uri.origin)) {
    return next(request, token);
  }
  final credential = await token.race(coordinator.provider.getToken());
  final response = await next(_authorize(request, credential), token);
  final safe = {HttpMethod.get, HttpMethod.head, HttpMethod.options}
      .contains(request.method);
  if (response.statusCode != 401 ||
      request.body?.isReplayable == false ||
      (!safe && !replayWrites)) {
    return response;
  }
  await response.dispose();
  final refreshed = await coordinator.refresh(credential, token);
  return next(_authorize(request, refreshed), token);
}