bool GetGroupsForUser()

in src/oslogin_utils.cc [1048:1093]


bool GetGroupsForUser(string username, std::vector<Group>* groups, int* errnop) {
  string response;
  if (!(GetUser(username, &response))) {
    DEBUG("GetGroupsForUser: !GetUser\n");
    *errnop = ENOENT;
    return false;
  }

  string email;
  if (!ParseJsonToEmail(response, &email) || email.empty()) {
    DEBUG("GetGroupsForUser: !ParseJsonToEmail\n");
    *errnop = ENOENT;
    return false;
  }

  std::stringstream url;

  long http_code;
  string pageToken ("");

  do {
    url.str("");
    url << kMetadataServerUrl << "groups?email=" << email;
    if (pageToken != "")
      url << "&pagetoken=" << pageToken;

    response.clear();
    http_code = 0;
    if (!HttpGet(url.str(), &response, &http_code) || http_code != 200 ||
        response.empty()) {
      *errnop = EAGAIN;
      return false;
    }

    if (!ParseJsonToKey(response, "nextPageToken", &pageToken)) {
      *errnop = ENOENT;
      return false;
    }

    if (!ParseJsonToGroups(response, groups)) {
      *errnop = ENOENT;
      return false;
    }
  } while (pageToken != "0");
  return true;
}