Marino Faggiana 1 rok temu
rodzic
commit
ba3b8567e6

+ 34 - 43
iOSClient/Data/NCManageDatabase+E2EE.swift

@@ -36,7 +36,7 @@ class tableE2eEncryptionLock: Object {
 
 class tableE2eEncryption: Object {
 
-    @Persisted(primaryKey: true) var accountOcIdServerUrlFileNameIdentifier = ""
+    @Persisted(primaryKey: true) var primaryKey = ""
     @Persisted var account = ""
     @Persisted var authenticationTag: String = ""
     @Persisted var blob = "files"
@@ -51,6 +51,14 @@ class tableE2eEncryption: Object {
     @Persisted var mimeType = ""
     @Persisted var ocIdServerUrl: String = ""
     @Persisted var serverUrl = ""
+
+    convenience init(account: String, ocIdServerUrl: String, fileNameIdentifier: String) {
+        self.init()
+        self.primaryKey = account + ocIdServerUrl + fileNameIdentifier
+        self.account = account
+        self.ocIdServerUrl = ocIdServerUrl
+        self.fileNameIdentifier = fileNameIdentifier
+     }
 }
 
 // MARK: -
@@ -69,7 +77,8 @@ class tableE2eMetadata: Object {
 
 class tableE2eMetadataV2: Object {
 
-    @Persisted(primaryKey: true) var accountOcIdServerUrl = ""
+    @Persisted(primaryKey: true) var primaryKey = ""
+    @Persisted var account = ""
     @Persisted var counter: Int = 0
     @Persisted var deleted: Bool = false
     @Persisted var folders = Map<String, String>()
@@ -77,11 +86,18 @@ class tableE2eMetadataV2: Object {
     @Persisted var ocIdServerUrl: String = ""
     @Persisted var serverUrl: String = ""
     @Persisted var version: String = "2.0"
+
+    convenience init(account: String, ocIdServerUrl: String) {
+        self.init()
+        self.account = account
+        self.ocIdServerUrl = ocIdServerUrl
+        self.primaryKey = account + ocIdServerUrl
+     }
 }
 
 class tableE2eUsersV2: Object {
 
-    @Persisted(primaryKey: true) var accountOcIdServerUrlUserId = ""
+    @Persisted(primaryKey: true) var primaryKey = ""
     @Persisted var account = ""
     @Persisted var certificate = ""
     @Persisted var encryptedFiledropKey: String?
@@ -93,6 +109,14 @@ class tableE2eUsersV2: Object {
     @Persisted var ocIdServerUrl: String = ""
     @Persisted var serverUrl: String = ""
     @Persisted var userId = ""
+
+    convenience init(account: String, ocIdServerUrl: String, userId: String) {
+        self.init()
+        self.account = account
+        self.ocIdServerUrl = ocIdServerUrl
+        self.userId = userId
+        self.primaryKey = account + ocIdServerUrl + userId
+     }
 }
 
 extension NCManageDatabase {
@@ -287,9 +311,7 @@ extension NCManageDatabase {
         do {
             let realm = try Realm()
             try realm.write {
-                let object = tableE2eUsersV2()
-                object.accountOcIdServerUrlUserId = account + ocIdServerUrl + userId
-                object.account = account
+                let object = tableE2eUsersV2.init(account: account, ocIdServerUrl: ocIdServerUrl, userId: userId)
                 object.certificate = certificate
                 object.encryptedFiledropKey = encryptedFiledropKey
                 object.encryptedMetadataKey = encryptedMetadataKey
@@ -297,9 +319,7 @@ extension NCManageDatabase {
                 object.decryptedMetadataKey = decryptedMetadataKey
                 object.filedropKey = filedropKey
                 object.metadataKey = metadataKey
-                object.ocIdServerUrl = ocIdServerUrl
                 object.serverUrl = serverUrl
-                object.userId = userId
                 realm.add(object, update: .all)
             }
         } catch let error {
@@ -325,7 +345,7 @@ extension NCManageDatabase {
         do {
             let realm = try Realm()
             realm.refresh()
-            return realm.objects(tableE2eUsersV2.self).filter("accountOcIdServerUrlUserId == %@", account + ocIdServerUrl + userId).first
+            return realm.objects(tableE2eUsersV2.self).filter("account == %@ && ocIdServerUrl == %@ AND userId == %@", account + ocIdServerUrl + userId).first
         } catch let error as NSError {
             NextcloudKit.shared.nkCommonInstance.writeLog("Could not access database: \(error)")
         }
@@ -333,25 +353,12 @@ extension NCManageDatabase {
         return nil
     }
 
-    func deleteE2EUsersV2(account: String, ocIdServerUrl: String) {
-
-        do {
-            let realm = try Realm()
-            try realm.write {
-                let results = realm.objects(tableE2eEncryption.self).filter("account == %@ AND ocIdServerUrl == %@", account, ocIdServerUrl)
-                realm.delete(results)
-            }
-        } catch let error {
-            NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)")
-        }
-    }
-
     func getE2eMetadataV2(account: String, ocIdServerUrl: String) -> tableE2eMetadataV2? {
 
         do {
             let realm = try Realm()
             realm.refresh()
-            return realm.objects(tableE2eMetadataV2.self).filter("accountOcIdServerUrl == %@", account + ocIdServerUrl).first
+            return realm.objects(tableE2eMetadataV2.self).filter("account == %@ && ocIdServerUrl == %@", account, ocIdServerUrl).first
         } catch let error as NSError {
             NextcloudKit.shared.nkCommonInstance.writeLog("Could not access database: \(error)")
         }
@@ -364,18 +371,17 @@ extension NCManageDatabase {
         do {
             let realm = try Realm()
             try realm.write {
-                if let result = realm.objects(tableE2eMetadataV2.self).filter("accountOcIdServerUrl == %@", account + ocIdServerUrl).first {
+                if let result = realm.objects(tableE2eMetadataV2.self).filter("account == %@ && ocIdServerUrl == %@", account, ocIdServerUrl).first {
                     result.counter += 1
                 } else {
-                    let object = tableE2eMetadataV2()
-                    object.accountOcIdServerUrl = account + ocIdServerUrl
+                    let object = tableE2eMetadataV2.init(account: account, ocIdServerUrl: ocIdServerUrl)
                     object.serverUrl = serverUrl
                     object.counter = 1
                     object.version = version
                     realm.add(object, update: .all)
                 }
             }
-            return realm.objects(tableE2eMetadataV2.self).filter("accountOcIdServerUrl == %@", account + ocIdServerUrl).first
+            return realm.objects(tableE2eMetadataV2.self).filter("account == %@ && ocIdServerUrl == %@", account, ocIdServerUrl).first
         } catch let error {
             NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)")
         }
@@ -388,8 +394,7 @@ extension NCManageDatabase {
         do {
             let realm = try Realm()
             try realm.write {
-                let object = tableE2eMetadataV2()
-                object.accountOcIdServerUrl = account + ocIdServerUrl
+                let object = tableE2eMetadataV2.init(account: account, ocIdServerUrl: ocIdServerUrl)
                 if let keyChecksums {
                     object.keyChecksums.append(objectsIn: keyChecksums)
                 }
@@ -401,7 +406,6 @@ extension NCManageDatabase {
                         foldersDictionary[folder.key] = folder.value
                     }
                 }
-                object.ocIdServerUrl = ocIdServerUrl
                 object.serverUrl = serverUrl
                 object.version = version
                 realm.add(object, update: .all)
@@ -410,17 +414,4 @@ extension NCManageDatabase {
             NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)")
         }
     }
-
-    func deleteE2eMetadataV2(account: String, ocId: String) {
-
-        do {
-            let realm = try Realm()
-            try realm.write {
-                let results = realm.objects(tableE2eMetadataV2.self).filter("accountOcId == %@", account + ocId)
-                realm.delete(results)
-            }
-        } catch let error {
-            NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)")
-        }
-    }
 }

+ 3 - 15
iOSClient/Networking/E2EE/NCEndToEndMetadataV1.swift

@@ -196,20 +196,16 @@ extension NCEndToEndMetadata {
 
                             if let metadata = NCManageDatabase.shared.getMetadata(predicate: NSPredicate(format: "account == %@ AND fileName == %@", account, fileNameIdentifier)) {
 
-                                let object = tableE2eEncryption()
+                                let object = tableE2eEncryption.init(account: account, ocIdServerUrl: ocIdServerUrl, fileNameIdentifier: fileNameIdentifier)
 
-                                object.accountOcIdServerUrlFileNameIdentifier = account + ocIdServerUrl + fileNameIdentifier
-                                object.account = account
                                 object.authenticationTag = authenticationTag ?? ""
                                 object.blob = "files"
                                 object.fileName = encrypted.filename
-                                object.fileNameIdentifier = fileNameIdentifier
                                 object.key = encrypted.key
                                 object.initializationVector = initializationVector
                                 object.metadataKey = metadataKey
                                 object.metadataVersion = metadataVersion
                                 object.mimeType = encrypted.mimetype
-                                object.ocIdServerUrl = ocIdServerUrl
                                 object.serverUrl = serverUrl
 
                                 // Write file parameter for decrypted on DB
@@ -258,21 +254,17 @@ extension NCEndToEndMetadata {
 
                             if let metadata = NCManageDatabase.shared.getMetadata(predicate: NSPredicate(format: "account == %@ AND fileName == %@", account, fileNameIdentifier)) {
 
-                                let object = tableE2eEncryption()
+                                let object = tableE2eEncryption.init(account: account, ocIdServerUrl: ocIdServerUrl, fileNameIdentifier: fileNameIdentifier)
 
-                                object.accountOcIdServerUrlFileNameIdentifier = account + ocIdServerUrl + fileNameIdentifier
-                                object.account = account
                                 object.authenticationTag = filedrop.authenticationTag ?? ""
                                 object.blob = "filedrop"
                                 object.fileName = encrypted.filename
-                                object.fileNameIdentifier = fileNameIdentifier
                                 object.key = encrypted.key
                                 object.metadataKeyFiledrop = metadataKeyFiledrop ?? ""
                                 object.initializationVector = filedrop.initializationVector
                                 object.metadataKey = metadataKey
                                 object.metadataVersion = metadataVersion
                                 object.mimeType = encrypted.mimetype
-                                object.ocIdServerUrl = ocIdServerUrl
                                 object.serverUrl = serverUrl
 
                                 // Write file parameter for decrypted on DB
@@ -379,21 +371,17 @@ extension NCEndToEndMetadata {
 
                             if let metadata = NCManageDatabase.shared.getMetadata(predicate: NSPredicate(format: "account == %@ AND fileName == %@", account, fileNameIdentifier)) {
 
-                                let object = tableE2eEncryption()
+                                let object = tableE2eEncryption.init(account: account, ocIdServerUrl: ocIdServerUrl, fileNameIdentifier: fileNameIdentifier)
 
-                                object.accountOcIdServerUrlFileNameIdentifier = account + ocIdServerUrl + fileNameIdentifier
-                                object.account = account
                                 object.authenticationTag = authenticationTag ?? ""
                                 object.blob = "files"
                                 object.fileName = encrypted.filename
-                                object.fileNameIdentifier = fileNameIdentifier
                                 object.key = encrypted.key
                                 object.initializationVector = initializationVector
                                 object.metadataKey = metadataKey
                                 object.metadataKeyIndex = metadataKeyIndex
                                 object.metadataVersion = metadataVersion
                                 object.mimeType = encrypted.mimetype
-                                object.ocIdServerUrl = ocIdServerUrl
                                 object.serverUrl = serverUrl
 
                                 // Write file parameter for decrypted on DB

+ 1 - 8
iOSClient/Networking/E2EE/NCEndToEndMetadataV20.swift

@@ -147,19 +147,15 @@ extension NCEndToEndMetadata {
 
             if let metadata = NCManageDatabase.shared.getMetadata(predicate: NSPredicate(format: "account == %@ AND fileName == %@", account, fileNameIdentifier)) {
 
-                let object = tableE2eEncryption()
+                let object = tableE2eEncryption.init(account: account, ocIdServerUrl: ocIdServerUrl, fileNameIdentifier: fileNameIdentifier)
 
-                object.accountOcIdServerUrlFileNameIdentifier = account + ocIdServerUrl + fileNameIdentifier
-                object.account = account
                 object.authenticationTag = authenticationTag
                 object.blob = "files"
                 object.fileName = filename
-                object.fileNameIdentifier = fileNameIdentifier
                 object.key = key
                 object.initializationVector = initializationVector
                 object.metadataKey = metadataKey
                 object.mimeType = mimetype
-                object.ocIdServerUrl = ocIdServerUrl
                 object.serverUrl = serverUrl
 
                 // Write file parameter for decrypted on DB
@@ -195,9 +191,6 @@ extension NCEndToEndMetadata {
                 print(signatureX)
             }
 
-            // DATA
-            // NCManageDatabase.shared.deleteE2EUsersV2(account: account, serverUrl: serverUrl)
-
             //
             // users
             //

+ 1 - 5
iOSClient/Networking/E2EE/NCNetworkingE2EECreateFolder.swift

@@ -125,7 +125,6 @@ class NCNetworkingE2EECreateFolder: NSObject {
 
         var key: NSString?
         var initializationVector: NSString?
-        let object = tableE2eEncryption()
         var method = "POST"
 
         // Get last metadata
@@ -139,11 +138,9 @@ class NCNetworkingE2EECreateFolder: NSObject {
         // Add new metadata
         NCEndToEndEncryption.sharedManager()?.encodedkey(&key, initializationVector: &initializationVector)
 
-        object.accountOcIdServerUrlFileNameIdentifier = account + ocIdServerUrl + fileNameIdentifier
-        object.account = account
+        let object = tableE2eEncryption.init(account: account, ocIdServerUrl: ocIdServerUrl, fileNameIdentifier: fileNameIdentifier)
         object.authenticationTag = ""
         object.fileName = fileNameFolder
-        object.fileNameIdentifier = fileNameIdentifier
         object.key = key! as String
         object.initializationVector = initializationVector! as String
         if let result = NCManageDatabase.shared.getE2eEncryption(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", account, serverUrl)) {
@@ -154,7 +151,6 @@ class NCNetworkingE2EECreateFolder: NSObject {
             object.metadataKeyIndex = 0
         }
         object.mimeType = "httpd/unix-directory"
-        object.ocIdServerUrl = ocIdServerUrl
         object.serverUrl = serverUrl
         NCManageDatabase.shared.addE2eEncryption(object)
 

+ 1 - 5
iOSClient/Networking/E2EE/NCNetworkingE2EEUpload.swift

@@ -126,7 +126,6 @@ class NCNetworkingE2EEUpload: NSObject {
     private func createE2Ee(metadata: tableMetadata, e2eToken: String, ocIdServerUrl: String, fileId: String) async -> (NKError) {
 
         var key: NSString?, initializationVector: NSString?, authenticationTag: NSString?
-        let object = tableE2eEncryption()
         var method = "POST"
 
         if NCEndToEndEncryption.sharedManager()?.encryptFile(metadata.fileNameView, fileNameIdentifier: metadata.fileName, directory: CCUtility.getDirectoryProviderStorageOcId(metadata.ocId), key: &key, initializationVector: &initializationVector, authenticationTag: &authenticationTag) == false {
@@ -145,6 +144,7 @@ class NCNetworkingE2EEUpload: NSObject {
         NCManageDatabase.shared.deleteE2eEncryption(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND fileName == %@", metadata.account, metadata.serverUrl, metadata.fileNameView))
 
         // Add new metadata
+        let object = tableE2eEncryption.init(account: metadata.account, ocIdServerUrl: ocIdServerUrl, fileNameIdentifier: metadata.fileName)
         if let result = NCManageDatabase.shared.getE2eEncryption(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", metadata.account, metadata.serverUrl)) {
             object.metadataKey = result.metadataKey
             object.metadataKeyIndex = result.metadataKeyIndex
@@ -153,15 +153,11 @@ class NCNetworkingE2EEUpload: NSObject {
             object.metadataKey = key!.base64EncodedString()
             object.metadataKeyIndex = 0
         }
-        object.accountOcIdServerUrlFileNameIdentifier = metadata.account + ocIdServerUrl + metadata.fileName
-        object.account = metadata.account
         object.authenticationTag = authenticationTag! as String
         object.fileName = metadata.fileNameView
-        object.fileNameIdentifier = metadata.fileName
         object.key = key! as String
         object.initializationVector = initializationVector! as String
         object.mimeType = metadata.contentType
-        object.ocIdServerUrl = ocIdServerUrl
         object.serverUrl = metadata.serverUrl
         NCManageDatabase.shared.addE2eEncryption(object)
 

+ 8 - 0
iOSClient/Settings/NCEndToEndInitialize.swift

@@ -178,6 +178,10 @@ class NCEndToEndInitialize: NSObject {
                             // Clear Table
                             NCManageDatabase.shared.clearTable(tableDirectory.self, account: account)
                             NCManageDatabase.shared.clearTable(tableE2eEncryption.self, account: account)
+                            NCManageDatabase.shared.clearTable(tableE2eEncryptionLock.self, account: account)
+                            NCManageDatabase.shared.clearTable(tableE2eMetadata.self, account: account)
+                            NCManageDatabase.shared.clearTable(tableE2eMetadataV2.self, account: account)
+                            NCManageDatabase.shared.clearTable(tableE2eUsersV2.self, account: account)
 
                             self.delegate?.endToEndInitializeSuccess()
 
@@ -285,6 +289,10 @@ class NCEndToEndInitialize: NSObject {
                         // Clear Table
                         NCManageDatabase.shared.clearTable(tableDirectory.self, account: account)
                         NCManageDatabase.shared.clearTable(tableE2eEncryption.self, account: account)
+                        NCManageDatabase.shared.clearTable(tableE2eEncryptionLock.self, account: account)
+                        NCManageDatabase.shared.clearTable(tableE2eMetadata.self, account: account)
+                        NCManageDatabase.shared.clearTable(tableE2eMetadataV2.self, account: account)
+                        NCManageDatabase.shared.clearTable(tableE2eUsersV2.self, account: account)
 
                         if copyPassphrase {
                             UIPasteboard.general.string = e2ePassphrase