diff --git a/lib/parse.dart b/lib/parse.dart index b4fcd4133..50ced0b16 100644 --- a/lib/parse.dart +++ b/lib/parse.dart @@ -6,6 +6,7 @@ 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'; @@ -57,7 +58,6 @@ part 'src/utils/parse_utils.dart'; class Parse { ParseCoreData data; - final ParseHTTPClient client = new ParseHTTPClient(); bool _hasBeenInitialised = false; /// To initialise Parse Server in your application @@ -78,14 +78,16 @@ class Parse { String liveQueryUrl, String clientKey, String masterKey, - String sessionId}) { + String sessionId, + SecurityContext securityContext}) { ParseCoreData.init(appId, serverUrl, debug: debug, appName: appName, liveQueryUrl: liveQueryUrl, masterKey: masterKey, clientKey: clientKey, - sessionId: sessionId); + sessionId: sessionId, + securityContext: securityContext); ParseCoreData().initStorage(); @@ -100,7 +102,7 @@ class Parse { ParseResponse parseResponse; try { - var response = await ParseHTTPClient() + 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 7ace885a3..c19f82cd7 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, + securityContext}) { _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 (securityContext != null) _instance.securityContext = securityContext; } String appName; @@ -29,6 +36,7 @@ class ParseCoreData { String masterKey; String clientKey; String sessionId; + SecurityContext securityContext; bool debug; SharedPreferences storage; diff --git a/lib/src/network/parse_http_client.dart b/lib/src/network/parse_http_client.dart index 6101d09f6..c84d9842d 100644 --- a/lib/src/network/parse_http_client.dart +++ b/lib/src/network/parse_http_client.dart @@ -2,12 +2,15 @@ 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([SecurityContext securityContext]) + : _client = securityContext != null + ? IOClient(HttpClient(context: securityContext)) + : IOClient(); /// 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..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(); + 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') { @@ -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 0e6082701..5c31f87c1 100644 --- a/lib/src/objects/parse_file.dart +++ b/lib/src/objects/parse_file.dart @@ -33,7 +33,10 @@ class ParseFile extends ParseObject { ParseFile(this._file, {String name, String url, bool debug, ParseHTTPClient client}) : super(keyFile) { - client == null ? _client = ParseHTTPClient() : _client = client; + client == null + ? _client = ParseHTTPClient(ParseCoreData().securityContext) + : _client = client; + _debug = isDebugEnabled(objectLevelDebug: debug); if (_file != null) { this._fileName = path.basename(_file.path); @@ -93,6 +96,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..f0ff5512b 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().securityContext) + : _client = client; _debug = isDebugEnabled(objectLevelDebug: debug); } diff --git a/lib/src/objects/parse_object.dart b/lib/src/objects/parse_object.dart index b5d1256e3..3eea1587c 100644 --- a/lib/src/objects/parse_object.dart +++ b/lib/src/objects/parse_object.dart @@ -19,7 +19,7 @@ class ParseObject extends ParseBase implements ParseCloneable { ParseObject(String className, {bool debug: false}) : super() { setClassName(className); _path = "$keyEndPointClasses$className"; - setClient(ParseHTTPClient()); + setClient(ParseHTTPClient(ParseCoreData().securityContext)); setDebug(isDebugEnabled(objectLevelDebug: debug)); } @@ -83,7 +83,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 c216f2ff7..86b469440 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().securityContext) + : _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().securityContext) .get(uri, headers: {keyHeaderSessionToken: token}); return _handleResponse(_getEmptyUser(), response, ParseApiRQ.currentUser, _debug, _getEmptyUser().className); @@ -273,8 +275,8 @@ class ParseUser extends ParseObject implements ParseCloneable { var emptyUser = ParseUser(null, null, null); try { - final response = - await ParseHTTPClient().get("${ParseCoreData().serverUrl}/$path"); + final response = await ParseHTTPClient(ParseCoreData().securityContext) + .get("${ParseCoreData().serverUrl}/$path"); ParseResponse parseResponse = ParseResponse.handleResponse(emptyUser, response);