浏览代码

change DB V. 12

Marino Faggiana 7 年之前
父节点
当前提交
60170d9c5e

+ 1 - 2
iOSClient/Database/NCDatabase.swift

@@ -119,14 +119,13 @@ class tableE2eEncryption: Object {
     @objc dynamic var fileNameIdentifier = ""
     @objc dynamic var key = ""
     @objc dynamic var initializationVector = ""
-    @objc dynamic var metadataKey: Int = 0
     @objc dynamic var mimeType = ""
     @objc dynamic var serverUrl = ""
     @objc dynamic var tokenLock = ""
     @objc dynamic var version: Int = 0
     
     override static func primaryKey() -> String {
-        return "fileName"
+        return "fileNameIdentifier"
     }
 }
 

+ 2 - 1
iOSClient/Database/NCManageDatabase.swift

@@ -57,10 +57,11 @@ class NCManageDatabase: NSObject {
         let config = Realm.Configuration(
         
             fileURL: dirGroup?.appendingPathComponent("\(appDatabaseNextcloud)/\(k_databaseDefault)"),
-            schemaVersion: 11,
+            schemaVersion: 12,
             
             // 10 : Version 2.18.0
             // 11 : Add object tableE2eEncryption
+            // 12 : Change primary key of tableE2eEncryption for fileNameIdentifier and remove filed metadataKey
             
             migrationBlock: { migration, oldSchemaVersion in
                 // We haven’t migrated anything yet, so oldSchemaVersion == 0

+ 21 - 6
iOSClient/Security/NCEntoToEndInterface.swift

@@ -418,7 +418,7 @@ class NCEntoToEndInterface : NSObject, OCNetworkingDelegate  {
             return
         }
         
-        if (decoderMetadata(metadataNet.encryptedMetadata, privateKey: privateKey) == false) {
+        if (decoderMetadata(metadataNet.encryptedMetadata, privateKey: privateKey, serverUrl: metadataNet.serverUrl) == false) {
             return
         }
 
@@ -503,7 +503,7 @@ class NCEntoToEndInterface : NSObject, OCNetworkingDelegate  {
     }
     
     // let dataDecoded : NSData = NSData(base64Encoded: encrypted, options: NSData.Base64DecodingOptions(rawValue: 0))!
-    @objc func decoderMetadata(_ e2eMetaDataJSON: String, privateKey: String) -> Bool {
+    @objc func decoderMetadata(_ e2eMetaDataJSON: String, privateKey: String, serverUrl: String) -> Bool {
         
         let jsonDecoder = JSONDecoder.init()
         let data = e2eMetaDataJSON.data(using: .utf8)
@@ -542,11 +542,8 @@ class NCEntoToEndInterface : NSObject, OCNetworkingDelegate  {
                 let fileNameIdentifier = file.key
                 let element = file.value as e2eMetadata.filesKey
                 
-                let iv = element.initializationVector
-                let tag = element.authenticationTag
                 let encrypted = element.encrypted
-                let metadataKeysKey = element.metadataKey
-                let key = decodeMetadataKeys["\(metadataKeysKey)"]
+                let key = decodeMetadataKeys["\(element.metadataKey)"]
                 
                 guard let decyptedMetadata = NCEndToEndEncryption.sharedManager().decryptMetadata(encrypted, key: key) else {
                     appDelegate.messageNotification("E2E decode metadata", description: "Serious internal error in decoding metadata", visible: true, delay: TimeInterval(k_dismissAfterSecond), type: TWMessageBarMessageType.error, errorCode: 0)
@@ -557,6 +554,24 @@ class NCEntoToEndInterface : NSObject, OCNetworkingDelegate  {
                     
                     let decrypted = try jsonDecoder.decode(e2eMetadata.encrypted.self, from: decyptedMetadata.data(using: .utf8)!)
                     
+                    let object = tableE2eEncryption()
+                    
+                    object.account = appDelegate.activeAccount
+                    object.authenticationTag = element.authenticationTag
+                    object.fileName = decrypted.filename
+                    object.fileNameIdentifier = fileNameIdentifier
+                    object.key = decrypted.key
+                    object.initializationVector = element.initializationVector
+                    object.metadataKey = element.metadataKey
+                    object.mimeType = decrypted.mimetype
+                    object.serverUrl = serverUrl
+                    object.version = decrypted.version
+                    
+                    if NCManageDatabase.sharedInstance.addE2eEncryption(object) == false {
+                        appDelegate.messageNotification("E2E decode metadata", description: "Serious internal write DB", visible: true, delay: TimeInterval(k_dismissAfterSecond), type: TWMessageBarMessageType.error, errorCode: 0)
+                        return false
+                    }
+                    
                 } catch let error {
                     
                     appDelegate.messageNotification("E2E decode metadata", description: "Serious internal error in decoding metadata ("+error.localizedDescription+")", visible: true, delay: TimeInterval(k_dismissAfterSecond), type: TWMessageBarMessageType.error, errorCode: 0)