aboutsummaryrefslogtreecommitdiff
path: root/backends/cloud
diff options
context:
space:
mode:
authorAlexander Tkachev2019-07-16 14:09:38 +0700
committerMatan Bareket2019-07-30 14:51:41 -0400
commite8669f693c6adbb33f515d9a4ce9d1079756e2e8 (patch)
treea11d17b6706c9c21ea78ae92ff113f860f7d97e9 /backends/cloud
parent60504dce7539863a207610fd636236c7035ade3e (diff)
downloadscummvm-rg350-e8669f693c6adbb33f515d9a4ce9d1079756e2e8.tar.gz
scummvm-rg350-e8669f693c6adbb33f515d9a4ce9d1079756e2e8.tar.bz2
scummvm-rg350-e8669f693c6adbb33f515d9a4ce9d1079756e2e8.zip
CLOUD: Update BaseStorage to expect no refresh_token
While refreshing access_token, some cloud providers also pass a new refresh_token. Google Drive does not, and accepts the same refresh_token next time. These changes allow this to happen.
Diffstat (limited to 'backends/cloud')
-rw-r--r--backends/cloud/basestorage.cpp6
-rw-r--r--backends/cloud/basestorage.h5
-rw-r--r--backends/cloud/box/boxstorage.cpp2
-rw-r--r--backends/cloud/box/boxstorage.h2
-rw-r--r--backends/cloud/dropbox/dropboxstorage.cpp2
-rw-r--r--backends/cloud/dropbox/dropboxstorage.h2
-rw-r--r--backends/cloud/googledrive/googledrivestorage.cpp2
-rw-r--r--backends/cloud/googledrive/googledrivestorage.h2
-rw-r--r--backends/cloud/onedrive/onedrivestorage.cpp2
-rw-r--r--backends/cloud/onedrive/onedrivestorage.h2
10 files changed, 25 insertions, 2 deletions
diff --git a/backends/cloud/basestorage.cpp b/backends/cloud/basestorage.cpp
index 035098fb47..e856bbe3d7 100644
--- a/backends/cloud/basestorage.cpp
+++ b/backends/cloud/basestorage.cpp
@@ -101,7 +101,7 @@ void BaseStorage::codeFlowComplete(Networking::JsonResponse response) {
return;
}
- debug(9, "%s", json->stringify(true).c_str()); // TODO: remove before commit
+ debug(9, "%s", json->stringify(true).c_str()); // TODO: remove when done testing against cloud.scummvm.org
_token = oauth.getVal("access_token")->asString();
if (requiresRefreshToken) {
_refreshToken = oauth.getVal("refresh_token")->asString();
@@ -188,7 +188,7 @@ void BaseStorage::tokenRefreshed(BoolCallback callback, Networking::JsonResponse
}
Common::JSONObject oauth = result.getVal("oauth")->asObject();
- bool requiresRefreshToken = needsRefreshToken(); // TODO: it seems Google Drive might not send new refresh token, and still accept old one
+ bool requiresRefreshToken = !canReuseRefreshToken();
if (!Networking::CurlJsonRequest::jsonContainsString(oauth, "access_token", "BaseStorage::tokenRefreshed") ||
!Networking::CurlJsonRequest::jsonContainsString(oauth, "refresh_token", "BaseStorage::tokenRefreshed", !requiresRefreshToken)) {
warning("BaseStorage: bad response, no 'access_token' or 'refresh_token' attribute passed");
@@ -200,6 +200,8 @@ void BaseStorage::tokenRefreshed(BoolCallback callback, Networking::JsonResponse
return;
}
+ debug(9, "%s", json->stringify(true).c_str()); // TODO: remove when done testing against cloud.scummvm.org
+
_token = oauth.getVal("access_token")->asString();
if (requiresRefreshToken) {
_refreshToken = oauth.getVal("refresh_token")->asString();
diff --git a/backends/cloud/basestorage.h b/backends/cloud/basestorage.h
index 4b3b497d0d..243e7f4bcc 100644
--- a/backends/cloud/basestorage.h
+++ b/backends/cloud/basestorage.h
@@ -69,6 +69,11 @@ protected:
*/
virtual bool needsRefreshToken() = 0;
+ /**
+ * Return whether to expect new refresh_token on refresh.
+ */
+ virtual bool canReuseRefreshToken() = 0;
+
private:
void tokenRefreshed(BoolCallback callback, Networking::JsonResponse response);
diff --git a/backends/cloud/box/boxstorage.cpp b/backends/cloud/box/boxstorage.cpp
index 42e902902d..f76fa3ac23 100644
--- a/backends/cloud/box/boxstorage.cpp
+++ b/backends/cloud/box/boxstorage.cpp
@@ -57,6 +57,8 @@ uint32 BoxStorage::storageIndex() { return kStorageBoxId; }
bool BoxStorage::needsRefreshToken() { return true; }
+bool BoxStorage::canReuseRefreshToken() { return false; }
+
void BoxStorage::saveConfig(Common::String keyPrefix) {
ConfMan.set(keyPrefix + "access_token", _token, ConfMan.kCloudDomain);
ConfMan.set(keyPrefix + "refresh_token", _refreshToken, ConfMan.kCloudDomain);
diff --git a/backends/cloud/box/boxstorage.h b/backends/cloud/box/boxstorage.h
index a6ceb522ad..a8fd32c404 100644
--- a/backends/cloud/box/boxstorage.h
+++ b/backends/cloud/box/boxstorage.h
@@ -51,6 +51,8 @@ protected:
virtual bool needsRefreshToken();
+ virtual bool canReuseRefreshToken();
+
public:
/** This constructor uses OAuth code flow to get tokens. */
BoxStorage(Common::String code);
diff --git a/backends/cloud/dropbox/dropboxstorage.cpp b/backends/cloud/dropbox/dropboxstorage.cpp
index 8941dff94a..c12dec9968 100644
--- a/backends/cloud/dropbox/dropboxstorage.cpp
+++ b/backends/cloud/dropbox/dropboxstorage.cpp
@@ -54,6 +54,8 @@ uint32 DropboxStorage::storageIndex() { return kStorageDropboxId; }
bool DropboxStorage::needsRefreshToken() { return false; }
+bool DropboxStorage::canReuseRefreshToken() { return false; }
+
void DropboxStorage::saveConfig(Common::String keyPrefix) {
ConfMan.set(keyPrefix + "access_token", _token, ConfMan.kCloudDomain);
}
diff --git a/backends/cloud/dropbox/dropboxstorage.h b/backends/cloud/dropbox/dropboxstorage.h
index bd9f284f72..bca83d2b5a 100644
--- a/backends/cloud/dropbox/dropboxstorage.h
+++ b/backends/cloud/dropbox/dropboxstorage.h
@@ -47,6 +47,8 @@ protected:
virtual bool needsRefreshToken();
+ virtual bool canReuseRefreshToken();
+
public:
/** This constructor uses OAuth code flow to get tokens. */
DropboxStorage(Common::String code);
diff --git a/backends/cloud/googledrive/googledrivestorage.cpp b/backends/cloud/googledrive/googledrivestorage.cpp
index be81629cef..67d157748a 100644
--- a/backends/cloud/googledrive/googledrivestorage.cpp
+++ b/backends/cloud/googledrive/googledrivestorage.cpp
@@ -58,6 +58,8 @@ uint32 GoogleDriveStorage::storageIndex() { return kStorageGoogleDriveId; }
bool GoogleDriveStorage::needsRefreshToken() { return true; }
+bool GoogleDriveStorage::canReuseRefreshToken() { return true; }
+
void GoogleDriveStorage::saveConfig(Common::String keyPrefix) {
ConfMan.set(keyPrefix + "access_token", _token, ConfMan.kCloudDomain);
ConfMan.set(keyPrefix + "refresh_token", _refreshToken, ConfMan.kCloudDomain);
diff --git a/backends/cloud/googledrive/googledrivestorage.h b/backends/cloud/googledrive/googledrivestorage.h
index 730e8e20c3..21e027c4a7 100644
--- a/backends/cloud/googledrive/googledrivestorage.h
+++ b/backends/cloud/googledrive/googledrivestorage.h
@@ -54,6 +54,8 @@ protected:
virtual bool needsRefreshToken();
+ virtual bool canReuseRefreshToken();
+
public:
/** This constructor uses OAuth code flow to get tokens. */
GoogleDriveStorage(Common::String code);
diff --git a/backends/cloud/onedrive/onedrivestorage.cpp b/backends/cloud/onedrive/onedrivestorage.cpp
index 8a2a8a5dae..fbaa675085 100644
--- a/backends/cloud/onedrive/onedrivestorage.cpp
+++ b/backends/cloud/onedrive/onedrivestorage.cpp
@@ -57,6 +57,8 @@ uint32 OneDriveStorage::storageIndex() { return kStorageOneDriveId; }
bool OneDriveStorage::needsRefreshToken() { return true; }
+bool OneDriveStorage::canReuseRefreshToken() { return false; }
+
void OneDriveStorage::saveConfig(Common::String keyPrefix) {
ConfMan.set(keyPrefix + "access_token", _token, ConfMan.kCloudDomain);
ConfMan.set(keyPrefix + "refresh_token", _refreshToken, ConfMan.kCloudDomain);
diff --git a/backends/cloud/onedrive/onedrivestorage.h b/backends/cloud/onedrive/onedrivestorage.h
index 5059e0d5b0..4b18929d73 100644
--- a/backends/cloud/onedrive/onedrivestorage.h
+++ b/backends/cloud/onedrive/onedrivestorage.h
@@ -51,6 +51,8 @@ protected:
virtual bool needsRefreshToken();
+ virtual bool canReuseRefreshToken();
+
public:
/** This constructor uses OAuth code flow to get tokens. */
OneDriveStorage(Common::String code);