From f78a1f703374dcde09826d78b6a800d06d48fdd4 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 21 Jul 2014 17:32:38 -0700 Subject: [PATCH] hook domain-server to user DomainServerWebSessionData class --- domain-server/src/DomainServer.cpp | 10 +++---- domain-server/src/DomainServer.h | 3 +- .../src/DomainServerWebSessionData.cpp | 28 ++++++++++++++++++- .../src/DomainServerWebSessionData.h | 5 ++++ 4 files changed, 39 insertions(+), 7 deletions(-) diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index b0248d3b57..3c0a088869 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -43,7 +43,7 @@ DomainServer::DomainServer(int argc, char* argv[]) : _networkReplyUUIDMap(), _sessionAuthenticationHash(), _webAuthenticationStateSet(), - _cookieProfileJSONHash(), + _cookieSessionHash(), _settingsManager() { setOrganizationName("High Fidelity"); @@ -1281,10 +1281,10 @@ bool DomainServer::isAuthenticatedRequest(HTTPConnection* connection, const QUrl cookieUUID = cookieUUIDRegex.cap(1); } - if (!cookieUUID.isNull() && _cookieProfileJSONHash.contains(cookieUUID)) { + if (!cookieUUID.isNull() && _cookieSessionHash.contains(cookieUUID)) { // pull the QJSONObject for the user with this cookie UUID - QJsonObject profileObject = _cookieProfileJSONHash.value(cookieUUID); - QString profileUsername = profileObject.value("username").toString(); + DomainServerWebSessionData sessionData = _cookieSessionHash.value(cookieUUID); + QString profileUsername = sessionData.getUsername(); if (_argumentVariantMap.value(ADMIN_USERS_CONFIG_KEY).toJsonValue().toArray().contains(profileUsername)) { // this is an authenticated user @@ -1404,7 +1404,7 @@ Headers DomainServer::setupCookieHeadersFromProfileReply(QNetworkReply* profileR QJsonDocument profileDocument = QJsonDocument::fromJson(profileReply->readAll()); // add the profile to our in-memory data structure so we know who the user is when they send us their cookie - _cookieProfileJSONHash.insert(cookieUUID, profileDocument.object()["data"].toObject()["user"].toObject()); + _cookieSessionHash.insert(cookieUUID, DomainServerWebSessionData(profileDocument)); // setup expiry for cookie to 1 month from today QDateTime cookieExpiry = QDateTime::currentDateTimeUtc().addMonths(1); diff --git a/domain-server/src/DomainServer.h b/domain-server/src/DomainServer.h index 98e5b96f25..f8daa9a529 100644 --- a/domain-server/src/DomainServer.h +++ b/domain-server/src/DomainServer.h @@ -25,6 +25,7 @@ #include #include "DomainServerSettingsManager.h" +#include "DomainServerWebSessionData.h" #include "WalletTransaction.h" #include "PendingAssignedNodeData.h" @@ -115,7 +116,7 @@ private: QHash _sessionAuthenticationHash; QSet _webAuthenticationStateSet; - QHash _cookieProfileJSONHash; + QHash _cookieSessionHash; DomainServerSettingsManager _settingsManager; }; diff --git a/domain-server/src/DomainServerWebSessionData.cpp b/domain-server/src/DomainServerWebSessionData.cpp index e59f255822..de73ca77dd 100644 --- a/domain-server/src/DomainServerWebSessionData.cpp +++ b/domain-server/src/DomainServerWebSessionData.cpp @@ -14,6 +14,13 @@ #include "DomainServerWebSessionData.h" +DomainServerWebSessionData::DomainServerWebSessionData() : + _username(), + _roles() +{ + +} + DomainServerWebSessionData::DomainServerWebSessionData(const QJsonDocument& profileDocument) : _roles() { @@ -23,4 +30,23 @@ DomainServerWebSessionData::DomainServerWebSessionData(const QJsonDocument& prof foreach(const QJsonValue& rolesValue, profileDocument.object()["user"].toObject()["roles"].toObject()) { _roles.insert(rolesValue.toString()); } -} \ No newline at end of file +} + +DomainServerWebSessionData::DomainServerWebSessionData(const DomainServerWebSessionData& otherSessionData) { + _username = otherSessionData._username; + _roles = otherSessionData._roles; +} + +DomainServerWebSessionData& DomainServerWebSessionData::operator=(const DomainServerWebSessionData& otherSessionData) { + DomainServerWebSessionData temp(otherSessionData); + swap(temp); + return *this; +} + +void DomainServerWebSessionData::swap(DomainServerWebSessionData& otherSessionData) { + using std::swap; + + swap(_username, otherSessionData._username); + swap(_roles, otherSessionData._roles); +} + diff --git a/domain-server/src/DomainServerWebSessionData.h b/domain-server/src/DomainServerWebSessionData.h index 80088c9362..cd2410cf66 100644 --- a/domain-server/src/DomainServerWebSessionData.h +++ b/domain-server/src/DomainServerWebSessionData.h @@ -18,12 +18,17 @@ class DomainServerWebSessionData : public QObject { Q_OBJECT public: + DomainServerWebSessionData(); DomainServerWebSessionData(const QJsonDocument& profileDocument); + DomainServerWebSessionData(const DomainServerWebSessionData& otherSessionData); + DomainServerWebSessionData& operator=(const DomainServerWebSessionData& otherSessionData); const QString& getUsername() const { return _username; } const QSet& getRoles() const { return _roles; } private: + void swap(DomainServerWebSessionData& otherSessionData); + QString _username; QSet _roles; };