Эх сурвалжийг харах

migrate encode/decode metadata to NCEndToEndMetadata.swift

Marino Faggiana 7 жил өмнө
parent
commit
bd805de2c9

+ 47 - 0
iOSClient/Security/NCEndToEndMetadata.swift

@@ -64,6 +64,53 @@ class NCEndToEndMetadata : NSObject  {
         return instance
     }()
     
+    // --------------------------------------------------------------------------------------------
+    // MARK: Encode / Decode JSON Metadata
+    // --------------------------------------------------------------------------------------------
+    
+    @objc func encoderMetadata(_ recordsE2eEncryption: [tableE2eEncryption], publicKey: String, version: Int) -> String? {
+        
+        let jsonEncoder = JSONEncoder.init()
+        var files = [String: e2eMetadata.filesKey]()
+        
+        // Create "files"
+        for recordE2eEncryption in recordsE2eEncryption {
+            
+            let plainEncrypted = recordE2eEncryption.key+"|"+recordE2eEncryption.fileName+"|"+recordE2eEncryption.mimeType+"|"+",\(recordE2eEncryption.version)"
+            guard let encryptedData = NCEndToEndEncryption.sharedManager().encryptAsymmetricString(plainEncrypted, publicKey: publicKey) else {
+                
+                //appDelegate.messageNotification("E2E encore metadata", description: "Serious internal error in creation \"encrypted\" key", visible: true, delay: TimeInterval(k_dismissAfterSecond), type: TWMessageBarMessageType.error, errorCode: 0)
+                return nil
+            }
+            
+            
+            let e2eMetadataFilesKey = e2eMetadata.filesKey(initializationVector: recordE2eEncryption.initializationVector, authenticationTag: recordE2eEncryption.authenticationTag, metadataKey: 0, encrypted: String(data: encryptedData, encoding: .utf8)!)
+            files.updateValue(e2eMetadataFilesKey, forKey: recordE2eEncryption.fileNameIdentifier)
+        }
+        
+        // Create "metadata"
+        let e2eMetadataKey = e2eMetadata.metadataKey(metadataKeys: ["0":"dcccecfvdfvfvsfdvefvefvefvefvefv"], version: version)
+        
+        // Create final Json e2emetadata
+        let e2emetadata = e2eMetadata(files: files, metadata: e2eMetadataKey, sharing: nil)
+        
+        do {
+            
+            let jsonData = try jsonEncoder.encode(e2emetadata)
+            let jsonString = String(data: jsonData, encoding: .utf8)
+            print("JSON String : " + jsonString!)
+            
+            return jsonString
+            
+        } catch let error {
+            
+            //appDelegate.messageNotification("E2E encore metadata", description: "Serious internal error in encoding metadata ("+error.localizedDescription+")", visible: true, delay: TimeInterval(k_dismissAfterSecond), type: TWMessageBarMessageType.error, errorCode: 0)
+        }
+        
+        return nil
+    }
+    
+    
     // let dataDecoded : NSData = NSData(base64Encoded: encrypted, options: NSData.Base64DecodingOptions(rawValue: 0))!
     @objc func decoderMetadata(_ e2eMetaDataJSON: String, privateKey: String, serverUrl: String, account: String) -> String? {
         

+ 4 - 172
iOSClient/Security/NCEntoToEndInterface.swift

@@ -25,40 +25,6 @@ import Foundation
 
 class NCEntoToEndInterface : NSObject, OCNetworkingDelegate  {
 
-    struct e2eMetadata: Codable {
-        
-        struct metadataKey: Codable {
-            
-            let metadataKeys: [String: String]
-            let version: Int
-        }
-        
-        struct sharingKey: Codable {
-            
-            let recipient: [String: String]
-        }
-        
-        struct encrypted: Codable {
-            
-            let key: String
-            let filename: String
-            let mimetype: String
-            let version: Int
-        }
-        
-        struct filesKey: Codable {
-            
-            let initializationVector: String
-            let authenticationTag: String
-            let metadataKey: Int
-            let encrypted: String
-        }
-        
-        let files: [String: filesKey]
-        let metadata: metadataKey
-        let sharing: sharingKey?
-    }
-
     let appDelegate = UIApplication.shared.delegate as! AppDelegate
     
     override init() {
@@ -435,7 +401,10 @@ class NCEntoToEndInterface : NSObject, OCNetworkingDelegate  {
         
         let serverUrl = metadataNet.serverUrl + "/" + metadataNet.fileName
         
-        if (decoderMetadata(metadataNet.encryptedMetadata, privateKey: privateKey, serverUrl: serverUrl) == false) {
+        let error = NCEndToEndMetadata.sharedInstance.decoderMetadata(metadataNet.encryptedMetadata, privateKey: privateKey, serverUrl: serverUrl, account: appDelegate.activeAccount) as String?
+        
+        if error != nil {
+            appDelegate.messageNotification("E2E decode metadata", description: error!, visible: true, delay: TimeInterval(k_dismissAfterSecond), type: TWMessageBarMessageType.error, errorCode: 0)
             return
         }
 
@@ -474,144 +443,7 @@ class NCEntoToEndInterface : NSObject, OCNetworkingDelegate  {
         
         appDelegate.addNetworkingOperationQueue(appDelegate.netQueue, delegate: self, metadataNet: metadataNet)
     }
-    
-    // --------------------------------------------------------------------------------------------
-    // MARK: Encode / Decode JSON Metadata
-    // --------------------------------------------------------------------------------------------
-    
-    @objc func encoderMetadata(_ recordsE2eEncryption: [tableE2eEncryption], publicKey: String, version: Int) -> String? {
-        
-        let jsonEncoder = JSONEncoder.init()
-        var files = [String: e2eMetadata.filesKey]()
-        
-        // Create "files"
-        for recordE2eEncryption in recordsE2eEncryption {
-            
-            let plainEncrypted = recordE2eEncryption.key+"|"+recordE2eEncryption.fileName+"|"+recordE2eEncryption.mimeType+"|"+",\(recordE2eEncryption.version)"
-            guard let encryptedData = NCEndToEndEncryption.sharedManager().encryptAsymmetricString(plainEncrypted, publicKey: publicKey) else {
-                
-                appDelegate.messageNotification("E2E encore metadata", description: "Serious internal error in creation \"encrypted\" key", visible: true, delay: TimeInterval(k_dismissAfterSecond), type: TWMessageBarMessageType.error, errorCode: 0)
-                return nil
-            }
-            
-            
-            let e2eMetadataFilesKey = e2eMetadata.filesKey(initializationVector: recordE2eEncryption.initializationVector, authenticationTag: recordE2eEncryption.authenticationTag, metadataKey: 0, encrypted: String(data: encryptedData, encoding: .utf8)!)
-            files.updateValue(e2eMetadataFilesKey, forKey: recordE2eEncryption.fileNameIdentifier)
-        }
-        
-        // Create "metadata"
-        let e2eMetadataKey = e2eMetadata.metadataKey(metadataKeys: ["0":"dcccecfvdfvfvsfdvefvefvefvefvefv"], version: version)
-
-        // Create final Json e2emetadata
-        let e2emetadata = e2eMetadata(files: files, metadata: e2eMetadataKey, sharing: nil)
 
-        do {
-            
-            let jsonData = try jsonEncoder.encode(e2emetadata)
-            let jsonString = String(data: jsonData, encoding: .utf8)
-            print("JSON String : " + jsonString!)
-            
-            return jsonString
-            
-        } catch let error {
-            
-            appDelegate.messageNotification("E2E encore metadata", description: "Serious internal error in encoding metadata ("+error.localizedDescription+")", visible: true, delay: TimeInterval(k_dismissAfterSecond), type: TWMessageBarMessageType.error, errorCode: 0)
-        }
-        
-        return nil
-    }
-    
-    // let dataDecoded : NSData = NSData(base64Encoded: encrypted, options: NSData.Base64DecodingOptions(rawValue: 0))!
-    @objc func decoderMetadata(_ e2eMetaDataJSON: String, privateKey: String, serverUrl: String) -> Bool {
-        
-        let jsonDecoder = JSONDecoder.init()
-        let data = e2eMetaDataJSON.data(using: .utf8)
-        
-        do {
-            
-            let decode = try jsonDecoder.decode(e2eMetadata.self, from: data!)
-            
-            let files = decode.files
-            let metadata = decode.metadata
-            //let sharing = decode.sharing ---> V 2.0
-            
-            var decodeMetadataKeys = [String:String]()
-            
-            for metadataKeys in metadata.metadataKeys {
-                
-                guard let metadataKeysData : NSData = NSData(base64Encoded: metadataKeys.value, options: NSData.Base64DecodingOptions(rawValue: 0)) else {
-                    appDelegate.messageNotification("E2E decode metadata", description: "Serious internal error in decoding metadata", visible: true, delay: TimeInterval(k_dismissAfterSecond), type: TWMessageBarMessageType.error, errorCode: 0)
-                    return false
-                }
-
-                guard let metadataKey = NCEndToEndEncryption.sharedManager().decryptAsymmetricData(metadataKeysData as Data!, privateKey: privateKey) else {
-                    appDelegate.messageNotification("E2E decode metadata", description: "Serious internal error in decoding metadata", visible: true, delay: TimeInterval(k_dismissAfterSecond), type: TWMessageBarMessageType.error, errorCode: 0)
-                    return false
-                }
-                
-                // Encode to Base64
-                let metadataKeyData = Data(base64Encoded: metadataKey, options: NSData.Base64DecodingOptions(rawValue: 0))!
-                let metadataKeyBase64 = String(data: metadataKeyData, encoding: .utf8)
-
-                decodeMetadataKeys[metadataKeys.key] = metadataKeyBase64
-            }
-            
-            for file in files {
-                
-                let fileNameIdentifier = file.key
-                let elementOfFile = file.value as e2eMetadata.filesKey
-                
-                let encrypted = elementOfFile.encrypted
-                let key = decodeMetadataKeys["\(elementOfFile.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)
-                    return false
-                }
-                
-                do {
-                    
-                    let decode = try jsonDecoder.decode(e2eMetadata.encrypted.self, from: decyptedMetadata.data(using: .utf8)!)
-                    
-                    let object = tableE2eEncryption()
-                    
-                    object.account = appDelegate.activeAccount
-                    object.authenticationTag = elementOfFile.authenticationTag
-                    object.fileName = decode.filename
-                    object.fileNameIdentifier = fileNameIdentifier
-                    object.key = decode.key
-                    object.initializationVector = elementOfFile.initializationVector
-                    object.mimeType = decode.mimetype
-                    object.serverUrl = serverUrl
-                    object.version = decode.version
-                    
-                    // Write file parameter for decrypted on DB
-                    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
-                    }
-                    
-                    // Write e2eMetaDataJSON on DB
-                    if NCManageDatabase.sharedInstance.setDirectoryE2EMetadataJSON(serverUrl: serverUrl, metadata: e2eMetaDataJSON) == 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)
-                    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)
-            return false
-        }
-        
-        return true
-    }
 }