From 2a25f458fc03399c88b48b31f4932b525ee4ed3a Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Mon, 4 Jul 2016 10:20:25 -0700 Subject: [PATCH] fetch rank names from web api after getting a group's ID --- .../src/DomainServerSettingsManager.cpp | 96 +++++++++++++++++++ .../src/DomainServerSettingsManager.h | 6 ++ libraries/networking/src/AccountManager.cpp | 2 - 3 files changed, 102 insertions(+), 2 deletions(-) diff --git a/domain-server/src/DomainServerSettingsManager.cpp b/domain-server/src/DomainServerSettingsManager.cpp index daea38de23..5c27f37172 100644 --- a/domain-server/src/DomainServerSettingsManager.cpp +++ b/domain-server/src/DomainServerSettingsManager.cpp @@ -1090,6 +1090,7 @@ void DomainServerSettingsManager::getGroupIDJSONCallback(QNetworkReply& requestR // "status":"success" // } QJsonObject jsonObject = QJsonDocument::fromJson(requestReply.readAll()).object(); + if (jsonObject["status"].toString() == "success") { QJsonArray groups = jsonObject["data"].toObject()["groups"].toArray(); for (int i = 0; i < groups.size(); i++) { @@ -1113,6 +1114,7 @@ void DomainServerSettingsManager::getGroupIDJSONCallback(QNetworkReply& requestR if (found) { packPermissions(); + getGroupRanks(groupID); } else { qDebug() << "DomainServerSettingsManager::getGroupIDJSONCallback got response for unknown group:" << groupName; } @@ -1126,6 +1128,100 @@ void DomainServerSettingsManager::getGroupIDErrorCallback(QNetworkReply& request qDebug() << "******************** getGroupID api call failed:" << requestReply.error(); } +void DomainServerSettingsManager::getGroupRanks(const QUuid& groupID) { + JSONCallbackParameters callbackParams; + callbackParams.jsonCallbackReceiver = this; + callbackParams.jsonCallbackMethod = "getGroupRanksJSONCallback"; + callbackParams.errorCallbackReceiver = this; + callbackParams.errorCallbackMethod = "getGroupRanksErrorCallback"; + + const QString GET_GROUP_RANKS_PATH = "api/v1/groups/%1/ranks"; + + qDebug() << "************* Requesting group ranks for group" << groupID; + + DependencyManager::get()->sendRequest(GET_GROUP_RANKS_PATH.arg(groupID.toString().mid(1,36)), + AccountManagerAuth::Required, + QNetworkAccessManager::GetOperation, callbackParams); +} + +void DomainServerSettingsManager::getGroupRanksJSONCallback(QNetworkReply& requestReply) { + // { + // "current_page":1, + // "data":{ + // "groups":{ + // "fd55479a-265d-4990-854e-3d04214ad1b0":{ + // "ranks":[ + // { + // "name":"owner", + // "order":0, + // "permissions":{ + // "custom_1":false, + // "custom_2":false, + // "custom_3":false, + // "custom_4":false, + // "del_group":true, + // "invite_member":true, + // "kick_member":true, + // "list_members":true, + // "mv_group":true, + // "query_members":true, + // "rank_member":true + // } + // }, + // { + // "name":"admin", + // "order":1, + // "permissions":{ + // "custom_1":false, + // "custom_2":false, + // "custom_3":false, + // "custom_4":false, + // "del_group":false, + // "invite_member":false, + // "kick_member":false, + // "list_members":false, + // "mv_group":false, + // "query_members":false, + // "rank_member":false + // } + // } + // ] + // } + // } + // }, + // "per_page":30, + // "status":"success", + // "total_entries":2, + // "total_pages":1 + // } + + QJsonObject jsonObject = QJsonDocument::fromJson(requestReply.readAll()).object(); + if (jsonObject["status"].toString() == "success") { + QJsonObject groups = jsonObject["data"].toObject()["groups"].toObject(); + foreach (auto groupID, groups.keys()) { + QJsonObject group = groups[groupID].toObject(); + QJsonArray ranks = group["ranks"].toArray(); + for (int rankIndex = 0; rankIndex < ranks.size(); rankIndex++) { + QJsonObject rank = ranks.at(rankIndex).toObject(); + QString rankName = rank["name"].toString(); + int rankOrder = rank["order"].toInt(); + qDebug() << "**** " << groupID << "rank name =" << rankName << " order =" << rankOrder; + QVector& ranksForGroup = _groupRanks[groupID]; + if (ranksForGroup.size() < rankOrder + 1) { + ranksForGroup.resize(rankOrder + 1); + } + ranksForGroup[rankOrder] = rankName; + } + } + } else { + qDebug() << "getGroupRanks api call returned:" << QJsonDocument(jsonObject).toJson(QJsonDocument::Compact); + } +} + +void DomainServerSettingsManager::getGroupRanksErrorCallback(QNetworkReply& requestReply) { + qDebug() << "******************** getGroupRanks api call failed:" << requestReply.error(); +} + void DomainServerSettingsManager::recordGroupMembership(const QString& name, const QUuid groupID, bool isMember) { _groupMembership[name][groupID] = isMember; } diff --git a/domain-server/src/DomainServerSettingsManager.h b/domain-server/src/DomainServerSettingsManager.h index c343a6bc06..706717eda8 100644 --- a/domain-server/src/DomainServerSettingsManager.h +++ b/domain-server/src/DomainServerSettingsManager.h @@ -78,6 +78,8 @@ signals: public slots: void getGroupIDJSONCallback(QNetworkReply& requestReply); void getGroupIDErrorCallback(QNetworkReply& requestReply); + void getGroupRanksJSONCallback(QNetworkReply& requestReply); + void getGroupRanksErrorCallback(QNetworkReply& requestReply); private slots: void processSettingsRequestPacket(QSharedPointer message); @@ -106,6 +108,7 @@ private: void requestMissingGroupIDs(); void getGroupID(const QString& groupname); NodePermissionsPointer lookupGroupByID(const QUuid& id); + void getGroupRanks(const QUuid& groupID); void packPermissionsForMap(QString mapName, NodePermissionsMap& agentPermissions, QString keyPath); void packPermissions(); @@ -117,6 +120,9 @@ private: NodePermissionsMap _groupForbiddens; // permissions denied due to membership in a specific group QHash _groupByID; // similar to _groupPermissions but key is group-id rather than name + // remember the responses to api/v1/groups/%1/ranks + QHash> _groupRanks; + // keep track of answers to api queries about which users are in which groups QHash> _groupMembership; }; diff --git a/libraries/networking/src/AccountManager.cpp b/libraries/networking/src/AccountManager.cpp index 34fab3575f..c4bfae7cac 100644 --- a/libraries/networking/src/AccountManager.cpp +++ b/libraries/networking/src/AccountManager.cpp @@ -249,8 +249,6 @@ void AccountManager::sendRequest(const QString& path, } } - qDebug() << "/////// path =" << path << " requestURL =" << requestURL; - networkRequest.setUrl(requestURL); if (VERBOSE_HTTP_REQUEST_DEBUGGING) {