Marino Faggiana 1 year ago
parent
commit
a357c89efa

+ 10 - 1
iOSClient/Data/NCManageDatabase+E2EE.swift

@@ -365,18 +365,27 @@ extension NCManageDatabase {
         return nil
     }
 
-    func incrementCounterE2eMetadataV2(account: String, serverUrl: String) {
+    func incrementCounterE2eMetadataV2(account: String, serverUrl: String, version: String) -> tableE2eMetadataV2? {
 
         do {
             let realm = try Realm()
             try realm.write {
                 if let result = realm.objects(tableE2eMetadataV2.self).filter("accountServerUrl == %@", account + serverUrl).first {
                     result.counter += 1
+                } else {
+                    let addObject = tableE2eMetadataV2()
+                    addObject.accountServerUrl = account + serverUrl
+                    addObject.counter = 1
+                    addObject.version = version
+                    realm.add(addObject, update: .all)
                 }
             }
+            return realm.objects(tableE2eMetadataV2.self).filter("accountServerUrl == %@", account + serverUrl).first
         } catch let error {
             NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)")
         }
+
+        return nil
     }
 
     func addE2eMetadataV2(account: String, serverUrl: String, keyChecksums: [String]?, deleted: Bool, counter: Int, folders: [String: String]?, version: String) {

+ 10 - 6
iOSClient/Networking/E2EE/NCEndToEndMetadata.swift

@@ -141,11 +141,15 @@ class NCEndToEndMetadata: NSObject {
 
         let e2EEApiVersion = NCGlobal.shared.capabilityE2EEApiVersion
 
+        guard let directory = NCManageDatabase.shared.getTableDirectory(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", account, serverUrl)) else {
+            return (nil, nil)
+        }
+
         switch e2EEApiVersion {
         case "1.2":
-            return encoderMetadataV12(account: account, serverUrl: serverUrl)
+            return encoderMetadataV12(account: account, serverUrl: serverUrl, ocId: directory.ocId)
         case "2.0":
-            return encoderMetadataV20(account: account, serverUrl: serverUrl, userId: userId)
+            return encoderMetadataV20(account: account, serverUrl: serverUrl, ocId: directory.ocId, userId: userId)
         default:
             return (nil, nil)
         }
@@ -157,7 +161,7 @@ class NCEndToEndMetadata: NSObject {
 
     func decoderMetadata(_ json: String, signature: String?, serverUrl: String, account: String, urlBase: String, userId: String, ownerId: String?) -> NKError {
 
-        guard let data = json.data(using: .utf8) else {
+        guard let data = json.data(using: .utf8), let directory = NCManageDatabase.shared.getTableDirectory(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", account, serverUrl)) else {
             return (NKError(errorCode: NCGlobal.shared.errorE2EE, errorDescription: "Error decoding JSON"))
         }
 
@@ -166,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, urlBase: urlBase, userId: userId)
+            return decoderMetadataV1(json, serverUrl: serverUrl, account: account, ocId: directory.ocId, urlBase: urlBase, userId: userId)
         } else if (try? decoder.decode(E2eeV12.self, from: data)) != nil {
-            return decoderMetadataV12(json, serverUrl: serverUrl, account: account, urlBase: urlBase, userId: userId, ownerId: ownerId)
+            return decoderMetadataV12(json, serverUrl: serverUrl, account: account, ocId: 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, urlBase: urlBase, userId: userId, ownerId: ownerId)
+            return decoderMetadataV20(json, signature: signature, serverUrl: serverUrl, account: account, ocId: directory.ocId, urlBase: urlBase, userId: userId, ownerId: ownerId)
         } else {
             return NKError(errorCode: NCGlobal.shared.errorInternalError, errorDescription: "Server E2EE version " + NCGlobal.shared.capabilityE2EEApiVersion + ", not compatible")
         }

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

@@ -28,7 +28,7 @@ extension NCEndToEndMetadata {
     // MARK: Ecode JSON Metadata V1.2
     // --------------------------------------------------------------------------------------------
 
-    func encoderMetadataV12(account: String, serverUrl: String) -> (metadata: String?, signature: String?) {
+    func encoderMetadataV12(account: String, serverUrl: String, ocId: 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, urlBase: String, userId: String, ownerId: String?) -> NKError {
+    func decoderMetadataV12(_ json: String, serverUrl: String, account: String, ocId: 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")
@@ -313,7 +313,7 @@ extension NCEndToEndMetadata {
     // MARK: Decode JSON Metadata V1.1
     // --------------------------------------------------------------------------------------------
 
-    func decoderMetadataV1(_ json: String, serverUrl: String, account: String, urlBase: String, userId: String) -> NKError {
+    func decoderMetadataV1(_ json: String, serverUrl: String, account: String, ocId: String, urlBase: String, userId: String) -> NKError {
 
         guard let data = json.data(using: .utf8) else {
             return NKError(errorCode: NCGlobal.shared.errorE2EE, errorDescription: "Error decoding JSON")

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

@@ -31,7 +31,7 @@ extension NCEndToEndMetadata {
     // MARK: Ecode JSON Metadata V2.0
     // --------------------------------------------------------------------------------------------
 
-    func encoderMetadataV20(account: String, serverUrl: String, userId: String) -> (metadata: String?, signature: String?) {
+    func encoderMetadataV20(account: String, serverUrl: String, ocId: String, userId: String) -> (metadata: String?, signature: String?) {
 
         guard let privateKey = CCUtility.getEndToEndPrivateKey(account),
               let publicKey = CCUtility.getEndToEndPublicKey(account),
@@ -74,12 +74,7 @@ extension NCEndToEndMetadata {
         }
 
         // tableE2eMetadataV2
-        if NCManageDatabase.shared.getE2eMetadataV2(account: account, serverUrl: serverUrl) == nil {
-            NCManageDatabase.shared.addE2eMetadataV2(account: account, serverUrl: serverUrl, keyChecksums: nil, deleted: false, counter: 1, folders: nil, version: "2.0")
-        } else {
-            NCManageDatabase.shared.incrementCounterE2eMetadataV2(account: account, serverUrl: serverUrl)
-        }
-        guard let e2eMetadataV2 = NCManageDatabase.shared.getE2eMetadataV2(account: account, serverUrl: serverUrl) else {
+        guard let e2eMetadataV2 = NCManageDatabase.shared.incrementCounterE2eMetadataV2(account: account, serverUrl: serverUrl, version: "2.0") else {
             return (nil, nil)
         }
 
@@ -142,7 +137,7 @@ extension NCEndToEndMetadata {
     // MARK: Decode JSON Metadata V2.0
     // --------------------------------------------------------------------------------------------
 
-    func decoderMetadataV20(_ json: String, signature: String?, serverUrl: String, account: String, urlBase: String, userId: String, ownerId: String?) -> NKError {
+    func decoderMetadataV20(_ json: String, signature: String?, serverUrl: String, account: String, ocId: 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")