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

+ 1 - 1
Brand/Database.swift

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

+ 47 - 56
iOSClient/Data/NCManageDatabase+E2EE.swift

@@ -27,37 +27,30 @@ import NextcloudKit
 
 class tableE2eEncryptionLock: Object {
 
-    @objc dynamic var account = ""
-    @objc dynamic var date = NSDate()
-    @objc dynamic var fileId = ""
-    @objc dynamic var serverUrl = ""
-    @objc dynamic var e2eToken = ""
-
-    override static func primaryKey() -> String {
-        return "fileId"
-    }
+    @Persisted(primaryKey: true) var fileId = ""
+    @Persisted var account = ""
+    @Persisted var date = Date()
+    @Persisted var serverUrl = ""
+    @Persisted var e2eToken = ""
 }
 
 class tableE2eEncryption: Object {
 
-    @objc dynamic var account = ""
-    @objc dynamic var authenticationTag: String = ""
-    @objc dynamic var blob = "files"
-    @objc dynamic var fileName = ""
-    @objc dynamic var fileNameIdentifier = ""
-    @objc dynamic var fileNamePath = ""
-    @objc dynamic var key = ""
-    @objc dynamic var initializationVector = ""
-    @objc dynamic var metadataKey = ""
-    @objc dynamic var metadataKeyFiledrop = ""
-    @objc dynamic var metadataKeyIndex: Int = 0
-    @objc dynamic var metadataVersion: Double = 0
-    @objc dynamic var mimeType = ""
-    @objc dynamic var serverUrl = ""
-
-    override static func primaryKey() -> String {
-        return "fileNamePath"
-    }
+    @Persisted(primaryKey: true) var accountOcIdServerUrlFileNameIdentifier = ""
+    @Persisted var account = ""
+    @Persisted var authenticationTag: String = ""
+    @Persisted var blob = "files"
+    @Persisted var fileName = ""
+    @Persisted var fileNameIdentifier = ""
+    @Persisted var key = ""
+    @Persisted var initializationVector = ""
+    @Persisted var metadataKey = ""
+    @Persisted var metadataKeyFiledrop = ""
+    @Persisted var metadataKeyIndex: Int = 0
+    @Persisted var metadataVersion: Double = 0
+    @Persisted var mimeType = ""
+    @Persisted var ocIdServerUrl: String = ""
+    @Persisted var serverUrl = ""
 }
 
 // MARK: -
@@ -76,19 +69,19 @@ class tableE2eMetadata: Object {
 
 class tableE2eMetadataV2: Object {
 
-    @Persisted(primaryKey: true) var accountOcId = ""
+    @Persisted(primaryKey: true) var accountOcIdServerUrl = ""
     @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 ocIdServerUrl: String = ""
     @Persisted var serverUrl: String = ""
     @Persisted var version: String = "2.0"
 }
 
 class tableE2eUsersV2: Object {
 
-    @Persisted(primaryKey: true) var accountOcIdUserId = ""
+    @Persisted(primaryKey: true) var accountOcIdServerUrlUserId = ""
     @Persisted var account = ""
     @Persisted var certificate = ""
     @Persisted var encryptedFiledropKey: String?
@@ -97,7 +90,7 @@ class tableE2eUsersV2: Object {
     @Persisted var decryptedMetadataKey: Data?
     @Persisted var filedropKey: String?
     @Persisted var metadataKey: String?
-    @Persisted var ocId: String = ""
+    @Persisted var ocIdServerUrl: String = ""
     @Persisted var serverUrl: String = ""
     @Persisted var userId = ""
 }
@@ -163,17 +156,15 @@ extension NCManageDatabase {
 
     @objc func renameFileE2eEncryption(serverUrl: String, fileNameIdentifier: String, newFileName: String, newFileNamePath: String) {
 
-        guard let activeAccount = self.getActiveAccount() else { return }
+        guard let account = self.getActiveAccount() else { return }
 
         do {
             let realm = try Realm()
+            realm.refresh()
             try realm.write {
-                guard let result = realm.objects(tableE2eEncryption.self).filter("account == %@ AND serverUrl == %@ AND fileNameIdentifier == %@", activeAccount.account, serverUrl, fileNameIdentifier).first else { return }
-                let object = tableE2eEncryption.init(value: result)
-                realm.delete(result)
-                object.fileName = newFileName
-                object.fileNamePath = newFileNamePath
-                realm.add(object)
+                guard let result = realm.objects(tableE2eEncryption.self).filter("account == %@ AND serverUrl == %@ AND fileNameIdentifier == %@", account, serverUrl, fileNameIdentifier).first else { return }
+                result.fileName = newFileName
+                realm.add(result, update: .all)
             }
         } catch let error as NSError {
             NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)")
@@ -285,7 +276,7 @@ extension NCManageDatabase {
 
     func addE2EUsersV2(account: String,
                        serverUrl: String,
-                       ocId: String,
+                       ocIdServerUrl: String,
                        userId: String,
                        certificate: String,
                        encryptedFiledropKey: String?,
@@ -299,7 +290,7 @@ extension NCManageDatabase {
             let realm = try Realm()
             try realm.write {
                 let object = tableE2eUsersV2()
-                object.accountOcIdUserId = account + ocId + userId
+                object.accountOcIdServerUrlUserId = account + ocIdServerUrl + userId
                 object.account = account
                 object.certificate = certificate
                 object.encryptedFiledropKey = encryptedFiledropKey
@@ -308,7 +299,7 @@ extension NCManageDatabase {
                 object.decryptedMetadataKey = decryptedMetadataKey
                 object.filedropKey = filedropKey
                 object.metadataKey = metadataKey
-                object.ocId = ocId
+                object.ocIdServerUrl = ocIdServerUrl
                 object.serverUrl = serverUrl
                 object.userId = userId
                 realm.add(object, update: .all)
@@ -318,12 +309,12 @@ extension NCManageDatabase {
         }
     }
 
-    func getE2EUsersV2(account: String, ocId: String) -> Results<tableE2eUsersV2>? {
+    func getE2EUsersV2(account: String, ocIdServerUrl: String) -> Results<tableE2eUsersV2>? {
 
         do {
             let realm = try Realm()
             realm.refresh()
-            return realm.objects(tableE2eUsersV2.self).filter("account == %@ AND ocId == %@", account, ocId)
+            return realm.objects(tableE2eUsersV2.self).filter("account == %@ AND ocIdServerUrl == %@", account, ocIdServerUrl)
         } catch let error as NSError {
             NextcloudKit.shared.nkCommonInstance.writeLog("Could not access database: \(error)")
         }
@@ -331,12 +322,12 @@ extension NCManageDatabase {
         return nil
     }
 
-    func getE2EUsersV2(account: String, ocId: String, userId: String) -> tableE2eUsersV2? {
+    func getE2EUsersV2(account: String, ocIdServerUrl: String, userId: String) -> tableE2eUsersV2? {
 
         do {
             let realm = try Realm()
             realm.refresh()
-            return realm.objects(tableE2eUsersV2.self).filter("accountOcIdUserId == %@", account + ocId + userId).first
+            return realm.objects(tableE2eUsersV2.self).filter("accountOcIdServerUrlUserId == %@", account + ocIdServerUrl + userId).first
         } catch let error as NSError {
             NextcloudKit.shared.nkCommonInstance.writeLog("Could not access database: \(error)")
         }
@@ -344,12 +335,12 @@ extension NCManageDatabase {
         return nil
     }
 
-    func deleteE2EUsersV2(account: String, ocId: String) {
+    func deleteE2EUsersV2(account: String, ocIdServerUrl: String) {
 
         do {
             let realm = try Realm()
             try realm.write {
-                let results = realm.objects(tableE2eEncryption.self).filter("account == %@ AND ocId == %@", account, ocId)
+                let results = realm.objects(tableE2eEncryption.self).filter("account == %@ AND ocIdServerUrl == %@", account, ocIdServerUrl)
                 realm.delete(results)
             }
         } catch let error {
@@ -357,12 +348,12 @@ extension NCManageDatabase {
         }
     }
 
-    func getE2eMetadataV2(account: String, ocId: String) -> tableE2eMetadataV2? {
+    func getE2eMetadataV2(account: String, ocIdServerUrl: String) -> tableE2eMetadataV2? {
 
         do {
             let realm = try Realm()
             realm.refresh()
-            return realm.objects(tableE2eMetadataV2.self).filter("accountOcId == %@", account + ocId).first
+            return realm.objects(tableE2eMetadataV2.self).filter("accountOcIdServerUrl == %@", account + ocIdServerUrl).first
         } catch let error as NSError {
             NextcloudKit.shared.nkCommonInstance.writeLog("Could not access database: \(error)")
         }
@@ -370,23 +361,23 @@ extension NCManageDatabase {
         return nil
     }
 
-    func incrementCounterE2eMetadataV2(account: String, serverUrl: String, ocId: String, version: String) -> tableE2eMetadataV2? {
+    func incrementCounterE2eMetadataV2(account: String, serverUrl: String, ocIdServerUrl: String, version: String) -> tableE2eMetadataV2? {
 
         do {
             let realm = try Realm()
             try realm.write {
-                if let result = realm.objects(tableE2eMetadataV2.self).filter("accountOcId == %@", account + ocId).first {
+                if let result = realm.objects(tableE2eMetadataV2.self).filter("accountOcIdServerUrl == %@", account + ocIdServerUrl).first {
                     result.counter += 1
                 } else {
                     let object = tableE2eMetadataV2()
-                    object.accountOcId = account + ocId
+                    object.accountOcIdServerUrl = account + ocIdServerUrl
                     object.serverUrl = serverUrl
                     object.counter = 1
                     object.version = version
                     realm.add(object, update: .all)
                 }
             }
-            return realm.objects(tableE2eMetadataV2.self).filter("accountOcId == %@", account + ocId).first
+            return realm.objects(tableE2eMetadataV2.self).filter("accountOcIdServerUrl == %@", account + ocIdServerUrl).first
         } catch let error {
             NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)")
         }
@@ -394,13 +385,13 @@ extension NCManageDatabase {
         return nil
     }
 
-    func addE2eMetadataV2(account: String, serverUrl: String, ocId: String, keyChecksums: [String]?, deleted: Bool, counter: Int, folders: [String: String]?, version: String) {
+    func addE2eMetadataV2(account: String, serverUrl: String, ocIdServerUrl: String, keyChecksums: [String]?, deleted: Bool, counter: Int, folders: [String: String]?, version: String) {
 
         do {
             let realm = try Realm()
             try realm.write {
                 let object = tableE2eMetadataV2()
-                object.accountOcId = account + ocId
+                object.accountOcIdServerUrl = account + ocIdServerUrl
                 if let keyChecksums {
                     object.keyChecksums.append(objectsIn: keyChecksums)
                 }
@@ -412,7 +403,7 @@ extension NCManageDatabase {
                         foldersDictionary[folder.key] = folder.value
                     }
                 }
-                object.ocId = ocId
+                object.ocIdServerUrl = ocIdServerUrl
                 object.serverUrl = serverUrl
                 object.version = version
                 realm.add(object, update: .all)

+ 4 - 1
iOSClient/Data/NCManageDatabase.swift

@@ -98,9 +98,12 @@ class NCManageDatabase: NSObject {
                         migration.deleteData(forType: tableVideo.className())
                     }
 
-                    if oldSchemaVersion < 304 {
+                    if oldSchemaVersion < 306 {
                         migration.deleteData(forType: tableChunk.className())
                         migration.deleteData(forType: tableMetadata.className())
+                        migration.deleteData(forType: tableE2eEncryptionLock.className())
+                        migration.deleteData(forType: tableE2eEncryption.className())
+                        migration.deleteData(forType: tableE2eMetadata.className())
                     }
 
                 }, shouldCompactOnLaunch: { totalBytes, usedBytes in

+ 5 - 5
iOSClient/Networking/E2EE/NCEndToEndMetadata.swift

@@ -147,9 +147,9 @@ class NCEndToEndMetadata: NSObject {
 
         switch e2EEApiVersion {
         case "1.2":
-            return encoderMetadataV12(account: account, serverUrl: serverUrl, ocId: directory.ocId)
+            return encoderMetadataV12(account: account, serverUrl: serverUrl, ocIdServerUrl: directory.ocId)
         case "2.0":
-            return encoderMetadataV20(account: account, serverUrl: serverUrl, ocId: directory.ocId, userId: userId)
+            return encoderMetadataV20(account: account, serverUrl: serverUrl, ocIdServerUrl: directory.ocId, userId: userId)
         default:
             return (nil, nil)
         }
@@ -170,11 +170,11 @@ class NCEndToEndMetadata: NSObject {
         let decoder = JSONDecoder()
 
         if (try? decoder.decode(E2eeV1.self, from: data)) != nil {
-            return decoderMetadataV1(json, serverUrl: serverUrl, account: account, ocId: directory.ocId, urlBase: urlBase, userId: userId)
+            return decoderMetadataV1(json, serverUrl: serverUrl, account: account, ocIdServerUrl: directory.ocId, urlBase: urlBase, userId: userId)
         } else if (try? decoder.decode(E2eeV12.self, from: data)) != nil {
-            return decoderMetadataV12(json, serverUrl: serverUrl, account: account, ocId: directory.ocId, urlBase: urlBase, userId: userId, ownerId: ownerId)
+            return decoderMetadataV12(json, serverUrl: serverUrl, account: account, ocIdServerUrl: directory.ocId, urlBase: urlBase, userId: userId, ownerId: ownerId)
         } else if (try? decoder.decode(E2eeV20.self, from: data)) != nil {
-            return decoderMetadataV20(json, signature: signature, serverUrl: serverUrl, account: account, ocId: directory.ocId, urlBase: urlBase, userId: userId, ownerId: ownerId)
+            return decoderMetadataV20(json, signature: signature, serverUrl: serverUrl, account: account, ocIdServerUrl: directory.ocId, urlBase: urlBase, userId: userId, ownerId: ownerId)
         } else {
             return NKError(errorCode: NCGlobal.shared.errorInternalError, errorDescription: "Server E2EE version " + NCGlobal.shared.capabilityE2EEApiVersion + ", not compatible")
         }

+ 9 - 6
iOSClient/Networking/E2EE/NCEndToEndMetadataV1.swift

@@ -28,7 +28,7 @@ extension NCEndToEndMetadata {
     // MARK: Ecode JSON Metadata V1.2
     // --------------------------------------------------------------------------------------------
 
-    func encoderMetadataV12(account: String, serverUrl: String, ocId: String) -> (metadata: String?, signature: String?) {
+    func encoderMetadataV12(account: String, serverUrl: String, ocIdServerUrl: String) -> (metadata: String?, signature: String?) {
 
         let encoder = JSONEncoder()
         var metadataKey: String = ""
@@ -138,7 +138,7 @@ extension NCEndToEndMetadata {
     // MARK: Decode JSON Metadata V1.2
     // --------------------------------------------------------------------------------------------
 
-    func decoderMetadataV12(_ json: String, serverUrl: String, account: String, ocId: String, urlBase: String, userId: String, ownerId: String?) -> NKError {
+    func decoderMetadataV12(_ json: String, serverUrl: String, account: String, ocIdServerUrl: String, urlBase: String, userId: String, ownerId: String?) -> NKError {
 
         guard let data = json.data(using: .utf8) else {
             return NKError(errorCode: NCGlobal.shared.errorE2EE, errorDescription: "Error decoding JSON")
@@ -198,17 +198,18 @@ extension NCEndToEndMetadata {
 
                                 let object = tableE2eEncryption()
 
+                                object.accountOcIdServerUrlFileNameIdentifier = account + ocIdServerUrl + fileNameIdentifier
                                 object.account = account
                                 object.authenticationTag = authenticationTag ?? ""
                                 object.blob = "files"
                                 object.fileName = encrypted.filename
                                 object.fileNameIdentifier = fileNameIdentifier
-                                object.fileNamePath = CCUtility.returnFileNamePath(fromFileName: encrypted.filename, serverUrl: serverUrl, urlBase: urlBase, userId: userId, account: account)
                                 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
@@ -259,18 +260,19 @@ extension NCEndToEndMetadata {
 
                                 let object = tableE2eEncryption()
 
+                                object.accountOcIdServerUrlFileNameIdentifier = account + ocIdServerUrl + fileNameIdentifier
                                 object.account = account
                                 object.authenticationTag = filedrop.authenticationTag ?? ""
                                 object.blob = "filedrop"
                                 object.fileName = encrypted.filename
                                 object.fileNameIdentifier = fileNameIdentifier
-                                object.fileNamePath = CCUtility.returnFileNamePath(fromFileName: encrypted.filename, serverUrl: serverUrl, urlBase: urlBase, userId: userId, account: account)
                                 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
@@ -313,7 +315,7 @@ extension NCEndToEndMetadata {
     // MARK: Decode JSON Metadata V1.1
     // --------------------------------------------------------------------------------------------
 
-    func decoderMetadataV1(_ json: String, serverUrl: String, account: String, ocId: String, urlBase: String, userId: String) -> NKError {
+    func decoderMetadataV1(_ json: String, serverUrl: String, account: String, ocIdServerUrl: String, urlBase: String, userId: String) -> NKError {
 
         guard let data = json.data(using: .utf8) else {
             return NKError(errorCode: NCGlobal.shared.errorE2EE, errorDescription: "Error decoding JSON")
@@ -379,18 +381,19 @@ extension NCEndToEndMetadata {
 
                                 let object = tableE2eEncryption()
 
+                                object.accountOcIdServerUrlFileNameIdentifier = account + ocIdServerUrl + fileNameIdentifier
                                 object.account = account
                                 object.authenticationTag = authenticationTag ?? ""
                                 object.blob = "files"
                                 object.fileName = encrypted.filename
                                 object.fileNameIdentifier = fileNameIdentifier
-                                object.fileNamePath = CCUtility.returnFileNamePath(fromFileName: encrypted.filename, serverUrl: serverUrl, urlBase: urlBase, userId: userId, account: account)
                                 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

+ 11 - 12
iOSClient/Networking/E2EE/NCEndToEndMetadataV20.swift

@@ -31,7 +31,7 @@ extension NCEndToEndMetadata {
     // MARK: Ecode JSON Metadata V2.0
     // --------------------------------------------------------------------------------------------
 
-    func encoderMetadataV20(account: String, serverUrl: String, ocId: String, userId: String) -> (metadata: String?, signature: String?) {
+    func encoderMetadataV20(account: String, serverUrl: String, ocIdServerUrl: String, userId: String) -> (metadata: String?, signature: String?) {
 
         guard let privateKey = CCUtility.getEndToEndPrivateKey(account),
               let publicKey = CCUtility.getEndToEndPublicKey(account),
@@ -49,7 +49,7 @@ extension NCEndToEndMetadata {
         var decryptedMetadataKey: Data?
         var keyChecksums: [String] = []
 
-        if let user = NCManageDatabase.shared.getE2EUsersV2(account: account, ocId: ocId, userId: userId) {
+        if let user = NCManageDatabase.shared.getE2EUsersV2(account: account, ocIdServerUrl: ocIdServerUrl, 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, ocId: ocId, userId: userId, certificate: certificate, encryptedFiledropKey: nil, encryptedMetadataKey: encryptedMetadataKey, decryptedFiledropKey: nil, decryptedMetadataKey: decryptedMetadataKey, filedropKey: nil, metadataKey: metadataKey)
+            NCManageDatabase.shared.addE2EUsersV2(account: account, serverUrl: serverUrl, ocIdServerUrl: ocIdServerUrl, 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, ocId: ocId) {
+        if let e2eUsers = NCManageDatabase.shared.getE2EUsersV2(account: account, ocIdServerUrl: ocIdServerUrl) {
             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, ocId: ocId, version: "2.0") else {
+        guard let e2eMetadataV2 = NCManageDatabase.shared.incrementCounterE2eMetadataV2(account: account, serverUrl: serverUrl, ocIdServerUrl: ocIdServerUrl, version: "2.0") else {
             return (nil, nil)
         }
 
@@ -137,7 +137,7 @@ extension NCEndToEndMetadata {
     // MARK: Decode JSON Metadata V2.0
     // --------------------------------------------------------------------------------------------
 
-    func decoderMetadataV20(_ json: String, signature: String?, serverUrl: String, account: String, ocId: String, urlBase: String, userId: String, ownerId: String?) -> NKError {
+    func decoderMetadataV20(_ json: String, signature: String?, serverUrl: String, account: String, ocIdServerUrl: String, urlBase: String, userId: String, ownerId: String?) -> NKError {
 
         guard let data = json.data(using: .utf8) else {
             return NKError(errorCode: NCGlobal.shared.errorE2EE, errorDescription: "Error decoding JSON")
@@ -149,16 +149,17 @@ extension NCEndToEndMetadata {
 
                 let object = tableE2eEncryption()
 
+                object.accountOcIdServerUrlFileNameIdentifier = account + ocIdServerUrl + fileNameIdentifier
                 object.account = account
                 object.authenticationTag = authenticationTag
                 object.blob = "files"
                 object.fileName = filename
                 object.fileNameIdentifier = fileNameIdentifier
-                object.fileNamePath = CCUtility.returnFileNamePath(fromFileName: filename, serverUrl: serverUrl, urlBase: urlBase, userId: userId, account: account)
                 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 +196,7 @@ 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))
 
             //
             // users
@@ -226,14 +225,14 @@ extension NCEndToEndMetadata {
                     }
                 }
 
-                NCManageDatabase.shared.addE2EUsersV2(account: account, serverUrl: serverUrl, ocId: ocId, 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, serverUrl: serverUrl, ocIdServerUrl: ocIdServerUrl, 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, ocId: ocId, userId: userId),
+            if let tableE2eUsersV2 = NCManageDatabase.shared.getE2EUsersV2(account: account, ocIdServerUrl: ocIdServerUrl, userId: userId),
                let metadataKey = tableE2eUsersV2.metadataKey,
                let decryptedMetadataKey = tableE2eUsersV2.decryptedMetadataKey {
 
@@ -256,7 +255,7 @@ extension NCEndToEndMetadata {
                                 return NKError(errorCode: NCGlobal.shared.errorE2EEKeyChecksums, errorDescription: NSLocalizedString("_e2ee_checksums_error_", comment: ""))
                             }
 
-                            NCManageDatabase.shared.addE2eMetadataV2(account: account, serverUrl: serverUrl, ocId: ocId, keyChecksums: json.keyChecksums, deleted: json.deleted ?? false, counter: json.counter, folders: json.folders, version: version)
+                            NCManageDatabase.shared.addE2eMetadataV2(account: account, serverUrl: serverUrl, ocIdServerUrl: ocIdServerUrl, 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, ocId: directory.ocId) {
+        if e2EEApiVersion == "2.0", let result = NCManageDatabase.shared.getE2eMetadataV2(account: account, ocIdServerUrl: directory.ocId) {
             e2eCounter = "\(result.counter)"
         }
 

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

@@ -107,7 +107,7 @@ class NCNetworkingE2EECreateFolder: NSObject {
                 let markE2EEFolderResults = await NextcloudKit.shared.markE2EEFolder(fileId: fileId, delete: false)
                 error = markE2EEFolderResults.error
                 if error == .success {
-                    error = await createE2Ee(e2eToken: e2eToken, fileIdLock: fileIdLock, account: account, fileNameFolder: fileNameFolder, fileNameIdentifier: fileNameIdentifier, serverUrl: serverUrl, urlBase: urlBase, userId: userId)
+                    error = await createE2Ee(e2eToken: e2eToken, fileIdLock: fileIdLock, account: account, fileNameFolder: fileNameFolder, fileNameIdentifier: fileNameIdentifier, serverUrl: serverUrl, ocIdServerUrl: ocId!, urlBase: urlBase, userId: userId)
                 }
             }
         }
@@ -121,7 +121,7 @@ class NCNetworkingE2EECreateFolder: NSObject {
         return error
     }
 
-    private func createE2Ee(e2eToken: String, fileIdLock: String, account: String, fileNameFolder: String, fileNameIdentifier: String, serverUrl: String,  urlBase: String, userId: String) async -> (NKError) {
+    private func createE2Ee(e2eToken: String, fileIdLock: String, account: String, fileNameFolder: String, fileNameIdentifier: String, serverUrl: String, ocIdServerUrl: String, urlBase: String, userId: String) async -> (NKError) {
 
         var key: NSString?
         var initializationVector: NSString?
@@ -138,11 +138,12 @@ class NCNetworkingE2EECreateFolder: NSObject {
 
         // Add new metadata
         NCEndToEndEncryption.sharedManager()?.encodedkey(&key, initializationVector: &initializationVector)
+
+        object.accountOcIdServerUrlFileNameIdentifier = account + ocIdServerUrl + fileNameIdentifier
         object.account = account
         object.authenticationTag = ""
         object.fileName = fileNameFolder
         object.fileNameIdentifier = fileNameIdentifier
-        object.fileNamePath = ""
         object.key = key! as String
         object.initializationVector = initializationVector! as String
         if let result = NCManageDatabase.shared.getE2eEncryption(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", account, serverUrl)) {
@@ -153,6 +154,7 @@ class NCNetworkingE2EECreateFolder: NSObject {
             object.metadataKeyIndex = 0
         }
         object.mimeType = "httpd/unix-directory"
+        object.ocIdServerUrl = ocIdServerUrl
         object.serverUrl = serverUrl
         NCManageDatabase.shared.addE2eEncryption(object)
 

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

@@ -59,6 +59,7 @@ class NCNetworkingE2EEUpload: NSObject {
         metadata.session = NextcloudKit.shared.nkCommonInstance.sessionIdentifierUpload
         metadata.sessionError = ""
         guard let result = NCManageDatabase.shared.addMetadata(metadata) else { return errorCreateEncrypted }
+        guard let directory = NCManageDatabase.shared.getTableDirectory(predicate:  NSPredicate(format: "account == %@ AND serverUrl == %@", metadata.account, metadata.serverUrl)) else { return errorCreateEncrypted }
         metadata = result
 
         // ** Lock **
@@ -71,7 +72,7 @@ class NCNetworkingE2EEUpload: NSObject {
         }
 
         // Send e2e metadata
-        let createE2EeError = await createE2Ee(metadata: metadata, e2eToken: e2eToken, fileId: fileId)
+        let createE2EeError = await createE2Ee(metadata: metadata, e2eToken: e2eToken, ocIdServerUrl: directory.ocId, fileId: fileId)
         guard createE2EeError == .success else {
             // ** Unlock **
             await NCNetworkingE2EE.shared.unlock(account: metadata.account, serverUrl: metadata.serverUrl)
@@ -122,7 +123,7 @@ class NCNetworkingE2EEUpload: NSObject {
         return(sendFileResults.error)
     }
 
-    private func createE2Ee(metadata: tableMetadata, e2eToken: String, fileId: String) async -> (NKError) {
+    private func createE2Ee(metadata: tableMetadata, e2eToken: String, ocIdServerUrl: String, fileId: String) async -> (NKError) {
 
         var key: NSString?, initializationVector: NSString?, authenticationTag: NSString?
         let object = tableE2eEncryption()
@@ -152,14 +153,15 @@ 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.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.ocIdServerUrl = ocIdServerUrl
         object.serverUrl = metadata.serverUrl
         NCManageDatabase.shared.addE2eEncryption(object)