From ae0c8a96f2bd5883865e1b6f606ee266e38d46cf Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Wed, 1 Jun 2016 15:33:24 -0700 Subject: [PATCH] code to unpack permissions into a usable data structure --- domain-server/src/AgentPermissions.h | 40 +++++++++++++++++++ .../src/DomainServerSettingsManager.cpp | 40 +++++++++++++++++++ .../src/DomainServerSettingsManager.h | 7 ++++ 3 files changed, 87 insertions(+) create mode 100644 domain-server/src/AgentPermissions.h diff --git a/domain-server/src/AgentPermissions.h b/domain-server/src/AgentPermissions.h new file mode 100644 index 0000000000..50c90581c1 --- /dev/null +++ b/domain-server/src/AgentPermissions.h @@ -0,0 +1,40 @@ +// +// AgentPermissions.h +// domain-server/src +// +// Created by Seth Alves on 2016-6-1. +// Copyright 2016 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#ifndef hifi_AgentPermissions_h +#define hifi_AgentPermissions_h + +class AgentPermissions { +public: + AgentPermissions(QMap perms) { + _id = perms["permissions_id"].toString(); + canConnectToDomain = perms["id_can_connect"].toBool(); + canAdjustLocks = perms["id_can_adjust_locks"].toBool(); + canRezPermanentEntities = perms["id_can_rez"].toBool(); + canRezTemporaryEntities = perms["id_can_rez_tmp"].toBool(); + canWriteToAssetServer = perms["id_can_write_to_asset_server"].toBool(); + }; + + QString getID() { return _id; } + + bool canConnectToDomain { false }; + bool canAdjustLocks { false }; + bool canRezPermanentEntities { false }; + bool canRezTemporaryEntities { false }; + bool canWriteToAssetServer { false }; + +protected: + QString _id; +}; + +using AgentPermissionsPointer = std::shared_ptr; + +#endif // hifi_AgentPermissions_h diff --git a/domain-server/src/DomainServerSettingsManager.cpp b/domain-server/src/DomainServerSettingsManager.cpp index 23bb3e7abf..0d6214d702 100644 --- a/domain-server/src/DomainServerSettingsManager.cpp +++ b/domain-server/src/DomainServerSettingsManager.cpp @@ -26,6 +26,9 @@ #include "DomainServerSettingsManager.h" +#define WANT_DEBUG 1 + + const QString SETTINGS_DESCRIPTION_RELATIVE_PATH = "/resources/describe-settings.json"; const QString DESCRIPTION_SETTINGS_KEY = "settings"; @@ -190,12 +193,49 @@ void DomainServerSettingsManager::setupConfigMap(const QStringList& argumentList _configMap.loadMasterAndUserConfig(argumentList); } } + + if (oldVersion < 1.3) { + // This was prior to the permissions-grid in the domain-server settings page + + } } + unpackPermissions(); + // write the current description version to our settings appSettings.setValue(JSON_SETTINGS_VERSION_KEY, _descriptionVersion); } +void DomainServerSettingsManager::unpackPermissions() { + QList permsHashList = valueOrDefaultValueForKeyPath(AGENT_PERMISSIONS_KEYPATH).toList(); + foreach (QVariant permsHash, permsHashList) { + AgentPermissionsPointer perms { new AgentPermissions(permsHash.toMap()) }; + _agentPermissions[perms->getID()] = perms; + } + + #ifdef WANT_DEBUG + qDebug() << "--------------- permissions ---------------------"; + QHashIterator i(_agentPermissions); + while (i.hasNext()) { + i.next(); + AgentPermissionsPointer perms = i.value(); + qDebug() << i.key() + << perms->canConnectToDomain + << perms->canAdjustLocks + << perms->canRezPermanentEntities + << perms->canRezTemporaryEntities + << perms->canWriteToAssetServer; + } + #endif +} + +AgentPermissionsPointer DomainServerSettingsManager::getPermissionsForName(QString name) const { + if (_agentPermissions.contains(name)) { + return _agentPermissions[name]; + } + return nullptr; +} + QVariant DomainServerSettingsManager::valueOrDefaultValueForKeyPath(const QString& keyPath) { const QVariant* foundValue = valueForKeyPath(_configMap.getMergedConfig(), keyPath); diff --git a/domain-server/src/DomainServerSettingsManager.h b/domain-server/src/DomainServerSettingsManager.h index d6dd5070a9..4d305b2b5b 100644 --- a/domain-server/src/DomainServerSettingsManager.h +++ b/domain-server/src/DomainServerSettingsManager.h @@ -19,6 +19,7 @@ #include #include +#include "AgentPermissions.h" const QString SETTINGS_PATHS_KEY = "paths"; @@ -27,6 +28,7 @@ const QString SETTINGS_PATH_JSON = SETTINGS_PATH + ".json"; const QString ALLOWED_USERS_SETTINGS_KEYPATH = "security.allowed_users"; const QString RESTRICTED_ACCESS_SETTINGS_KEYPATH = "security.restricted_access"; +const QString AGENT_PERMISSIONS_KEYPATH = "security.permissions"; class DomainServerSettingsManager : public QObject { Q_OBJECT @@ -41,6 +43,8 @@ public: QVariantMap& getUserSettingsMap() { return _configMap.getUserConfig(); } QVariantMap& getSettingsMap() { return _configMap.getMergedConfig(); } + AgentPermissionsPointer getPermissionsForName(QString name) const; + private slots: void processSettingsRequestPacket(QSharedPointer message); @@ -58,6 +62,9 @@ private: HifiConfigVariantMap _configMap; friend class DomainServer; + + void unpackPermissions(); + QHash _agentPermissions; }; #endif // hifi_DomainServerSettingsManager_h