From b2396de494d61b827fa14ba913d209fe9c64a46b Mon Sep 17 00:00:00 2001 From: Christoph Bayer Date: Thu, 7 Feb 2019 08:44:14 +0100 Subject: [PATCH 1/7] Add support for using a custom HttpClient. --- lib/parse.dart | 16 ++++++++++++---- lib/src/data/parse_core_data.dart | 10 +++++++++- lib/src/network/browser_clinet.dart | 9 +++++++++ lib/src/network/client_stub.dart | 9 +++++++++ lib/src/network/io_client.dart | 12 ++++++++++++ lib/src/network/parse_http_client.dart | 4 ++-- lib/src/objects/parse_config.dart | 8 +++++--- lib/src/objects/parse_file.dart | 7 +++++-- lib/src/objects/parse_geo_point.dart | 12 +++++++++--- lib/src/objects/parse_object.dart | 4 ++-- lib/src/objects/parse_user.dart | 8 +++++--- 11 files changed, 79 insertions(+), 20 deletions(-) create mode 100644 lib/src/network/browser_clinet.dart create mode 100644 lib/src/network/client_stub.dart create mode 100644 lib/src/network/io_client.dart diff --git a/lib/parse.dart b/lib/parse.dart index da52667f2..d7c61d7ed 100644 --- a/lib/parse.dart +++ b/lib/parse.dart @@ -11,6 +11,10 @@ import 'package:path/path.dart' as path; import 'package:shared_preferences/shared_preferences.dart'; import 'package:web_socket_channel/io.dart'; +import 'src/network/client_stub.dart' + if (dart.library.html) 'src/network/browser_client.dart' + if (dart.library.io) 'src/network/io_client.dart'; + part 'src/base/parse_constants.dart'; part 'src/data/parse_core_data.dart'; @@ -55,7 +59,7 @@ part 'src/utils/parse_utils.dart'; class Parse { ParseCoreData data; - final ParseHTTPClient client = new ParseHTTPClient(); + ParseHTTPClient _client; bool _hasBeenInitialised = false; /// To initialise Parse Server in your application @@ -76,17 +80,21 @@ class Parse { String liveQueryUrl, String clientKey, String masterKey, - String sessionId}) { + String sessionId, + HttpClient httpClient}) { ParseCoreData.init(appId, serverUrl, debug: debug, appName: appName, liveQueryUrl: liveQueryUrl, masterKey: masterKey, clientKey: clientKey, - sessionId: sessionId); + sessionId: sessionId, + httpClient: httpClient); ParseCoreData().initStorage(); + _client = ParseHTTPClient(httpClient); + _hasBeenInitialised = true; return Parse(); @@ -98,7 +106,7 @@ class Parse { ParseResponse parseResponse; try { - var response = await ParseHTTPClient() + var response = await ParseHTTPClient(ParseCoreData().httpClient) .get("${ParseCoreData().serverUrl}$keyEndPointHealth"); parseResponse = ParseResponse.handleResponse(this, response, returnAsResult: true); diff --git a/lib/src/data/parse_core_data.dart b/lib/src/data/parse_core_data.dart index 7ace885a3..2ef34f309 100644 --- a/lib/src/data/parse_core_data.dart +++ b/lib/src/data/parse_core_data.dart @@ -11,7 +11,13 @@ class ParseCoreData { /// This class should not be user unless switching servers during the app, /// which is odd. Should only be user by Parse.init static void init(appId, serverUrl, - {debug, appName, liveQueryUrl, masterKey, clientKey, sessionId}) { + {debug, + appName, + liveQueryUrl, + masterKey, + clientKey, + sessionId, + httpClient}) { _instance = ParseCoreData._init(appId, serverUrl); if (debug != null) _instance.debug = debug; @@ -20,6 +26,7 @@ class ParseCoreData { if (clientKey != null) _instance.clientKey = clientKey; if (masterKey != null) _instance.masterKey = masterKey; if (sessionId != null) _instance.sessionId = sessionId; + if (httpClient != null) _instance.httpClient = httpClient; } String appName; @@ -29,6 +36,7 @@ class ParseCoreData { String masterKey; String clientKey; String sessionId; + HttpClient httpClient; bool debug; SharedPreferences storage; diff --git a/lib/src/network/browser_clinet.dart b/lib/src/network/browser_clinet.dart new file mode 100644 index 000000000..d5384cead --- /dev/null +++ b/lib/src/network/browser_clinet.dart @@ -0,0 +1,9 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:http/http.dart'; +import 'package:http/browser_client.dart'; + +/// Used from conditional imports, matches the definition in `client_stub.dart`. +BaseClient createClient(dynamic httpClient) => BrowserClient(); diff --git a/lib/src/network/client_stub.dart b/lib/src/network/client_stub.dart new file mode 100644 index 000000000..89592c2c3 --- /dev/null +++ b/lib/src/network/client_stub.dart @@ -0,0 +1,9 @@ +// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:http/http.dart'; + +/// Implemented in `browser_client.dart` and `io_client.dart`. +BaseClient createClient(dynamic httpClient) => throw UnsupportedError( + 'Cannot create a client without dart:html or dart:io.'); diff --git a/lib/src/network/io_client.dart b/lib/src/network/io_client.dart new file mode 100644 index 000000000..18a6c0d9e --- /dev/null +++ b/lib/src/network/io_client.dart @@ -0,0 +1,12 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:io'; + +import 'package:http/http.dart'; +import 'package:http/io_client.dart'; + +/// Used from conditional imports, matches the definition in `client_stub.dart`. +BaseClient createClient(HttpClient httpClient) => + httpClient != null ? IOClient(httpClient) : IOClient(); diff --git a/lib/src/network/parse_http_client.dart b/lib/src/network/parse_http_client.dart index 6101d09f6..bf46d141e 100644 --- a/lib/src/network/parse_http_client.dart +++ b/lib/src/network/parse_http_client.dart @@ -2,12 +2,12 @@ part of flutter_parse_sdk; /// Creates a custom version of HTTP Client that has Parse Data Preset class ParseHTTPClient extends BaseClient { - final Client _client = Client(); + final Client _client; final String _userAgent = "$keyLibraryName $keySdkVersion"; ParseCoreData data = ParseCoreData(); Map additionalHeaders; - ParseHTTPClient(); + ParseHTTPClient([HttpClient httpClient]) : _client = createClient(httpClient); /// Overrides the call method for HTTP Client and adds custom headers @override diff --git a/lib/src/objects/parse_config.dart b/lib/src/objects/parse_config.dart index 0d2f1f889..3dfe864c1 100644 --- a/lib/src/objects/parse_config.dart +++ b/lib/src/objects/parse_config.dart @@ -1,7 +1,7 @@ part of flutter_parse_sdk; class ParseConfig extends ParseObject { - var _client = ParseHTTPClient(); + var _client = ParseHTTPClient(ParseCoreData().httpClient); /// Creates an instance of ParseConfig so that you can grab all configs from the server ParseConfig({bool debug, ParseHTTPClient client}) : super('config') { @@ -14,7 +14,8 @@ class ParseConfig extends ParseObject { try { var uri = "${ParseCoreData().serverUrl}/config"; var result = await _client.get(uri); - return handleResponse(this, result, ParseApiRQ.getConfigs, _debug, className); + return handleResponse( + this, result, ParseApiRQ.getConfigs, _debug, className); } on Exception catch (e) { return handleException(e, ParseApiRQ.getConfigs, _debug, className); } @@ -26,7 +27,8 @@ class ParseConfig extends ParseObject { var uri = "${ParseCoreData().serverUrl}/config"; var body = "{\"params\":{\"$key\": \"${parseEncode(value)}\"}}"; var result = await _client.put(uri, body: body); - return handleResponse(this, result, ParseApiRQ.addConfig, _debug, className); + return handleResponse( + this, result, ParseApiRQ.addConfig, _debug, className); } on Exception catch (e) { return handleException(e, ParseApiRQ.addConfig, _debug, className); } diff --git a/lib/src/objects/parse_file.dart b/lib/src/objects/parse_file.dart index ee7db528d..ce8c32302 100644 --- a/lib/src/objects/parse_file.dart +++ b/lib/src/objects/parse_file.dart @@ -25,7 +25,9 @@ class ParseFile extends ParseObject { /// /// {https://docs.parseplatform.org/rest/guide/#files/} ParseFile(this._file, {bool debug, ParseHTTPClient client}) : super(keyFile) { - client == null ? _client = ParseHTTPClient() : _client = client; + client == null + ? _client = ParseHTTPClient(ParseCoreData().httpClient) + : _client = client; _debug = isDebugEnabled(objectLevelDebug: debug); this._fileName = path.basename(_file.path); @@ -46,6 +48,7 @@ class ParseFile extends ParseObject { var uri = _client.data.serverUrl + "$_path"; final body = await _file.readAsBytes(); final response = await _client.post(uri, headers: headers, body: body); - return handleResponse(this, response, ParseApiRQ.upload, _debug, className); + return handleResponse( + this, response, ParseApiRQ.upload, _debug, className); } } diff --git a/lib/src/objects/parse_geo_point.dart b/lib/src/objects/parse_geo_point.dart index 94f0f092c..f21234ad0 100644 --- a/lib/src/objects/parse_geo_point.dart +++ b/lib/src/objects/parse_geo_point.dart @@ -1,16 +1,22 @@ part of flutter_parse_sdk; class ParseGeoPoint extends ParseObject { - double _latitude; double _longitude; /// Creates a Parse Object of type GeoPoint - ParseGeoPoint({double latitude = 0.0, double longitude = 0.0, bool debug, ParseHTTPClient client}): super (keyGeoPoint) { + ParseGeoPoint( + {double latitude = 0.0, + double longitude = 0.0, + bool debug, + ParseHTTPClient client}) + : super(keyGeoPoint) { _latitude = latitude; _longitude = longitude; - client == null ? _client = ParseHTTPClient() : _client = client; + client == null + ? _client = ParseHTTPClient(ParseCoreData().httpClient) + : _client = client; _debug = isDebugEnabled(objectLevelDebug: debug); } diff --git a/lib/src/objects/parse_object.dart b/lib/src/objects/parse_object.dart index b9d2bed30..fd46816cb 100644 --- a/lib/src/objects/parse_object.dart +++ b/lib/src/objects/parse_object.dart @@ -18,7 +18,7 @@ class ParseObject extends ParseBase implements ParseCloneable { ParseObject(String className, {bool debug: false}) : super() { setClassName(className); _path = "$keyEndPointClasses$className"; - setClient(ParseHTTPClient()); + setClient(ParseHTTPClient(ParseCoreData().httpClient)); setDebug(isDebugEnabled(objectLevelDebug: debug)); } @@ -82,7 +82,7 @@ class ParseObject extends ParseBase implements ParseCloneable { } } - /// Removes an element from an Arary + /// Removes an element from an Array Future remove(String key, dynamic values) async { if (key != null) { return await _sortArrays(ParseApiRQ.remove, "Remove", key, [values]); diff --git a/lib/src/objects/parse_user.dart b/lib/src/objects/parse_user.dart index 8f80c509f..f68c1aa5b 100644 --- a/lib/src/objects/parse_user.dart +++ b/lib/src/objects/parse_user.dart @@ -43,7 +43,9 @@ class ParseUser extends ParseObject implements ParseCloneable { ParseUser(String username, String password, String emailAddress, {bool debug, ParseHTTPClient client}) : super(keyClassUser) { - client == null ? _client = ParseHTTPClient() : _client = client; + client == null + ? _client = ParseHTTPClient(ParseCoreData().httpClient) + : _client = client; _debug = isDebugEnabled(objectLevelDebug: debug); this.username = username; @@ -83,7 +85,7 @@ class ParseUser extends ParseObject implements ParseCloneable { host: tempUri.host, path: "${tempUri.path}$keyEndPointUserName"); - final response = await ParseHTTPClient() + final response = await ParseHTTPClient(ParseCoreData().httpClient) .get(uri, headers: {keyHeaderSessionToken: token}); return _handleResponse(_getEmptyUser(), response, ParseApiRQ.currentUser, _debug, _getEmptyUser().className); @@ -242,7 +244,7 @@ class ParseUser extends ParseObject implements ParseCloneable { try { final response = - await ParseHTTPClient().get("${ParseCoreData().serverUrl}/$path"); + await ParseHTTPClient(ParseCoreData().httpClient).get("${ParseCoreData().serverUrl}/$path"); ParseResponse parseResponse = ParseResponse.handleResponse(emptyUser, response); From bfdd6155f235765f65144007e07a584810ec4e3a Mon Sep 17 00:00:00 2001 From: Christoph Bayer Date: Thu, 7 Feb 2019 11:56:38 +0100 Subject: [PATCH 2/7] Do not reuse HttpClient, store SecurityContext instead. --- lib/parse.dart | 8 ++++---- lib/src/data/parse_core_data.dart | 6 +++--- .../{browser_clinet.dart => browser_client.dart} | 2 +- lib/src/network/client_stub.dart | 2 +- lib/src/network/io_client.dart | 10 ++++++++-- lib/src/network/parse_http_client.dart | 2 +- lib/src/objects/parse_config.dart | 2 +- lib/src/objects/parse_file.dart | 2 +- lib/src/objects/parse_geo_point.dart | 2 +- lib/src/objects/parse_object.dart | 2 +- lib/src/objects/parse_user.dart | 8 ++++---- 11 files changed, 26 insertions(+), 20 deletions(-) rename lib/src/network/{browser_clinet.dart => browser_client.dart} (84%) diff --git a/lib/parse.dart b/lib/parse.dart index d7c61d7ed..435b250e3 100644 --- a/lib/parse.dart +++ b/lib/parse.dart @@ -81,7 +81,7 @@ class Parse { String clientKey, String masterKey, String sessionId, - HttpClient httpClient}) { + dynamic securityContext}) { ParseCoreData.init(appId, serverUrl, debug: debug, appName: appName, @@ -89,11 +89,11 @@ class Parse { masterKey: masterKey, clientKey: clientKey, sessionId: sessionId, - httpClient: httpClient); + securityContext: securityContext); ParseCoreData().initStorage(); - _client = ParseHTTPClient(httpClient); + _client = ParseHTTPClient(securityContext); _hasBeenInitialised = true; @@ -106,7 +106,7 @@ class Parse { ParseResponse parseResponse; try { - var response = await ParseHTTPClient(ParseCoreData().httpClient) + var response = await ParseHTTPClient(ParseCoreData().securityContext) .get("${ParseCoreData().serverUrl}$keyEndPointHealth"); parseResponse = ParseResponse.handleResponse(this, response, returnAsResult: true); diff --git a/lib/src/data/parse_core_data.dart b/lib/src/data/parse_core_data.dart index 2ef34f309..d4b5eb874 100644 --- a/lib/src/data/parse_core_data.dart +++ b/lib/src/data/parse_core_data.dart @@ -17,7 +17,7 @@ class ParseCoreData { masterKey, clientKey, sessionId, - httpClient}) { + securityContext}) { _instance = ParseCoreData._init(appId, serverUrl); if (debug != null) _instance.debug = debug; @@ -26,7 +26,7 @@ class ParseCoreData { if (clientKey != null) _instance.clientKey = clientKey; if (masterKey != null) _instance.masterKey = masterKey; if (sessionId != null) _instance.sessionId = sessionId; - if (httpClient != null) _instance.httpClient = httpClient; + if (securityContext != null) _instance.securityContext = securityContext; } String appName; @@ -36,7 +36,7 @@ class ParseCoreData { String masterKey; String clientKey; String sessionId; - HttpClient httpClient; + dynamic securityContext; bool debug; SharedPreferences storage; diff --git a/lib/src/network/browser_clinet.dart b/lib/src/network/browser_client.dart similarity index 84% rename from lib/src/network/browser_clinet.dart rename to lib/src/network/browser_client.dart index d5384cead..0ad73088a 100644 --- a/lib/src/network/browser_clinet.dart +++ b/lib/src/network/browser_client.dart @@ -6,4 +6,4 @@ import 'package:http/http.dart'; import 'package:http/browser_client.dart'; /// Used from conditional imports, matches the definition in `client_stub.dart`. -BaseClient createClient(dynamic httpClient) => BrowserClient(); +BaseClient createClient(dynamic securityContext) => BrowserClient(); diff --git a/lib/src/network/client_stub.dart b/lib/src/network/client_stub.dart index 89592c2c3..60df7db91 100644 --- a/lib/src/network/client_stub.dart +++ b/lib/src/network/client_stub.dart @@ -5,5 +5,5 @@ import 'package:http/http.dart'; /// Implemented in `browser_client.dart` and `io_client.dart`. -BaseClient createClient(dynamic httpClient) => throw UnsupportedError( +BaseClient createClient(dynamic securityContext) => throw UnsupportedError( 'Cannot create a client without dart:html or dart:io.'); diff --git a/lib/src/network/io_client.dart b/lib/src/network/io_client.dart index 18a6c0d9e..be49f98da 100644 --- a/lib/src/network/io_client.dart +++ b/lib/src/network/io_client.dart @@ -8,5 +8,11 @@ import 'package:http/http.dart'; import 'package:http/io_client.dart'; /// Used from conditional imports, matches the definition in `client_stub.dart`. -BaseClient createClient(HttpClient httpClient) => - httpClient != null ? IOClient(httpClient) : IOClient(); +BaseClient createClient(SecurityContext securityContext) { + if (securityContext != null) { + HttpClient httpClient = HttpClient(context: securityContext); + return IOClient(httpClient); + } else { + return IOClient(); + } +} diff --git a/lib/src/network/parse_http_client.dart b/lib/src/network/parse_http_client.dart index bf46d141e..b59e9f63e 100644 --- a/lib/src/network/parse_http_client.dart +++ b/lib/src/network/parse_http_client.dart @@ -7,7 +7,7 @@ class ParseHTTPClient extends BaseClient { ParseCoreData data = ParseCoreData(); Map additionalHeaders; - ParseHTTPClient([HttpClient httpClient]) : _client = createClient(httpClient); + ParseHTTPClient([dynamic securityContext]) : _client = createClient(securityContext); /// Overrides the call method for HTTP Client and adds custom headers @override diff --git a/lib/src/objects/parse_config.dart b/lib/src/objects/parse_config.dart index 3dfe864c1..d2fbc4d67 100644 --- a/lib/src/objects/parse_config.dart +++ b/lib/src/objects/parse_config.dart @@ -1,7 +1,7 @@ part of flutter_parse_sdk; class ParseConfig extends ParseObject { - var _client = ParseHTTPClient(ParseCoreData().httpClient); + var _client = ParseHTTPClient(ParseCoreData().securityContext); /// Creates an instance of ParseConfig so that you can grab all configs from the server ParseConfig({bool debug, ParseHTTPClient client}) : super('config') { diff --git a/lib/src/objects/parse_file.dart b/lib/src/objects/parse_file.dart index ce8c32302..0ffe4dfc2 100644 --- a/lib/src/objects/parse_file.dart +++ b/lib/src/objects/parse_file.dart @@ -26,7 +26,7 @@ class ParseFile extends ParseObject { /// {https://docs.parseplatform.org/rest/guide/#files/} ParseFile(this._file, {bool debug, ParseHTTPClient client}) : super(keyFile) { client == null - ? _client = ParseHTTPClient(ParseCoreData().httpClient) + ? _client = ParseHTTPClient(ParseCoreData().securityContext) : _client = client; _debug = isDebugEnabled(objectLevelDebug: debug); diff --git a/lib/src/objects/parse_geo_point.dart b/lib/src/objects/parse_geo_point.dart index f21234ad0..f0ff5512b 100644 --- a/lib/src/objects/parse_geo_point.dart +++ b/lib/src/objects/parse_geo_point.dart @@ -15,7 +15,7 @@ class ParseGeoPoint extends ParseObject { _longitude = longitude; client == null - ? _client = ParseHTTPClient(ParseCoreData().httpClient) + ? _client = ParseHTTPClient(ParseCoreData().securityContext) : _client = client; _debug = isDebugEnabled(objectLevelDebug: debug); } diff --git a/lib/src/objects/parse_object.dart b/lib/src/objects/parse_object.dart index fd46816cb..9f698af3e 100644 --- a/lib/src/objects/parse_object.dart +++ b/lib/src/objects/parse_object.dart @@ -18,7 +18,7 @@ class ParseObject extends ParseBase implements ParseCloneable { ParseObject(String className, {bool debug: false}) : super() { setClassName(className); _path = "$keyEndPointClasses$className"; - setClient(ParseHTTPClient(ParseCoreData().httpClient)); + setClient(ParseHTTPClient(ParseCoreData().securityContext)); setDebug(isDebugEnabled(objectLevelDebug: debug)); } diff --git a/lib/src/objects/parse_user.dart b/lib/src/objects/parse_user.dart index f68c1aa5b..1286725f5 100644 --- a/lib/src/objects/parse_user.dart +++ b/lib/src/objects/parse_user.dart @@ -44,7 +44,7 @@ class ParseUser extends ParseObject implements ParseCloneable { {bool debug, ParseHTTPClient client}) : super(keyClassUser) { client == null - ? _client = ParseHTTPClient(ParseCoreData().httpClient) + ? _client = ParseHTTPClient(ParseCoreData().securityContext) : _client = client; _debug = isDebugEnabled(objectLevelDebug: debug); @@ -85,7 +85,7 @@ class ParseUser extends ParseObject implements ParseCloneable { host: tempUri.host, path: "${tempUri.path}$keyEndPointUserName"); - final response = await ParseHTTPClient(ParseCoreData().httpClient) + final response = await ParseHTTPClient(ParseCoreData().securityContext) .get(uri, headers: {keyHeaderSessionToken: token}); return _handleResponse(_getEmptyUser(), response, ParseApiRQ.currentUser, _debug, _getEmptyUser().className); @@ -243,8 +243,8 @@ class ParseUser extends ParseObject implements ParseCloneable { var emptyUser = ParseUser(null, null, null); try { - final response = - await ParseHTTPClient(ParseCoreData().httpClient).get("${ParseCoreData().serverUrl}/$path"); + final response = await ParseHTTPClient(ParseCoreData().securityContext) + .get("${ParseCoreData().serverUrl}/$path"); ParseResponse parseResponse = ParseResponse.handleResponse(emptyUser, response); From 765a3dd58fafade05bd101845ec17ad2e6324fa6 Mon Sep 17 00:00:00 2001 From: Christoph Bayer Date: Thu, 7 Feb 2019 13:08:39 +0100 Subject: [PATCH 3/7] Drop compatibility with dart:html. --- lib/parse.dart | 7 ++----- lib/src/data/parse_core_data.dart | 2 +- lib/src/network/browser_client.dart | 9 --------- lib/src/network/client_stub.dart | 9 --------- lib/src/network/io_client.dart | 18 ------------------ lib/src/network/parse_http_client.dart | 5 ++++- 6 files changed, 7 insertions(+), 43 deletions(-) delete mode 100644 lib/src/network/browser_client.dart delete mode 100644 lib/src/network/client_stub.dart delete mode 100644 lib/src/network/io_client.dart diff --git a/lib/parse.dart b/lib/parse.dart index 435b250e3..dad470edb 100644 --- a/lib/parse.dart +++ b/lib/parse.dart @@ -6,15 +6,12 @@ import 'dart:io'; import 'dart:typed_data'; import 'package:http/http.dart'; +import 'package:http/io_client.dart'; import 'package:meta/meta.dart'; import 'package:path/path.dart' as path; import 'package:shared_preferences/shared_preferences.dart'; import 'package:web_socket_channel/io.dart'; -import 'src/network/client_stub.dart' - if (dart.library.html) 'src/network/browser_client.dart' - if (dart.library.io) 'src/network/io_client.dart'; - part 'src/base/parse_constants.dart'; part 'src/data/parse_core_data.dart'; @@ -81,7 +78,7 @@ class Parse { String clientKey, String masterKey, String sessionId, - dynamic securityContext}) { + SecurityContext securityContext}) { ParseCoreData.init(appId, serverUrl, debug: debug, appName: appName, diff --git a/lib/src/data/parse_core_data.dart b/lib/src/data/parse_core_data.dart index d4b5eb874..c19f82cd7 100644 --- a/lib/src/data/parse_core_data.dart +++ b/lib/src/data/parse_core_data.dart @@ -36,7 +36,7 @@ class ParseCoreData { String masterKey; String clientKey; String sessionId; - dynamic securityContext; + SecurityContext securityContext; bool debug; SharedPreferences storage; diff --git a/lib/src/network/browser_client.dart b/lib/src/network/browser_client.dart deleted file mode 100644 index 0ad73088a..000000000 --- a/lib/src/network/browser_client.dart +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file -// for details. All rights reserved. Use of this source code is governed by a -// BSD-style license that can be found in the LICENSE file. - -import 'package:http/http.dart'; -import 'package:http/browser_client.dart'; - -/// Used from conditional imports, matches the definition in `client_stub.dart`. -BaseClient createClient(dynamic securityContext) => BrowserClient(); diff --git a/lib/src/network/client_stub.dart b/lib/src/network/client_stub.dart deleted file mode 100644 index 60df7db91..000000000 --- a/lib/src/network/client_stub.dart +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file -// for details. All rights reserved. Use of this source code is governed by a -// BSD-style license that can be found in the LICENSE file. - -import 'package:http/http.dart'; - -/// Implemented in `browser_client.dart` and `io_client.dart`. -BaseClient createClient(dynamic securityContext) => throw UnsupportedError( - 'Cannot create a client without dart:html or dart:io.'); diff --git a/lib/src/network/io_client.dart b/lib/src/network/io_client.dart deleted file mode 100644 index be49f98da..000000000 --- a/lib/src/network/io_client.dart +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file -// for details. All rights reserved. Use of this source code is governed by a -// BSD-style license that can be found in the LICENSE file. - -import 'dart:io'; - -import 'package:http/http.dart'; -import 'package:http/io_client.dart'; - -/// Used from conditional imports, matches the definition in `client_stub.dart`. -BaseClient createClient(SecurityContext securityContext) { - if (securityContext != null) { - HttpClient httpClient = HttpClient(context: securityContext); - return IOClient(httpClient); - } else { - return IOClient(); - } -} diff --git a/lib/src/network/parse_http_client.dart b/lib/src/network/parse_http_client.dart index b59e9f63e..5416e87e9 100644 --- a/lib/src/network/parse_http_client.dart +++ b/lib/src/network/parse_http_client.dart @@ -7,7 +7,10 @@ class ParseHTTPClient extends BaseClient { ParseCoreData data = ParseCoreData(); Map additionalHeaders; - ParseHTTPClient([dynamic securityContext]) : _client = createClient(securityContext); + ParseHTTPClient([dynamic securityContext]) + : _client = securityContext != null + ? IOClient(HttpClient(context: securityContext)) + : IOClient(); /// Overrides the call method for HTTP Client and adds custom headers @override From 62759f10e6814e25a475e9d53bf26f6bb1116e7b Mon Sep 17 00:00:00 2001 From: Christoph Bayer Date: Thu, 7 Feb 2019 13:40:50 +0100 Subject: [PATCH 4/7] Remove unused ParseHTTPClient object. --- lib/parse.dart | 3 --- 1 file changed, 3 deletions(-) diff --git a/lib/parse.dart b/lib/parse.dart index dad470edb..1d283d218 100644 --- a/lib/parse.dart +++ b/lib/parse.dart @@ -56,7 +56,6 @@ part 'src/utils/parse_utils.dart'; class Parse { ParseCoreData data; - ParseHTTPClient _client; bool _hasBeenInitialised = false; /// To initialise Parse Server in your application @@ -90,8 +89,6 @@ class Parse { ParseCoreData().initStorage(); - _client = ParseHTTPClient(securityContext); - _hasBeenInitialised = true; return Parse(); From fb613785e422101c9336067f06425565290f0b6c Mon Sep 17 00:00:00 2001 From: Christoph Bayer Date: Thu, 7 Feb 2019 15:10:38 +0100 Subject: [PATCH 5/7] Replacement of dynamic with SecurityContext was missing. --- lib/src/network/parse_http_client.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/src/network/parse_http_client.dart b/lib/src/network/parse_http_client.dart index 5416e87e9..c84d9842d 100644 --- a/lib/src/network/parse_http_client.dart +++ b/lib/src/network/parse_http_client.dart @@ -7,7 +7,7 @@ class ParseHTTPClient extends BaseClient { ParseCoreData data = ParseCoreData(); Map additionalHeaders; - ParseHTTPClient([dynamic securityContext]) + ParseHTTPClient([SecurityContext securityContext]) : _client = securityContext != null ? IOClient(HttpClient(context: securityContext)) : IOClient(); From a1f742b8d7614e91c26fab6940e13f5311ea0f44 Mon Sep 17 00:00:00 2001 From: Phill Date: Thu, 7 Feb 2019 18:07:29 +0000 Subject: [PATCH 6/7] Merge branches 'develop' and 'master' of https://github.com/phillwiggins/flutter_parse_sdk # Conflicts: # .idea/libraries/Dart_Packages.xml # lib/src/objects/parse_file.dart # lib/src/objects/parse_user.dart # pubspec.yaml --- CHANGELOG.md | 6 ++++++ README.md | 8 +++++--- lib/src/base/parse_constants.dart | 2 +- pubspec.yaml | 2 +- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c237a8a4..04fefd911 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.0.11 +ParseFile fixed +Anonymous login +SecurityContext +CloudFunctions with objects + ## 1.0.10 Add ParseConfig. Fixed whereEqualsTo('', PARSEOBJECT) and other queries diff --git a/README.md b/README.md index d9927e47d..238b17b0b 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ Want to get involved? Join our Slack channel and help out! (http://flutter-parse To install, either add to your pubspec.yaml ``` dependencies: - parse_server_sdk: ^1.0.10 + parse_server_sdk: ^1.0.11 ``` or clone this repository and add to your project. As this is an early development with multiple contributors, it is probably best to download/clone and keep updating as an when a new feature is added. @@ -33,8 +33,10 @@ Parse().initialize( ApplicationConstants.keyApplicationId, ApplicationConstants.keyParseServerUrl, masterKey: ApplicationConstants.keyParseMasterKey, - debug: true, - liveQuery: true); + clientKey: ApplicationConstants.keyParseClientKey, + debug: true, + liveQuery: true, + securityContext: securityContext); ``` ## Queries diff --git a/lib/src/base/parse_constants.dart b/lib/src/base/parse_constants.dart index d501b6029..2b43a59fc 100644 --- a/lib/src/base/parse_constants.dart +++ b/lib/src/base/parse_constants.dart @@ -1,7 +1,7 @@ part of flutter_parse_sdk; // Library -const String keySdkVersion = '1.0.10'; +const String keySdkVersion = '1.0.11'; const String keyLibraryName = 'Flutter Parse SDK'; // End Points diff --git a/pubspec.yaml b/pubspec.yaml index 7ed5bd270..93c7c4254 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: parse_server_sdk description: Flutter plugin for Parse Server, (https://parseplatform.org), (https://back4app.com) -version: 1.0.10 +version: 1.0.11 homepage: https://github.com/phillwiggins/flutter_parse_sdk author: PhillWiggins From 257f337845864df46eb34f56c9cd55a9bf37bb25 Mon Sep 17 00:00:00 2001 From: Phill Date: Thu, 7 Feb 2019 18:12:28 +0000 Subject: [PATCH 7/7] Merge branches 'develop' and 'master' of https://github.com/phillwiggins/flutter_parse_sdk # Conflicts: # .idea/libraries/Dart_Packages.xml # lib/src/objects/parse_file.dart # lib/src/objects/parse_user.dart # pubspec.yaml --- example/lib/diet_plan.dart | 8 ++++---- example/lib/main.dart | 23 ++++++++--------------- lib/{parse.dart => parse_server_sdk.dart} | 0 test/parse_client_configuration_test.dart | 12 +++++------- 4 files changed, 17 insertions(+), 26 deletions(-) rename lib/{parse.dart => parse_server_sdk.dart} (100%) diff --git a/example/lib/diet_plan.dart b/example/lib/diet_plan.dart index 52995379d..2a064a3b7 100644 --- a/example/lib/diet_plan.dart +++ b/example/lib/diet_plan.dart @@ -1,15 +1,15 @@ import 'dart:core'; -import 'package:parse_server_sdk/parse.dart'; +import 'package:parse_server_sdk/parse_server_sdk.dart'; class DietPlan extends ParseObject implements ParseCloneable { - DietPlan() : super(_keyTableName); - DietPlan.clone(): this(); + DietPlan.clone() : this(); /// Looks strangely hacky but due to Flutter not using reflection, we have to /// mimic a clone - @override clone(Map map) => DietPlan.clone()..fromJson(map); + @override + clone(Map map) => DietPlan.clone()..fromJson(map); static const String _keyTableName = 'Diet_Plans'; static const String keyName = 'Name'; diff --git a/example/lib/main.dart b/example/lib/main.dart index cee1b4c99..968fed0d3 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_plugin_example/application_constants.dart'; import 'package:flutter_plugin_example/diet_plan.dart'; -import 'package:parse_server_sdk/parse.dart'; +import 'package:parse_server_sdk/parse_server_sdk.dart'; void main() => runApp(new MyApp()); @@ -178,20 +178,13 @@ class _MyAppState extends State { } function() async { - var user = - ParseUser("TestFlutter", "TestPassword123", "TestFlutterSDK@gmail.com"); - await user.signUp(); - var loginResponse = await user.login(); - if (loginResponse.success) user = loginResponse.result; - - var customClient = ParseHTTPClient(); - customClient.additionalHeaders = { - keyHeaderSessionToken: ParseCoreData().sessionId - }; - var function = ParseCloudFunction('hello', client: customClient); - function.execute(); - - user.destroy(); + var function = ParseCloudFunction('hello'); + var result = await function.executeObjectFunction(); + if (result.success) { + if (result.result is ParseObject) { + print((result.result as ParseObject).className); + } + } } functionWithParameters() async { diff --git a/lib/parse.dart b/lib/parse_server_sdk.dart similarity index 100% rename from lib/parse.dart rename to lib/parse_server_sdk.dart diff --git a/test/parse_client_configuration_test.dart b/test/parse_client_configuration_test.dart index ae47e0f62..e017fb36f 100644 --- a/test/parse_client_configuration_test.dart +++ b/test/parse_client_configuration_test.dart @@ -1,10 +1,9 @@ +import 'package:parse_server_sdk/parse_server_sdk.dart'; import 'package:test/test.dart'; -import 'package:parse_server_sdk/parse.dart'; -void main(){ - test("testBuilder",() { - Parse().initialize("appId", - "serverUrl", +void main() { + test("testBuilder", () { + Parse().initialize("appId", "serverUrl", clientKey: "clientKey", liveQueryUrl: "liveQueryUrl", appName: "appName", @@ -20,6 +19,5 @@ void main(){ expect(ParseCoreData().masterKey, "masterKey"); expect(ParseCoreData().sessionId, "sessionId"); expect(ParseCoreData().debug, true); - }); -} \ No newline at end of file +}