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/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 91% rename from lib/parse.dart rename to lib/parse_server_sdk.dart index b4fcd4133..50ced0b16 100644 --- a/lib/parse.dart +++ b/lib/parse_server_sdk.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/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/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); 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 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 +}