request method

Future<Response> request(
  1. Request request, {
  2. dynamic authenticated = true,
})

Implementation

Future<http.Response> request(
  http.Request request, {
  authenticated = true,
}) async {
  // authenticated request
  if (authenticated) {
    if (accessToken == null || accessToken!.isExpired) {
      if (refreshToken == null) {
        _log.warning(
            "Can't do authenticated request: missing or expired accessToken + missing refreshToken.");
        throw UnauthenticatedError();
      }

      // try again
      await _refreshAccessToken();
      return this.request(request, authenticated: authenticated);
    }

    request.headers["Authorization"] = "Bearer ${accessToken!.token}";
  }

  // send request
  _log.fine(request.toString());
  _log.finer(request.headers.toString());
  _log.finest(request.body);
  var client = http.Client();
  late http.Response res;
  try {
    res = await http.Response.fromStream(await client.send(request));
  } finally {
    client.close();
  }

  // unauthorized
  // if (res.statusCode == HttpStatus.unauthorized) {
  //   _accessToken_old == null;
  //   if (refreshToken == null) {
  //     throw UnauthorizedError(res.statusCode, res.reasonPhrase);
  //   }

  //   await _refreshAccessToken();
  //   return this.request(request, authenticated: authenticated);
  // }

  // // forbidden
  // if (res.statusCode == HttpStatus.forbidden) {
  //   throw ForbiddenError();
  // }

  // other error
  if (res.statusCode >= 400) {
    throw FloraCloudError(res.statusCode, res.body);
  }

  return res;
}