Marino Faggiana 1 жил өмнө
parent
commit
a1d8b6cbfb

+ 1 - 1
Brand/Database.swift

@@ -26,4 +26,4 @@ import Foundation
 // Database Realm
 //
 let databaseName                    = "nextcloud.realm"
-let databaseSchemaVersion: UInt64   = 312
+let databaseSchemaVersion: UInt64   = 313

+ 27 - 25
iOSClient/Data/NCManageDatabase+E2EE.swift

@@ -76,17 +76,18 @@ class tableE2eMetadata: Object {
 
 class tableE2eMetadataV2: Object {
 
-    @Persisted(primaryKey: true) var accountServerUrl = ""
-    @Persisted var keyChecksums = List<String>()
-    @Persisted var folders = Map<String, String>()
-    @Persisted var deleted: Bool = false
+    @Persisted(primaryKey: true) var accountOcId = ""
     @Persisted var counter: Int = 0
+    @Persisted var deleted: Bool = false
+    @Persisted var folders = Map<String, String>()
+    @Persisted var keyChecksums = List<String>()
+    @Persisted var ocId: String = ""
     @Persisted var version: String = "2.0"
 }
 
 class tableE2eUsersV2: Object {
 
-    @Persisted(primaryKey: true) var accountServerUrlUserId = ""
+    @Persisted(primaryKey: true) var accountOcIdUserId = ""
     @Persisted var account = ""
     @Persisted var certificate = ""
     @Persisted var encryptedFiledropKey: String?
@@ -95,7 +96,7 @@ class tableE2eUsersV2: Object {
     @Persisted var decryptedMetadataKey: Data?
     @Persisted var filedropKey: String?
     @Persisted var metadataKey: String?
-    @Persisted var serverUrl = ""
+    @Persisted var ocId: String = ""
     @Persisted var userId = ""
 }
 
@@ -281,7 +282,7 @@ extension NCManageDatabase {
     // MARK: V2
 
     func addE2EUsersV2(account: String,
-                       serverUrl: String,
+                       ocId: String,
                        userId: String,
                        certificate: String,
                        encryptedFiledropKey: String?,
@@ -295,7 +296,7 @@ extension NCManageDatabase {
             let realm = try Realm()
             try realm.write {
                 let addObject = tableE2eUsersV2()
-                addObject.accountServerUrlUserId = account + serverUrl + userId
+                addObject.accountOcIdUserId = account + ocId + userId
                 addObject.account = account
                 addObject.certificate = certificate
                 addObject.encryptedFiledropKey = encryptedFiledropKey
@@ -304,7 +305,7 @@ extension NCManageDatabase {
                 addObject.decryptedMetadataKey = decryptedMetadataKey
                 addObject.filedropKey = filedropKey
                 addObject.metadataKey = metadataKey
-                addObject.serverUrl = serverUrl
+                addObject.ocId = ocId
                 addObject.userId = userId
                 realm.add(addObject, update: .all)
             }
@@ -313,12 +314,12 @@ extension NCManageDatabase {
         }
     }
 
-    func getE2EUsersV2(account: String, serverUrl: String) -> Results<tableE2eUsersV2>? {
+    func getE2EUsersV2(account: String, ocId: String) -> Results<tableE2eUsersV2>? {
 
         do {
             let realm = try Realm()
             realm.refresh()
-            return realm.objects(tableE2eUsersV2.self).filter("account == %@ AND serverUrl == %@", account, serverUrl)
+            return realm.objects(tableE2eUsersV2.self).filter("account == %@ AND ocId == %@", account, ocId)
         } catch let error as NSError {
             NextcloudKit.shared.nkCommonInstance.writeLog("Could not access database: \(error)")
         }
@@ -326,12 +327,12 @@ extension NCManageDatabase {
         return nil
     }
 
-    func getE2EUsersV2(account: String, serverUrl: String, userId: String) -> tableE2eUsersV2? {
+    func getE2EUsersV2(account: String, ocId: String, userId: String) -> tableE2eUsersV2? {
 
         do {
             let realm = try Realm()
             realm.refresh()
-            return realm.objects(tableE2eUsersV2.self).filter("accountServerUrlUserId == %@", account + serverUrl + userId).first
+            return realm.objects(tableE2eUsersV2.self).filter("accountOcIdUserId == %@", account + ocId + userId).first
         } catch let error as NSError {
             NextcloudKit.shared.nkCommonInstance.writeLog("Could not access database: \(error)")
         }
@@ -339,12 +340,12 @@ extension NCManageDatabase {
         return nil
     }
 
-    func deleteE2EUsersV2(account: String, serverUrl: String) {
+    func deleteE2EUsersV2(account: String, ocId: String) {
 
         do {
             let realm = try Realm()
             try realm.write {
-                let results = realm.objects(tableE2eEncryption.self).filter("account == %@ AND serverUrl == %@", account, serverUrl)
+                let results = realm.objects(tableE2eEncryption.self).filter("account == %@ AND ocId == %@", account, ocId)
                 realm.delete(results)
             }
         } catch let error {
@@ -352,12 +353,12 @@ extension NCManageDatabase {
         }
     }
 
-    func getE2eMetadataV2(account: String, serverUrl: String) -> tableE2eMetadataV2? {
+    func getE2eMetadataV2(account: String, ocId: String) -> tableE2eMetadataV2? {
 
         do {
             let realm = try Realm()
             realm.refresh()
-            return realm.objects(tableE2eMetadataV2.self).filter("accountServerUrl == %@", account + serverUrl).first
+            return realm.objects(tableE2eMetadataV2.self).filter("accountOcId == %@", account + ocId).first
         } catch let error as NSError {
             NextcloudKit.shared.nkCommonInstance.writeLog("Could not access database: \(error)")
         }
@@ -365,22 +366,22 @@ extension NCManageDatabase {
         return nil
     }
 
-    func incrementCounterE2eMetadataV2(account: String, serverUrl: String, version: String) -> tableE2eMetadataV2? {
+    func incrementCounterE2eMetadataV2(account: String, ocId: String, version: String) -> tableE2eMetadataV2? {
 
         do {
             let realm = try Realm()
             try realm.write {
-                if let result = realm.objects(tableE2eMetadataV2.self).filter("accountServerUrl == %@", account + serverUrl).first {
+                if let result = realm.objects(tableE2eMetadataV2.self).filter("accountOcId == %@", account + ocId).first {
                     result.counter += 1
                 } else {
                     let addObject = tableE2eMetadataV2()
-                    addObject.accountServerUrl = account + serverUrl
+                    addObject.accountOcId = account + ocId
                     addObject.counter = 1
                     addObject.version = version
                     realm.add(addObject, update: .all)
                 }
             }
-            return realm.objects(tableE2eMetadataV2.self).filter("accountServerUrl == %@", account + serverUrl).first
+            return realm.objects(tableE2eMetadataV2.self).filter("accountOcId == %@", account + ocId).first
         } catch let error {
             NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)")
         }
@@ -388,13 +389,13 @@ extension NCManageDatabase {
         return nil
     }
 
-    func addE2eMetadataV2(account: String, serverUrl: String, keyChecksums: [String]?, deleted: Bool, counter: Int, folders: [String: String]?, version: String) {
+    func addE2eMetadataV2(account: String, ocId: String, keyChecksums: [String]?, deleted: Bool, counter: Int, folders: [String: String]?, version: String) {
 
         do {
             let realm = try Realm()
             try realm.write {
                 let addObject = tableE2eMetadataV2()
-                addObject.accountServerUrl = account + serverUrl
+                addObject.accountOcId = account + ocId
                 if let keyChecksums {
                     addObject.keyChecksums.append(objectsIn: keyChecksums)
                 }
@@ -406,6 +407,7 @@ extension NCManageDatabase {
                         foldersDictionary[folder.key] = folder.value
                     }
                 }
+                addObject.ocId = ocId
                 addObject.version = version
                 realm.add(addObject, update: .all)
             }
@@ -414,12 +416,12 @@ extension NCManageDatabase {
         }
     }
 
-    func deleteE2eMetadataV2(account: String, serverUrl: String) {
+    func deleteE2eMetadataV2(account: String, ocId: String) {
 
         do {
             let realm = try Realm()
             try realm.write {
-                let results = realm.objects(tableE2eMetadataV2.self).filter("accountServerUrl == %@", account + serverUrl)
+                let results = realm.objects(tableE2eMetadataV2.self).filter("accountOcId == %@", account + ocId)
                 realm.delete(results)
             }
         } catch let error {

+ 10 - 10
iOSClient/Networking/E2EE/NCEndToEndMetadataV20.swift

@@ -49,7 +49,7 @@ extension NCEndToEndMetadata {
         var decryptedMetadataKey: Data?
         var keyChecksums: [String] = []
 
-        if let user = NCManageDatabase.shared.getE2EUsersV2(account: account, serverUrl: serverUrl, userId: userId) {
+        if let user = NCManageDatabase.shared.getE2EUsersV2(account: account, ocId: ocId, userId: userId) {
             encryptedMetadataKey = user.encryptedMetadataKey
             metadataKey = user.metadataKey
         } else {
@@ -59,11 +59,11 @@ extension NCEndToEndMetadata {
             guard let metadataKeyEncrypted = NCEndToEndEncryption.sharedManager().encryptAsymmetricData(keyGenerated, privateKey: privateKey) else { return (nil, nil) }
             encryptedMetadataKey = metadataKeyEncrypted.base64EncodedString()
 
-            NCManageDatabase.shared.addE2EUsersV2(account: account, serverUrl: serverUrl, userId: userId, certificate: certificate, encryptedFiledropKey: nil, encryptedMetadataKey: encryptedMetadataKey, decryptedFiledropKey: nil, decryptedMetadataKey: decryptedMetadataKey, filedropKey: nil, metadataKey: metadataKey)
+            NCManageDatabase.shared.addE2EUsersV2(account: account, ocId: ocId, userId: userId, certificate: certificate, encryptedFiledropKey: nil, encryptedMetadataKey: encryptedMetadataKey, decryptedFiledropKey: nil, decryptedMetadataKey: decryptedMetadataKey, filedropKey: nil, metadataKey: metadataKey)
         }
 
         // Create E2eeV20.Users
-        if let e2eUsers = NCManageDatabase.shared.getE2EUsersV2(account: account, serverUrl: serverUrl) {
+        if let e2eUsers = NCManageDatabase.shared.getE2EUsersV2(account: account, ocId: ocId) {
             for user in e2eUsers {
                 usersCodable.append(E2eeV20.Users(userId: user.userId, certificate: user.certificate, encryptedMetadataKey: user.encryptedMetadataKey, encryptedFiledropKey: user.encryptedFiledropKey))
 
@@ -74,7 +74,7 @@ extension NCEndToEndMetadata {
         }
 
         // tableE2eMetadataV2
-        guard let e2eMetadataV2 = NCManageDatabase.shared.incrementCounterE2eMetadataV2(account: account, serverUrl: serverUrl, version: "2.0") else {
+        guard let e2eMetadataV2 = NCManageDatabase.shared.incrementCounterE2eMetadataV2(account: account, ocId: ocId, version: "2.0") else {
             return (nil, nil)
         }
 
@@ -195,9 +195,9 @@ extension NCEndToEndMetadata {
             }
 
             // DATA
-            NCManageDatabase.shared.deleteE2eMetadataV2(account: account, serverUrl: serverUrl)
-            NCManageDatabase.shared.deleteE2EUsersV2(account: account, serverUrl: serverUrl)
-            NCManageDatabase.shared.deleteE2eEncryption(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", account, serverUrl))
+            //NCManageDatabase.shared.deleteE2eMetadataV2(account: account, serverUrl: serverUrl)
+            //NCManageDatabase.shared.deleteE2EUsersV2(account: account, serverUrl: serverUrl)
+            //NCManageDatabase.shared.deleteE2eEncryption(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", account, serverUrl))
 
             //
             // users
@@ -226,14 +226,14 @@ extension NCEndToEndMetadata {
                     }
                 }
 
-                NCManageDatabase.shared.addE2EUsersV2(account: account, serverUrl: serverUrl, userId: user.userId, certificate: user.certificate, encryptedFiledropKey: user.encryptedFiledropKey, encryptedMetadataKey: user.encryptedMetadataKey, decryptedFiledropKey: decryptedFiledropKey, decryptedMetadataKey: decryptedMetadataKey, filedropKey: filedropKey, metadataKey: metadataKey)
+                NCManageDatabase.shared.addE2EUsersV2(account: account, ocId: ocId, userId: user.userId, certificate: user.certificate, encryptedFiledropKey: user.encryptedFiledropKey, encryptedMetadataKey: user.encryptedMetadataKey, decryptedFiledropKey: decryptedFiledropKey, decryptedMetadataKey: decryptedMetadataKey, filedropKey: filedropKey, metadataKey: metadataKey)
             }
 
             //
             // metadata
             //
 
-            if let tableE2eUsersV2 = NCManageDatabase.shared.getE2EUsersV2(account: account, serverUrl: serverUrl, userId: userId),
+            if let tableE2eUsersV2 = NCManageDatabase.shared.getE2EUsersV2(account: account, ocId: ocId, userId: userId),
                let metadataKey = tableE2eUsersV2.metadataKey,
                let decryptedMetadataKey = tableE2eUsersV2.decryptedMetadataKey {
 
@@ -256,7 +256,7 @@ extension NCEndToEndMetadata {
                                 return NKError(errorCode: NCGlobal.shared.errorE2EEKeyChecksums, errorDescription: NSLocalizedString("_e2ee_checksums_error_", comment: ""))
                             }
 
-                            NCManageDatabase.shared.addE2eMetadataV2(account: account, serverUrl: serverUrl, keyChecksums: json.keyChecksums, deleted: json.deleted ?? false, counter: json.counter, folders: json.folders, version: version)
+                            NCManageDatabase.shared.addE2eMetadataV2(account: account, ocId: ocId, keyChecksums: json.keyChecksums, deleted: json.deleted ?? false, counter: json.counter, folders: json.folders, version: version)
 
                             if let files = json.files {
                                 for file in files {

+ 1 - 1
iOSClient/Networking/E2EE/NCNetworkingE2EE.swift

@@ -52,7 +52,7 @@ class NCNetworkingE2EE: NSObject {
             e2eToken = tableLock.e2eToken
         }
 
-        if e2EEApiVersion == "2.0", let result = NCManageDatabase.shared.getE2eMetadataV2(account: account, serverUrl: serverUrl) {
+        if e2EEApiVersion == "2.0", let result = NCManageDatabase.shared.getE2eMetadataV2(account: account, ocId: directory.ocId) {
             e2eCounter = "\(result.counter)"
         }
 

+ 15 - 16
iOSClient/Networking/E2EE/NCNetworkingE2EEUpload.swift

@@ -125,8 +125,7 @@ class NCNetworkingE2EEUpload: NSObject {
     private func createE2Ee(metadata: tableMetadata, e2eToken: String, fileId: String) async -> (NKError) {
 
         var key: NSString?, initializationVector: NSString?, authenticationTag: NSString?
-        let objectE2eEncryption = tableE2eEncryption()
-        let fileNameLocalPath = CCUtility.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileName)!
+        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 {
@@ -146,23 +145,23 @@ class NCNetworkingE2EEUpload: NSObject {
 
         // Add new metadata
         if let result = NCManageDatabase.shared.getE2eEncryption(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", metadata.account, metadata.serverUrl)) {
-            objectE2eEncryption.metadataKey = result.metadataKey
-            objectE2eEncryption.metadataKeyIndex = result.metadataKeyIndex
+            object.metadataKey = result.metadataKey
+            object.metadataKeyIndex = result.metadataKeyIndex
         } else {
             let key = NCEndToEndEncryption.sharedManager()?.generateKey() as NSData?
-            objectE2eEncryption.metadataKey = key!.base64EncodedString()
-            objectE2eEncryption.metadataKeyIndex = 0
+            object.metadataKey = key!.base64EncodedString()
+            object.metadataKeyIndex = 0
         }
-        objectE2eEncryption.account = metadata.account
-        objectE2eEncryption.authenticationTag = authenticationTag! as String
-        objectE2eEncryption.fileName = metadata.fileNameView
-        objectE2eEncryption.fileNameIdentifier = metadata.fileName
-        objectE2eEncryption.fileNamePath = fileNameLocalPath
-        objectE2eEncryption.key = key! as String
-        objectE2eEncryption.initializationVector = initializationVector! as String
-        objectE2eEncryption.mimeType = metadata.contentType
-        objectE2eEncryption.serverUrl = metadata.serverUrl
-        NCManageDatabase.shared.addE2eEncryption(objectE2eEncryption)
+        object.account = metadata.account
+        object.authenticationTag = authenticationTag! as String
+        object.fileName = metadata.fileNameView
+        object.fileNameIdentifier = metadata.fileName
+        object.fileNamePath = CCUtility.returnFileNamePath(fromFileName: metadata.fileName, serverUrl: metadata.serverUrl, urlBase: metadata.urlBase, userId: metadata.userId, account: metadata.account)
+        object.key = key! as String
+        object.initializationVector = initializationVector! as String
+        object.mimeType = metadata.contentType
+        object.serverUrl = metadata.serverUrl
+        NCManageDatabase.shared.addE2eEncryption(object)
 
         let resultEncoder = NCEndToEndMetadata().encoderMetadata(account: metadata.account, serverUrl: metadata.serverUrl, userId: metadata.userId)
         if resultEncoder.metadata == nil {