diff --git a/domain-server/src/DomainGatekeeper.cpp b/domain-server/src/DomainGatekeeper.cpp index 9d121cb0ab..77cd7ffb94 100644 --- a/domain-server/src/DomainGatekeeper.cpp +++ b/domain-server/src/DomainGatekeeper.cpp @@ -711,20 +711,39 @@ void DomainGatekeeper::getIsGroupMember(const QString& username, const QUuid gro callbackParams.errorCallbackReceiver = this; callbackParams.errorCallbackMethod = "getIsGroupMemberErrorCallback"; - const QString GET_IS_GROUP_MEMBER_PATH = "api/v1/groups/%1/is_member/%2"; + const QString GET_IS_GROUP_MEMBER_PATH = "api/v1/groups/%1/membership/%2"; QString groupIDStr = groupID.toString().mid(1,36); DependencyManager::get()->sendRequest(GET_IS_GROUP_MEMBER_PATH.arg(groupIDStr).arg(username), - AccountManagerAuth::None, + AccountManagerAuth::Required, QNetworkAccessManager::GetOperation, callbackParams); } void DomainGatekeeper::getIsGroupMemberJSONCallback(QNetworkReply& requestReply) { + // { + // "data":{ + // "username":"sethalves", + // "groups":{ + // "fd55479a-265d-4990-854e-3d04214ad1b0":{ + // "name":"Blerg Blah", + // "rank":{ + // "name":"admin", + // "order":1 + // } + // } + // } + // }, + // "status":"success" + // } + QJsonObject jsonObject = QJsonDocument::fromJson(requestReply.readAll()).object(); if (jsonObject["status"].toString() == "success") { - QString username = jsonObject["username"].toString(); - QUuid groupID = QUuid(jsonObject["group_id"].toString()); - bool isMember = jsonObject["is_member"].toBool(); - _server->_settingsManager.recordGroupMembership(username, groupID, isMember); + QJsonObject data = jsonObject["data"].toObject(); + QJsonObject groups = data["groups"].toObject(); + QString username = data["username"].toString(); + _server->_settingsManager.clearGroupMemberships(username); + foreach (auto groupID, groups.keys()) { + _server->_settingsManager.recordGroupMembership(username, groupID, true); + } } else { qDebug() << "getIsGroupMember api call returned:" << QJsonDocument(jsonObject).toJson(QJsonDocument::Compact); } diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index d78199ba8e..fcbf4caa5b 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -112,6 +112,8 @@ DomainServer::DomainServer(int argc, char* argv[]) : return; } + _settingsManager.requestMissingGroupIDs(); + setupNodeListAndAssignments(); setupAutomaticNetworking(); if (!getID().isNull()) { diff --git a/domain-server/src/DomainServerSettingsManager.cpp b/domain-server/src/DomainServerSettingsManager.cpp index 56656f9d7c..daea38de23 100644 --- a/domain-server/src/DomainServerSettingsManager.cpp +++ b/domain-server/src/DomainServerSettingsManager.cpp @@ -1004,6 +1004,11 @@ void DomainServerSettingsManager::persistToFile() { } void DomainServerSettingsManager::requestMissingGroupIDs() { + if (!DependencyManager::get()->hasAuthEndpoint()) { + // can't yet. + return; + } + QHashIterator i_permissions(_groupPermissions.get()); while (i_permissions.hasNext()) { i_permissions.next(); @@ -1044,40 +1049,73 @@ void DomainServerSettingsManager::getGroupID(const QString& groupname) { callbackParams.errorCallbackReceiver = this; callbackParams.errorCallbackMethod = "getGroupIDErrorCallback"; - const QString GET_GROUP_ID_PATH = "api/v1/get_group_id/%1"; + const QString GET_GROUP_ID_PATH = "api/v1/groups/name/%1"; - qDebug() << "Requesting group ID for group named" << groupname; + qDebug() << "************* Requesting group ID for group named" << groupname; DependencyManager::get()->sendRequest(GET_GROUP_ID_PATH.arg(groupname), - AccountManagerAuth::None, + AccountManagerAuth::Required, QNetworkAccessManager::GetOperation, callbackParams); } void DomainServerSettingsManager::getGroupIDJSONCallback(QNetworkReply& requestReply) { + // { + // "data":{ + // "groups":[{ + // "description":null, + // "id":"fd55479a-265d-4990-854e-3d04214ad1b0", + // "is_list":false, + // "membership":{ + // "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 + // }, + // "rank":{ + // "name=":"owner", + // "order=":0 + // } + // }, + // "name":"Blerg Blah" + // }] + // }, + // "status":"success" + // } QJsonObject jsonObject = QJsonDocument::fromJson(requestReply.readAll()).object(); - if (jsonObject["status"].toString() == "success") { - QString groupName = jsonObject["group_name"].toString(); - QUuid groupID = QUuid(jsonObject["group_id"].toString()); + QJsonArray groups = jsonObject["data"].toObject()["groups"].toArray(); + for (int i = 0; i < groups.size(); i++) { + QJsonObject group = groups.at(i).toObject(); + QString groupName = group["name"].toString(); + QUuid groupID = QUuid(group["id"].toString()); - bool found = false; - if (_groupPermissions.contains(groupName)) { - qDebug() << "ID for group:" << groupName << "is" << groupID; - _groupPermissions[groupName]->setGroupID(groupID); - _groupByID[groupID] = _groupPermissions[groupName]; - found = true; - } - if (_groupForbiddens.contains(groupName)) { - qDebug() << "ID for group:" << groupName << "is" << groupID; - _groupForbiddens[groupName]->setGroupID(groupID); - _groupByID[groupID] = _groupForbiddens[groupName]; - found = true; - } + bool found = false; + if (_groupPermissions.contains(groupName)) { + qDebug() << "ID for group:" << groupName << "is" << groupID; + _groupPermissions[groupName]->setGroupID(groupID); + _groupByID[groupID] = _groupPermissions[groupName]; + found = true; + } + if (_groupForbiddens.contains(groupName)) { + qDebug() << "ID for group:" << groupName << "is" << groupID; + _groupForbiddens[groupName]->setGroupID(groupID); + _groupByID[groupID] = _groupForbiddens[groupName]; + found = true; + } - if (found) { - packPermissions(); - } else { - qDebug() << "DomainServerSettingsManager::getGroupIDJSONCallback got response for unknown group:" << groupName; + if (found) { + packPermissions(); + } else { + qDebug() << "DomainServerSettingsManager::getGroupIDJSONCallback got response for unknown group:" << groupName; + } } } else { qDebug() << "getGroupID api call returned:" << QJsonDocument(jsonObject).toJson(QJsonDocument::Compact); @@ -1085,7 +1123,7 @@ void DomainServerSettingsManager::getGroupIDJSONCallback(QNetworkReply& requestR } void DomainServerSettingsManager::getGroupIDErrorCallback(QNetworkReply& requestReply) { - qDebug() << "getGroupID api call failed:" << requestReply.error(); + qDebug() << "******************** getGroupID api call failed:" << requestReply.error(); } void DomainServerSettingsManager::recordGroupMembership(const QString& name, const QUuid groupID, bool isMember) { diff --git a/domain-server/src/DomainServerSettingsManager.h b/domain-server/src/DomainServerSettingsManager.h index a4978c8e91..c343a6bc06 100644 --- a/domain-server/src/DomainServerSettingsManager.h +++ b/domain-server/src/DomainServerSettingsManager.h @@ -68,6 +68,7 @@ public: QList getBlacklistGroupIDs(); // these are used to locally cache the result of calling "api/v1/groups/.../is_member/..." on metaverse's api + void clearGroupMemberships(const QString& name) { _groupMembership[name].clear(); } void recordGroupMembership(const QString& name, const QUuid groupID, bool isMember); bool isGroupMember(const QString& name, const QUuid& groupID); diff --git a/libraries/networking/src/AccountManager.cpp b/libraries/networking/src/AccountManager.cpp index 89e6a6ea10..571f54322b 100644 --- a/libraries/networking/src/AccountManager.cpp +++ b/libraries/networking/src/AccountManager.cpp @@ -253,6 +253,8 @@ void AccountManager::sendRequest(const QString& path, } } + qDebug() << "/////// path =" << path << " requestURL =" << requestURL; + networkRequest.setUrl(requestURL); if (VERBOSE_HTTP_REQUEST_DEBUGGING) {