From 8cd4ebdee804d550d33f4c334d27a235f8497f73 Mon Sep 17 00:00:00 2001 From: maaeps Date: Fri, 4 Sep 2020 00:54:09 +0200 Subject: [PATCH 1/3] Add websupport for CoreStoreSembastImp --- README.md | 2 ++ lib/parse_server_sdk.dart | 1 + lib/src/storage/core_store_sem_impl.dart | 5 ++--- pubspec.yaml | 1 + 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 2e45d7f2d..192250ba4 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,8 @@ await Parse().initialize( ``` If you want to use secure storage or use the Flutter web/desktop SDK, please change to the below instance of CoreStorage as it has no dependencies on Flutter. + +**The `CoreStoreSembastImp` does not encrypt the data!** (Web is not safe anyway. Encrypt fields manually as needed.) ```dart await Parse().initialize( diff --git a/lib/parse_server_sdk.dart b/lib/parse_server_sdk.dart index 681143501..3561d16db 100644 --- a/lib/parse_server_sdk.dart +++ b/lib/parse_server_sdk.dart @@ -19,6 +19,7 @@ import 'package:path/path.dart' as path; import 'package:path_provider/path_provider.dart'; import 'package:sembast/sembast.dart'; import 'package:sembast/sembast_io.dart'; +import 'package:sembast_web/sembast_web.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:uuid/uuid.dart'; import 'package:web_socket_channel/web_socket_channel.dart'; diff --git a/lib/src/storage/core_store_sem_impl.dart b/lib/src/storage/core_store_sem_impl.dart index f8e2c317d..1647b2ba3 100644 --- a/lib/src/storage/core_store_sem_impl.dart +++ b/lib/src/storage/core_store_sem_impl.dart @@ -9,14 +9,13 @@ class CoreStoreSembastImp implements CoreStore { static Future getInstance( {DatabaseFactory factory, String password = 'flutter_sdk'}) async { if (_instance == null) { - factory ??= databaseFactoryIo; - final SembastCodec codec = getXXTeaSembastCodec(password: password); + factory ??= !parseIsWeb ? databaseFactoryIo : databaseFactoryWeb; String dbDirectory = ''; if (!parseIsWeb && (Platform.isIOS || Platform.isAndroid || Platform.isMacOS)) dbDirectory = (await getApplicationDocumentsDirectory()).path; final String dbPath = path.join('$dbDirectory/parse', 'parse.db'); - final Database db = await factory.openDatabase(dbPath, codec: codec); + final Database db = await factory.openDatabase(dbPath, codec: !parseIsWeb ? getXXTeaSembastCodec(password: password) : null); _instance = CoreStoreSembastImp._internal(db, StoreRef.main()); } diff --git a/pubspec.yaml b/pubspec.yaml index b23f9ab4a..d6610c681 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -17,6 +17,7 @@ dependencies: #Database sembast: ^2.4.7+6 + sembast_web: '>=1.0.0' xxtea: ^2.0.3 shared_preferences: ^0.5.10 From 7035c492d2695b8883b1a479c72ac9a4e7c7ea9c Mon Sep 17 00:00:00 2001 From: maaeps Date: Fri, 4 Sep 2020 12:08:50 +0200 Subject: [PATCH 2/3] Add debug warning when using sembast on web ParseCoreData().debug should be null at that time --- lib/src/storage/core_store_sem_impl.dart | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/src/storage/core_store_sem_impl.dart b/lib/src/storage/core_store_sem_impl.dart index 1647b2ba3..6c78ba341 100644 --- a/lib/src/storage/core_store_sem_impl.dart +++ b/lib/src/storage/core_store_sem_impl.dart @@ -14,8 +14,16 @@ class CoreStoreSembastImp implements CoreStore { if (!parseIsWeb && (Platform.isIOS || Platform.isAndroid || Platform.isMacOS)) dbDirectory = (await getApplicationDocumentsDirectory()).path; + assert(() { + if (parseIsWeb) { + print( + 'Warning: CoreStoreSembastImp of the Parse_Server_SDK does not encrypt the database on WEB.'); + } + return true; + }()); final String dbPath = path.join('$dbDirectory/parse', 'parse.db'); - final Database db = await factory.openDatabase(dbPath, codec: !parseIsWeb ? getXXTeaSembastCodec(password: password) : null); + final Database db = await factory.openDatabase(dbPath, + codec: !parseIsWeb ? getXXTeaSembastCodec(password: password) : null); _instance = CoreStoreSembastImp._internal(db, StoreRef.main()); } From acca3941b10f7a23f05cb8c374a42496cdec6e64 Mon Sep 17 00:00:00 2001 From: maaeps Date: Fri, 4 Sep 2020 12:23:05 +0200 Subject: [PATCH 3/3] fixed issues --- lib/parse_server_sdk_dart.dart | 1 + lib/src/storage/core_store_sem_impl.dart | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/parse_server_sdk_dart.dart b/lib/parse_server_sdk_dart.dart index 1da9ae8ae..c5da87525 100644 --- a/lib/parse_server_sdk_dart.dart +++ b/lib/parse_server_sdk_dart.dart @@ -14,6 +14,7 @@ import 'package:parse_server_sdk/src/network/parse_websocket.dart' import 'package:path/path.dart' as path; import 'package:sembast/sembast.dart'; import 'package:sembast/sembast_io.dart'; +import 'package:sembast_web/sembast_web.dart'; import 'package:uuid/uuid.dart'; import 'package:web_socket_channel/web_socket_channel.dart'; import 'package:xxtea/xxtea.dart'; diff --git a/lib/src/storage/core_store_sem_impl.dart b/lib/src/storage/core_store_sem_impl.dart index 730ad3bd2..466fc24ec 100644 --- a/lib/src/storage/core_store_sem_impl.dart +++ b/lib/src/storage/core_store_sem_impl.dart @@ -17,7 +17,8 @@ class CoreStoreSembastImp implements CoreStore { } return true; }()); - final Database db = await factory.openDatabase(dbPath, codec: !parseIsWeb ? getXXTeaSembastCodec(password: password) : null)); + final Database db = await factory.openDatabase(dbPath, + codec: !parseIsWeb ? getXXTeaSembastCodec(password: password) : null); _instance = CoreStoreSembastImp._internal(db, StoreRef.main()); }