From bfb4bb089638ab61955638fcccda07b654c116fe Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Fri, 6 May 2016 15:33:52 -0700 Subject: [PATCH] Add userAgentGetter to AccountManager for custom UserAgent --- libraries/networking/src/AccountManager.cpp | 12 +++++++----- libraries/networking/src/AccountManager.h | 9 ++++++--- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/libraries/networking/src/AccountManager.cpp b/libraries/networking/src/AccountManager.cpp index 324301a9d6..9080e3cc53 100644 --- a/libraries/networking/src/AccountManager.cpp +++ b/libraries/networking/src/AccountManager.cpp @@ -69,7 +69,8 @@ QJsonObject AccountManager::dataObjectFromResponse(QNetworkReply &requestReply) } } -AccountManager::AccountManager() : +AccountManager::AccountManager(UserAgentGetter userAgentGetter) : + _userAgentGetter(userAgentGetter), _authURL(), _pendingCallbackMap() { @@ -212,8 +213,9 @@ void AccountManager::sendRequest(const QString& path, QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance(); QNetworkRequest networkRequest; - networkRequest.setHeader(QNetworkRequest::UserAgentHeader, HIGH_FIDELITY_USER_AGENT); - + + networkRequest.setHeader(QNetworkRequest::UserAgentHeader, _userAgentGetter()); + QUrl requestURL = _authURL; if (path.startsWith("/")) { @@ -463,7 +465,7 @@ void AccountManager::requestAccessToken(const QString& login, const QString& pas QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance(); QNetworkRequest request; - request.setHeader(QNetworkRequest::UserAgentHeader, HIGH_FIDELITY_USER_AGENT); + request.setHeader(QNetworkRequest::UserAgentHeader, _userAgentGetter()); QUrl grantURL = _authURL; grantURL.setPath("/oauth/token"); @@ -533,7 +535,7 @@ void AccountManager::requestProfile() { profileURL.setPath("/api/v1/user/profile"); QNetworkRequest profileRequest(profileURL); - profileRequest.setHeader(QNetworkRequest::UserAgentHeader, HIGH_FIDELITY_USER_AGENT); + profileRequest.setHeader(QNetworkRequest::UserAgentHeader, _userAgentGetter()); profileRequest.setRawHeader(ACCESS_TOKEN_AUTHORIZATION_HEADER, _accountInfo.getAccessToken().authorizationHeaderValue()); QNetworkReply* profileReply = networkAccessManager.get(profileRequest); diff --git a/libraries/networking/src/AccountManager.h b/libraries/networking/src/AccountManager.h index 7306eaef14..d3c855e001 100644 --- a/libraries/networking/src/AccountManager.h +++ b/libraries/networking/src/AccountManager.h @@ -52,10 +52,12 @@ Q_DECLARE_METATYPE(AccountManagerAuth::Type); const QByteArray ACCESS_TOKEN_AUTHORIZATION_HEADER = "Authorization"; -class AccountManager : public QObject { +using UserAgentGetter = std::function; + +class AccountManager : public QObject, public Dependency { Q_OBJECT public: - static AccountManager& getInstance(bool forceReset = false); + AccountManager(UserAgentGetter = []() -> QString { return HIGH_FIDELITY_USER_AGENT; }); Q_INVOKABLE void sendRequest(const QString& path, AccountManagerAuth::Type authType, @@ -112,7 +114,6 @@ private slots: void generateNewKeypair(bool isUserKeypair = true, const QUuid& domainID = QUuid()); private: - AccountManager(); AccountManager(AccountManager const& other) = delete; void operator=(AccountManager const& other) = delete; @@ -122,6 +123,8 @@ private: void passSuccessToCallback(QNetworkReply* reply); void passErrorToCallback(QNetworkReply* reply); + UserAgentGetter _userAgentGetter; + QUrl _authURL; QMap _pendingCallbackMap;