Case21085 - Changing domains with scripting APIs not working

AccountManager was earlier changed to support QUrlQuery for
query strings in it's 'send.'  Unfortunately, QUrlQuery isn't
a scriptable property type so using AM was failing from scripts
This commit is contained in:
Roxanne Skelly 2019-02-07 22:21:05 -08:00
parent 4bbb030ad7
commit e6b2c890d0
4 changed files with 26 additions and 23 deletions

View file

@ -72,20 +72,17 @@ void QmlMarketplace::getMarketplaceItems(
void QmlMarketplace::getMarketplaceItem(const QString& marketplaceItemId) { void QmlMarketplace::getMarketplaceItem(const QString& marketplaceItemId) {
QString endpoint = QString("items/") + marketplaceItemId; QString endpoint = QString("items/") + marketplaceItemId;
QUrlQuery request; send(endpoint, "getMarketplaceItemSuccess", "getMarketplaceItemFailure", QNetworkAccessManager::GetOperation, AccountManagerAuth::Optional);
send(endpoint, "getMarketplaceItemSuccess", "getMarketplaceItemFailure", QNetworkAccessManager::GetOperation, AccountManagerAuth::Optional, request);
} }
void QmlMarketplace::marketplaceItemLike(const QString& marketplaceItemId, const bool like) { void QmlMarketplace::marketplaceItemLike(const QString& marketplaceItemId, const bool like) {
QString endpoint = QString("items/") + marketplaceItemId + "/like"; QString endpoint = QString("items/") + marketplaceItemId + "/like";
QUrlQuery request; send(endpoint, "marketplaceItemLikeSuccess", "marketplaceItemLikeFailure", like ? QNetworkAccessManager::PostOperation : QNetworkAccessManager::DeleteOperation, AccountManagerAuth::Required);
send(endpoint, "marketplaceItemLikeSuccess", "marketplaceItemLikeFailure", like ? QNetworkAccessManager::PostOperation : QNetworkAccessManager::DeleteOperation, AccountManagerAuth::Required, request);
} }
void QmlMarketplace::getMarketplaceCategories() { void QmlMarketplace::getMarketplaceCategories() {
QString endpoint = "categories"; QString endpoint = "categories";
QUrlQuery request; send(endpoint, "getMarketplaceCategoriesSuccess", "getMarketplaceCategoriesFailure", QNetworkAccessManager::GetOperation, AccountManagerAuth::None);
send(endpoint, "getMarketplaceCategoriesSuccess", "getMarketplaceCategoriesFailure", QNetworkAccessManager::GetOperation, AccountManagerAuth::None, request);
} }
@ -94,14 +91,13 @@ void QmlMarketplace::send(const QString& endpoint, const QString& success, const
const QString URL = "/api/v1/marketplace/"; const QString URL = "/api/v1/marketplace/";
JSONCallbackParameters callbackParams(this, success, fail); JSONCallbackParameters callbackParams(this, success, fail);
accountManager->sendRequest(URL + endpoint, accountManager->sendRequest(URL + endpoint + "?" + request.toString(),
authType, authType,
method, method,
callbackParams, callbackParams,
QByteArray(), QByteArray(),
NULL, NULL,
QVariantMap(), QVariantMap());
request);
} }

View file

@ -60,7 +60,12 @@ signals:
void marketplaceItemLikeResult(QJsonObject result); void marketplaceItemLikeResult(QJsonObject result);
private: private:
void send(const QString& endpoint, const QString& success, const QString& fail, QNetworkAccessManager::Operation method, AccountManagerAuth::Type authType, const QUrlQuery & request); void send(const QString& endpoint,
const QString& success,
const QString& fail,
QNetworkAccessManager::Operation method,
AccountManagerAuth::Type authType,
const QUrlQuery& request = QUrlQuery());
QJsonObject apiResponse(const QString& label, QNetworkReply* reply); QJsonObject apiResponse(const QString& label, QNetworkReply* reply);
QJsonObject failResponse(const QString& label, QNetworkReply* reply); QJsonObject failResponse(const QString& label, QNetworkReply* reply);
}; };

View file

@ -208,7 +208,7 @@ void AccountManager::setSessionID(const QUuid& sessionID) {
} }
} }
QNetworkRequest AccountManager::createRequest(QString path, AccountManagerAuth::Type authType, const QUrlQuery & query) { QNetworkRequest AccountManager::createRequest(QString path, AccountManagerAuth::Type authType) {
QNetworkRequest networkRequest; QNetworkRequest networkRequest;
networkRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); networkRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
networkRequest.setHeader(QNetworkRequest::UserAgentHeader, _userAgentGetter()); networkRequest.setHeader(QNetworkRequest::UserAgentHeader, _userAgentGetter());
@ -222,12 +222,17 @@ QNetworkRequest AccountManager::createRequest(QString path, AccountManagerAuth::
requestURL = getMetaverseServerURL(); requestURL = getMetaverseServerURL();
} }
int queryStringLocation = path.indexOf("?");
if (path.startsWith("/")) { if (path.startsWith("/")) {
requestURL.setPath(path); requestURL.setPath(path.left(queryStringLocation));
} else { } else {
requestURL.setPath("/" + path); requestURL.setPath("/" + path.left(queryStringLocation));
} }
if (queryStringLocation >= 0) {
QUrlQuery query(path.mid(queryStringLocation+1));
requestURL.setQuery(query); requestURL.setQuery(query);
}
if (authType != AccountManagerAuth::None ) { if (authType != AccountManagerAuth::None ) {
if (hasValidAccessToken()) { if (hasValidAccessToken()) {
@ -253,8 +258,7 @@ void AccountManager::sendRequest(const QString& path,
const JSONCallbackParameters& callbackParams, const JSONCallbackParameters& callbackParams,
const QByteArray& dataByteArray, const QByteArray& dataByteArray,
QHttpMultiPart* dataMultiPart, QHttpMultiPart* dataMultiPart,
const QVariantMap& propertyMap, const QVariantMap& propertyMap) {
QUrlQuery query) {
if (thread() != QThread::currentThread()) { if (thread() != QThread::currentThread()) {
QMetaObject::invokeMethod(this, "sendRequest", QMetaObject::invokeMethod(this, "sendRequest",
@ -264,14 +268,13 @@ void AccountManager::sendRequest(const QString& path,
Q_ARG(const JSONCallbackParameters&, callbackParams), Q_ARG(const JSONCallbackParameters&, callbackParams),
Q_ARG(const QByteArray&, dataByteArray), Q_ARG(const QByteArray&, dataByteArray),
Q_ARG(QHttpMultiPart*, dataMultiPart), Q_ARG(QHttpMultiPart*, dataMultiPart),
Q_ARG(QVariantMap, propertyMap), Q_ARG(QVariantMap, propertyMap));
Q_ARG(QUrlQuery, query));
return; return;
} }
QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance(); QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance();
QNetworkRequest networkRequest = createRequest(path, authType, query); QNetworkRequest networkRequest = createRequest(path, authType);
if (VERBOSE_HTTP_REQUEST_DEBUGGING) { if (VERBOSE_HTTP_REQUEST_DEBUGGING) {
qCDebug(networking) << "Making a request to" << qPrintable(networkRequest.url().toString()); qCDebug(networking) << "Making a request to" << qPrintable(networkRequest.url().toString());

View file

@ -61,15 +61,14 @@ class AccountManager : public QObject, public Dependency {
public: public:
AccountManager(UserAgentGetter userAgentGetter = DEFAULT_USER_AGENT_GETTER); AccountManager(UserAgentGetter userAgentGetter = DEFAULT_USER_AGENT_GETTER);
QNetworkRequest createRequest(QString path, AccountManagerAuth::Type authType, const QUrlQuery & query = QUrlQuery()); QNetworkRequest createRequest(QString path, AccountManagerAuth::Type authType);
Q_INVOKABLE void sendRequest(const QString& path, Q_INVOKABLE void sendRequest(const QString& path,
AccountManagerAuth::Type authType, AccountManagerAuth::Type authType,
QNetworkAccessManager::Operation operation = QNetworkAccessManager::GetOperation, QNetworkAccessManager::Operation operation = QNetworkAccessManager::GetOperation,
const JSONCallbackParameters& callbackParams = JSONCallbackParameters(), const JSONCallbackParameters& callbackParams = JSONCallbackParameters(),
const QByteArray& dataByteArray = QByteArray(), const QByteArray& dataByteArray = QByteArray(),
QHttpMultiPart* dataMultiPart = NULL, QHttpMultiPart* dataMultiPart = NULL,
const QVariantMap& propertyMap = QVariantMap(), const QVariantMap& propertyMap = QVariantMap());
QUrlQuery query = QUrlQuery());
void setIsAgent(bool isAgent) { _isAgent = isAgent; } void setIsAgent(bool isAgent) { _isAgent = isAgent; }