aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Tkachev2016-07-26 14:30:32 +0600
committerAlexander Tkachev2016-08-24 16:07:55 +0600
commita381e06fda82508d16367b9999593de45c907e90 (patch)
tree45f215a46639cf995753ac3138348d12fc6740a7
parentb3aa9f663f3ac0ac325225c1eaf8f78fb8bf9009 (diff)
downloadscummvm-rg350-a381e06fda82508d16367b9999593de45c907e90.tar.gz
scummvm-rg350-a381e06fda82508d16367b9999593de45c907e90.tar.bz2
scummvm-rg350-a381e06fda82508d16367b9999593de45c907e90.zip
CLOUD: Update GoogleDriveStorage
More JSON checks in callbacks.
-rw-r--r--backends/cloud/box/boxstorage.cpp3
-rw-r--r--backends/cloud/googledrive/googledrivestorage.cpp61
2 files changed, 48 insertions, 16 deletions
diff --git a/backends/cloud/box/boxstorage.cpp b/backends/cloud/box/boxstorage.cpp
index 6209de0b70..70864679e7 100644
--- a/backends/cloud/box/boxstorage.cpp
+++ b/backends/cloud/box/boxstorage.cpp
@@ -118,7 +118,8 @@ void BoxStorage::tokenRefreshed(BoolCallback callback, Networking::JsonResponse
Common::JSONValue *json = response.value;
if (!json) {
warning("BoxStorage: got NULL instead of JSON");
- if (callback) (*callback)(BoolResponse(nullptr, false));
+ if (callback)
+ (*callback)(BoolResponse(nullptr, false));
delete callback;
return;
}
diff --git a/backends/cloud/googledrive/googledrivestorage.cpp b/backends/cloud/googledrive/googledrivestorage.cpp
index 789dfaf53a..eb04e7e439 100644
--- a/backends/cloud/googledrive/googledrivestorage.cpp
+++ b/backends/cloud/googledrive/googledrivestorage.cpp
@@ -117,18 +117,27 @@ void GoogleDriveStorage::tokenRefreshed(BoolCallback callback, Networking::JsonR
warning("GoogleDriveStorage: got NULL instead of JSON");
if (callback)
(*callback)(BoolResponse(nullptr, false));
+ delete callback;
+ return;
+ }
+
+ if (!Networking::CurlJsonRequest::jsonIsObject(json, "GoogleDriveStorage")) {
+ if (callback)
+ (*callback)(BoolResponse(nullptr, false));
+ delete json;
+ delete callback;
return;
}
Common::JSONObject result = json->asObject();
- if (!result.contains("access_token")) {
+ if (!Networking::CurlJsonRequest::jsonContainsString(result, "access_token", "GoogleDriveStorage")) {
warning("GoogleDriveStorage: bad response, no token passed");
debug(9, "%s", json->stringify().c_str());
if (callback)
(*callback)(BoolResponse(nullptr, false));
} else {
_token = result.getVal("access_token")->asString();
- if (!result.contains("refresh_token"))
+ if (!Networking::CurlJsonRequest::jsonContainsString(result, "refresh_token", "GoogleDriveStorage"))
warning("GoogleDriveStorage: no refresh_token passed");
else
_refreshToken = result.getVal("refresh_token")->asString();
@@ -137,6 +146,7 @@ void GoogleDriveStorage::tokenRefreshed(BoolCallback callback, Networking::JsonR
(*callback)(BoolResponse(nullptr, true));
}
delete json;
+ delete callback;
}
void GoogleDriveStorage::codeFlowComplete(BoolResponse response) {
@@ -169,7 +179,13 @@ Common::String GoogleDriveStorage::name() const {
void GoogleDriveStorage::infoInnerCallback(StorageInfoCallback outerCallback, Networking::JsonResponse response) {
Common::JSONValue *json = response.value;
if (!json) {
- warning("GoogleDriveStorage: NULL passed instead of JSON");
+ warning("GoogleDriveStorage::infoInnerCallback: NULL passed instead of JSON");
+ delete outerCallback;
+ return;
+ }
+
+ if (!Networking::CurlJsonRequest::jsonIsObject(json, "GoogleDriveStorage::infoInnerCallback")) {
+ delete json;
delete outerCallback;
return;
}
@@ -179,22 +195,33 @@ void GoogleDriveStorage::infoInnerCallback(StorageInfoCallback outerCallback, Ne
Common::String uid, name, email;
uint64 quotaUsed = 0, quotaAllocated = 0;
- if (info.contains("user") && info.getVal("user")->isObject()) {
+ if (Networking::CurlJsonRequest::jsonContainsAttribute(info, "user", "GoogleDriveStorage::infoInnerCallback") &&
+ Networking::CurlJsonRequest::jsonIsObject(info.getVal("user"), "GoogleDriveStorage::infoInnerCallback")) {
//"me":true, "kind":"drive#user","photoLink": "",
//"displayName":"Alexander Tkachev","emailAddress":"alexander@tkachov.ru","permissionId":""
Common::JSONObject user = info.getVal("user")->asObject();
- uid = user.getVal("permissionId")->asString(); //not sure it's user's id, but who cares anyway?
- name = user.getVal("displayName")->asString();
- email = user.getVal("emailAddress")->asString();
+ if (Networking::CurlJsonRequest::jsonContainsString(user, "permissionId", "GoogleDriveStorage::infoInnerCallback"))
+ uid = user.getVal("permissionId")->asString(); //not sure it's user's id, but who cares anyway?
+ if (Networking::CurlJsonRequest::jsonContainsString(user, "displayName", "GoogleDriveStorage::infoInnerCallback"))
+ name = user.getVal("displayName")->asString();
+ if (Networking::CurlJsonRequest::jsonContainsString(user, "emailAddress", "GoogleDriveStorage::infoInnerCallback"))
+ email = user.getVal("emailAddress")->asString();
}
- if (info.contains("storageQuota") && info.getVal("storageQuota")->isObject()) {
+ if (Networking::CurlJsonRequest::jsonContainsAttribute(info, "storageQuota", "GoogleDriveStorage::infoInnerCallback") &&
+ Networking::CurlJsonRequest::jsonIsObject(info.getVal("storageQuota"), "GoogleDriveStorage::infoInnerCallback")) {
//"usageInDrive":"6332462","limit":"18253611008","usage":"6332462","usageInDriveTrash":"0"
Common::JSONObject storageQuota = info.getVal("storageQuota")->asObject();
- Common::String usage = storageQuota.getVal("usage")->asString();
- Common::String limit = storageQuota.getVal("limit")->asString();
- quotaUsed = usage.asUint64();
- quotaAllocated = limit.asUint64();
+
+ if (Networking::CurlJsonRequest::jsonContainsString(storageQuota, "usage", "GoogleDriveStorage::infoInnerCallback")) {
+ Common::String usage = storageQuota.getVal("usage")->asString();
+ quotaUsed = usage.asUint64();
+ }
+
+ if (Networking::CurlJsonRequest::jsonContainsString(storageQuota, "limit", "GoogleDriveStorage::infoInnerCallback")) {
+ Common::String limit = storageQuota.getVal("limit")->asString();
+ quotaAllocated = limit.asUint64();
+ }
}
CloudMan.setStorageUsername(kStorageGoogleDriveId, email);
@@ -210,14 +237,18 @@ void GoogleDriveStorage::infoInnerCallback(StorageInfoCallback outerCallback, Ne
void GoogleDriveStorage::createDirectoryInnerCallback(BoolCallback outerCallback, Networking::JsonResponse response) {
Common::JSONValue *json = response.value;
if (!json) {
- warning("GoogleDriveStorage: NULL passed instead of JSON");
+ warning("GoogleDriveStorage::createDirectoryInnerCallback: NULL passed instead of JSON");
delete outerCallback;
return;
}
if (outerCallback) {
- Common::JSONObject info = json->asObject();
- (*outerCallback)(BoolResponse(nullptr, info.contains("id")));
+ if (Networking::CurlJsonRequest::jsonIsObject(json, "GoogleDriveStorage::createDirectoryInnerCallback")) {
+ Common::JSONObject info = json->asObject();
+ (*outerCallback)(BoolResponse(nullptr, info.contains("id")));
+ } else {
+ (*outerCallback)(BoolResponse(nullptr, false));
+ }
delete outerCallback;
}