From 3a8b7379685b968c79f40df9e67c1ae8d40e3a4b Mon Sep 17 00:00:00 2001 From: Prateek Sunal Date: Wed, 10 Apr 2024 22:50:02 +0530 Subject: [PATCH] fix: add file key in table --- mobile/lib/db/upload_locks_db.dart | 30 +++++++++++++++++++-- mobile/lib/utils/file_uploader.dart | 1 + mobile/lib/utils/multipart_upload_util.dart | 4 +++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/mobile/lib/db/upload_locks_db.dart b/mobile/lib/db/upload_locks_db.dart index 827765047..9995caefe 100644 --- a/mobile/lib/db/upload_locks_db.dart +++ b/mobile/lib/db/upload_locks_db.dart @@ -62,10 +62,14 @@ class UploadLocksDB { final Directory documentsDirectory = await getApplicationDocumentsDirectory(); final String path = join(documentsDirectory.path, _databaseName); + return await openDatabase( path, version: _databaseVersion, onCreate: _onCreate, + onOpen: (db) async { + await _createTrackUploadsTable(db); + }, ); } @@ -79,10 +83,25 @@ class UploadLocksDB { ) ''', ); + await _createTrackUploadsTable(db); + } + + Future _createTrackUploadsTable(Database db) async { + if ((await db.query( + 'sqlite_master', + where: 'name = ?', + whereArgs: [ + _trackUploadTable.table, + ], + )) + .isNotEmpty) { + return; + } + await db.execute( ''' CREATE TABLE ${_trackUploadTable.table} ( - ${_trackUploadTable.columnID} TEXT PRIMARY KEY NOT NULL, + ${_trackUploadTable.columnID} INTEGER PRIMARY KEY, ${_trackUploadTable.columnLocalID} TEXT NOT NULL, ${_trackUploadTable.columnFileHash} TEXT NOT NULL UNIQUE, ${_trackUploadTable.columnEncryptedFilePath} TEXT NOT NULL, @@ -170,7 +189,12 @@ class UploadLocksDB { // For multipart download tracking Future doesExists(String localId, String hash) async { final db = await instance.database; - final rows = await db.query(_trackUploadTable.table); + final rows = await db.query( + _trackUploadTable.table, + where: + '${_trackUploadTable.columnLocalID} = ? AND ${_trackUploadTable.columnFileHash} = ?', + ); + return rows.isNotEmpty; } @@ -227,6 +251,7 @@ class UploadLocksDB { MultipartUploadURLs urls, String encryptedFilePath, int fileSize, + String fileKey, ) async { final db = await UploadLocksDB.instance.database; final objectKey = urls.objectKey; @@ -240,6 +265,7 @@ class UploadLocksDB { _trackUploadTable.columnCompleteUrl: urls.completeURL, _trackUploadTable.columnEncryptedFilePath: encryptedFilePath, _trackUploadTable.columnEncryptedFileSize: fileSize, + _trackUploadTable.columnFileKey: fileKey, _trackUploadTable.columnCompletionStatus: _trackStatus.pending, _trackUploadTable.columnPartSize: multipartPartSize, }, diff --git a/mobile/lib/utils/file_uploader.dart b/mobile/lib/utils/file_uploader.dart index c336a99b1..2a96f3725 100644 --- a/mobile/lib/utils/file_uploader.dart +++ b/mobile/lib/utils/file_uploader.dart @@ -522,6 +522,7 @@ class FileUploader { fileUploadURLs, encryptedFilePath, await encryptedFile.length(), + fileAttributes.key!, ); fileObjectKey = await putMultipartFile(fileUploadURLs, encryptedFile); } diff --git a/mobile/lib/utils/multipart_upload_util.dart b/mobile/lib/utils/multipart_upload_util.dart index aa8a9b44a..5d5a90f9b 100644 --- a/mobile/lib/utils/multipart_upload_util.dart +++ b/mobile/lib/utils/multipart_upload_util.dart @@ -1,12 +1,14 @@ // ignore_for_file: implementation_imports import "dart:io"; +import "dart:typed_data"; import "package:dio/dio.dart"; import "package:logging/logging.dart"; import "package:photos/core/constants.dart"; import "package:photos/core/network/network.dart"; import "package:photos/db/upload_locks_db.dart"; +import "package:photos/utils/crypto_util.dart"; import "package:photos/utils/xml_parser_util.dart"; final _enteDio = NetworkClient.instance.enteDio; @@ -79,6 +81,7 @@ Future createTableEntry( MultipartUploadURLs urls, String encryptedFilePath, int fileSize, + Uint8List fileKey, ) async { await UploadLocksDB.instance.createTrackUploadsEntry( localId, @@ -86,6 +89,7 @@ Future createTableEntry( urls, encryptedFilePath, fileSize, + CryptoUtil.bin2base64(fileKey), ); }