From 9e65690bc063f2d1897e3ab8bafedd0f29a3b915 Mon Sep 17 00:00:00 2001 From: Christoph Bayer Date: Sun, 10 Feb 2019 13:07:09 +0100 Subject: [PATCH 1/4] Small clean-ups for storage. --- lib/parse_server_sdk.dart | 2 -- lib/src/data/parse_core_data.dart | 2 +- lib/src/objects/parse_base.dart | 12 +++--------- 3 files changed, 4 insertions(+), 12 deletions(-) diff --git a/lib/parse_server_sdk.dart b/lib/parse_server_sdk.dart index 89ba5a595..c849972ce 100644 --- a/lib/parse_server_sdk.dart +++ b/lib/parse_server_sdk.dart @@ -89,8 +89,6 @@ class Parse { sessionId: sessionId, securityContext: securityContext); - ParseCoreData().initStorage(); - _hasBeenInitialized = true; return Parse(); diff --git a/lib/src/data/parse_core_data.dart b/lib/src/data/parse_core_data.dart index c19f82cd7..068552274 100644 --- a/lib/src/data/parse_core_data.dart +++ b/lib/src/data/parse_core_data.dart @@ -57,7 +57,7 @@ class ParseCoreData { } Future getStore() async { - return storage != null ? storage : await SharedPreferences.getInstance(); + return storage ?? (storage = await SharedPreferences.getInstance()); } @override diff --git a/lib/src/objects/parse_base.dart b/lib/src/objects/parse_base.dart index 55007efc3..acc2dd6ea 100644 --- a/lib/src/objects/parse_base.dart +++ b/lib/src/objects/parse_base.dart @@ -88,7 +88,7 @@ abstract class ParseBase { /// Returns the objects variables @protected - Map getObjectData() => _objectData != null ? _objectData : Map(); + Map getObjectData() => _objectData ?? Map(); /// Saves in storage @protected @@ -149,7 +149,7 @@ abstract class ParseBase { /// Replicates Android SDK pin process and saves object to storage Future unpin() async { if (objectId != null) { - await SharedPreferences.getInstance() + await ParseCoreData().getStore() ..remove(objectId); return true; } @@ -165,13 +165,7 @@ abstract class ParseBase { var itemFromStore = (await ParseCoreData().getStore()).getString(objectId); - if (itemFromStore != null) { - var map = json.decode(itemFromStore); - - if (map != null) { - return fromJson(map); - } - } + if (itemFromStore != null) return fromJson(json.decode(itemFromStore)); } return null; } From 241e8ce8828e443350fd6d4b89a298e393d3c25f Mon Sep 17 00:00:00 2001 From: Christoph Bayer Date: Tue, 12 Feb 2019 12:59:13 +0100 Subject: [PATCH 2/4] Always send sessionId if available. --- lib/src/network/parse_http_client.dart | 12 ++++++++---- lib/src/objects/parse_user.dart | 20 ++++++-------------- 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/lib/src/network/parse_http_client.dart b/lib/src/network/parse_http_client.dart index c84d9842d..8870b60ea 100644 --- a/lib/src/network/parse_http_client.dart +++ b/lib/src/network/parse_http_client.dart @@ -17,13 +17,17 @@ class ParseHTTPClient extends BaseClient { Future send(BaseRequest request) { request.headers[keyHeaderUserAgent] = _userAgent; request.headers[keyHeaderApplicationId] = data.applicationId; + if (data.sessionId != null) + request.headers[keyHeaderSessionToken] = data.sessionId; - if (data.clientKey != null) request.headers[keyHeaderClientKey] = data.clientKey; - if (data.masterKey != null) request.headers[keyHeaderMasterKey] = data.masterKey; + if (data.clientKey != null) + request.headers[keyHeaderClientKey] = data.clientKey; + if (data.masterKey != null) + request.headers[keyHeaderMasterKey] = data.masterKey; /// If developer wants to add custom headers, extend this class and add headers needed. - if (additionalHeaders != null && additionalHeaders.length > 0){ - additionalHeaders.forEach((k,v) => request.headers[k] = v); + if (additionalHeaders != null && additionalHeaders.length > 0) { + additionalHeaders.forEach((k, v) => request.headers[k] = v); } return _client.send(request); diff --git a/lib/src/objects/parse_user.dart b/lib/src/objects/parse_user.dart index 85d233e07..bf8703aeb 100644 --- a/lib/src/objects/parse_user.dart +++ b/lib/src/objects/parse_user.dart @@ -63,20 +63,16 @@ class ParseUser extends ParseObject implements ParseCloneable { /// fromServer can be called and an updated version of the [User] object will be /// returned static Future getCurrentUserFromServer( - {String token, bool debug, ParseHTTPClient client}) async { + {bool debug, ParseHTTPClient client}) async { bool _debug = isDebugEnabled(objectLevelDebug: debug); ParseHTTPClient _client = client ?? ParseHTTPClient(ParseCoreData().securityContext); // We can't get the current user and session without a sessionId - if (token == null && ParseCoreData().sessionId == null) { + if (ParseCoreData().sessionId == null) { return null; } - if (token == null) { - token = ParseCoreData().sessionId; - } - try { Uri tempUri = Uri.parse(ParseCoreData().serverUrl); @@ -85,8 +81,7 @@ class ParseUser extends ParseObject implements ParseCloneable { host: tempUri.host, path: "${tempUri.path}$keyEndPointUserName"); - final response = - await _client.get(uri, headers: {keyHeaderSessionToken: token}); + final response = await _client.get(uri); return _handleResponse(_getEmptyUser(), response, ParseApiRQ.currentUser, _debug, _getEmptyUser().className); } on Exception catch (e) { @@ -242,9 +237,7 @@ class ParseUser extends ParseObject implements ParseCloneable { var uri = _client.data.serverUrl + "$path/$objectId"; var body = json.encode(toJson(forApiRQ: true), toEncodable: dateTimeEncoder); - final response = await _client.put(uri, - headers: {keyHeaderSessionToken: _client.data.sessionId}, - body: body); + final response = await _client.put(uri, body: body); return _handleResponse( this, response, ParseApiRQ.save, _debug, className); } on Exception catch (e) { @@ -257,9 +250,8 @@ class ParseUser extends ParseObject implements ParseCloneable { Future destroy() async { if (objectId != null) { try { - final response = await _client.delete( - _client.data.serverUrl + "$path/$objectId", - headers: {keyHeaderSessionToken: _client.data.sessionId}); + final response = + await _client.delete(_client.data.serverUrl + "$path/$objectId"); return _handleResponse( this, response, ParseApiRQ.destroy, _debug, className); } on Exception catch (e) { From 8c0d4239e49bc63c1b06e8b055384ab45dafb2c7 Mon Sep 17 00:00:00 2001 From: Christoph Bayer Date: Wed, 13 Feb 2019 21:41:46 +0100 Subject: [PATCH 3/4] Remove unused function initStorage. --- lib/src/data/parse_core_data.dart | 4 ---- 1 file changed, 4 deletions(-) diff --git a/lib/src/data/parse_core_data.dart b/lib/src/data/parse_core_data.dart index 068552274..89676cfd1 100644 --- a/lib/src/data/parse_core_data.dart +++ b/lib/src/data/parse_core_data.dart @@ -52,10 +52,6 @@ class ParseCoreData { this.sessionId = sessionId; } - void initStorage() async { - storage = await SharedPreferences.getInstance(); - } - Future getStore() async { return storage ?? (storage = await SharedPreferences.getInstance()); } From 0e8734c3db38b08433a04c15eb7cf88000eae12e Mon Sep 17 00:00:00 2001 From: Christoph Bayer Date: Sat, 16 Feb 2019 14:23:20 +0100 Subject: [PATCH 4/4] Allow given token in getCurrentUserFromServer. --- lib/src/network/parse_http_client.dart | 3 ++- lib/src/objects/parse_user.dart | 11 ++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/src/network/parse_http_client.dart b/lib/src/network/parse_http_client.dart index 8870b60ea..b4ef85064 100644 --- a/lib/src/network/parse_http_client.dart +++ b/lib/src/network/parse_http_client.dart @@ -17,7 +17,8 @@ class ParseHTTPClient extends BaseClient { Future send(BaseRequest request) { request.headers[keyHeaderUserAgent] = _userAgent; request.headers[keyHeaderApplicationId] = data.applicationId; - if (data.sessionId != null) + if ((data.sessionId != null) && + (request.headers[keyHeaderSessionToken] == null)) request.headers[keyHeaderSessionToken] = data.sessionId; if (data.clientKey != null) diff --git a/lib/src/objects/parse_user.dart b/lib/src/objects/parse_user.dart index 45063878d..11ce1e1aa 100644 --- a/lib/src/objects/parse_user.dart +++ b/lib/src/objects/parse_user.dart @@ -63,16 +63,21 @@ class ParseUser extends ParseObject implements ParseCloneable { /// fromServer can be called and an updated version of the [User] object will be /// returned static Future getCurrentUserFromServer( - {bool debug, ParseHTTPClient client}) async { + {String token, bool debug, ParseHTTPClient client}) async { bool _debug = isDebugEnabled(objectLevelDebug: debug); ParseHTTPClient _client = client ?? ParseHTTPClient(ParseCoreData().securityContext); // We can't get the current user and session without a sessionId - if (ParseCoreData().sessionId == null) { + if ((ParseCoreData().sessionId == null) && (token == null)) { return null; } + final Map headers = {}; + if (token != null) { + headers[keyHeaderSessionToken] = token; + } + try { Uri tempUri = Uri.parse(ParseCoreData().serverUrl); @@ -81,7 +86,7 @@ class ParseUser extends ParseObject implements ParseCloneable { host: tempUri.host, path: "${tempUri.path}$keyEndPointUserName"); - final response = await _client.get(uri); + final response = await _client.get(uri, headers: headers); return _handleResponse(_getEmptyUser(), response, ParseApiRQ.currentUser, _debug, _getEmptyUser().className); } on Exception catch (e) {