Browse Source

add decodeMetadata

Marino Faggiana 7 năm trước cách đây
mục cha
commit
80b5a4f3d3
2 tập tin đã thay đổi với 77 bổ sung37 xóa
  1. 3 0
      iOSClient/Main/CCMain.h
  2. 74 37
      iOSClient/Security/NCEntoToEndInterface.swift

+ 3 - 0
iOSClient/Main/CCMain.h

@@ -64,6 +64,9 @@
 @property (nonatomic, weak) CCDetail *detailViewController;
 @property (nonatomic, strong) UISearchController *searchController;
 
+@property (nonatomic, strong) NSString *e2eMetaDataJSON;
+
+
 - (void)closeAllMenu;
 - (void)returnCreate:(NSInteger)type;
 

+ 74 - 37
iOSClient/Security/NCEntoToEndInterface.swift

@@ -195,7 +195,7 @@ class NCEntoToEndInterface : NSObject, OCNetworkingDelegate  {
 
             guard let privateKey = (NCEndToEndEncryption.sharedManager().decryptPrivateKey(metadataNet.key, passphrase: passphrase, publicKey: publicKey)) else {
                 
-                self.appDelegate.messageNotification("E2E decrypt privateKey", description: "Error to decrypt Private Key", visible: true, delay: TimeInterval(k_dismissAfterSecond), type: TWMessageBarMessageType.error, errorCode: 0)
+                self.appDelegate.messageNotification("E2E decrypt privateKey", description: "Serious internal error to decrypt Private Key", visible: true, delay: TimeInterval(k_dismissAfterSecond), type: TWMessageBarMessageType.error, errorCode: 0)
                 
                 return
             }
@@ -244,7 +244,7 @@ class NCEntoToEndInterface : NSObject, OCNetworkingDelegate  {
                 
                 guard let privateKeyChiper = NCEndToEndEncryption.sharedManager().encryptPrivateKey(self.appDelegate.activeUserID, directoryUser: self.appDelegate.directoryUser, passphrase: e2ePassphrase, privateKey: &privateKey) else {
                     
-                    self.appDelegate.messageNotification("E2E privateKey", description: "Error to create PrivateKey chiper", visible: true, delay: TimeInterval(k_dismissAfterSecond), type: TWMessageBarMessageType.error, errorCode: errorCode)
+                    self.appDelegate.messageNotification("E2E privateKey", description: "Serious internal error to create PrivateKey chiper", visible: true, delay: TimeInterval(k_dismissAfterSecond), type: TWMessageBarMessageType.error, errorCode: errorCode)
                     
                     return
                 }
@@ -333,7 +333,7 @@ class NCEntoToEndInterface : NSObject, OCNetworkingDelegate  {
     }
     
     // --------------------------------------------------------------------------------------------
-    // MARK: Mark/Delete Encrypted Folder
+    // MARK: Manage Mark/Delete Encrypted Folder
     // --------------------------------------------------------------------------------------------
     
     @objc func markEndToEndFolderEncrypted(_ url: String, fileID: String, token: String?) -> Bool {
@@ -398,41 +398,26 @@ class NCEntoToEndInterface : NSObject, OCNetworkingDelegate  {
     
     func getEndToEndMetadataSuccess(_ metadataNet: CCMetadataNet!) {
         
-        let jsonDecoder = JSONDecoder.init()
-        let data = metadataNet.encryptedMetadata.data(using: .utf8)
-        
-        do {
-            
-            let response = try jsonDecoder.decode(e2eMetadata.self, from: data!)
+        guard let privateKey = CCUtility.getEndToEndPrivateKey(appDelegate.activeAccount) else {
             
-            let files = response.files
-            let metadata = response.metadata
-            let sharing = response.sharing
-            
-            for file in files {
-                
-                let fileNameID = file.key
-                let element = file.value as e2eMetadata.filesKey
-                
-                let iv = element.initializationVector
-                let tag = element.authenticationTag
-                let encrypted = element.encrypted
-                
-                let privateKey = CCUtility.getEndToEndPrivateKey(appDelegate.activeAccount)
-                
-                let x = NCEndToEndEncryption.sharedManager().decryptAsymmetricData(encrypted.data(using: .utf8), privateKey: privateKey)
-                
-                print(metadata)
-
-            }
-            
-            print(response)
+            appDelegate.messageNotification("E2E Get Metadata Success", description: "Serious internal error: PrivareKey not found", visible: true, delay: TimeInterval(k_dismissAfterSecond), type: TWMessageBarMessageType.error, errorCode: 0)
+            return
+        }
 
+        guard let main = appDelegate.listMainVC[metadataNet.serverUrl] as? CCMain else {
             
-        } catch let error {
-            
-            appDelegate.messageNotification("E2E decode metadata", description: "Error in decoding metadata ("+error.localizedDescription+")", visible: true, delay: TimeInterval(k_dismissAfterSecond), type: TWMessageBarMessageType.error, errorCode: 0)
+            appDelegate.messageNotification("E2E Get Metadata Success", description: "Serious internal error: Main not found", visible: true, delay: TimeInterval(k_dismissAfterSecond), type: TWMessageBarMessageType.error, errorCode: 0)
+            return
+        }
+        
+        guard let e2eMetaDataJSON = decoderMetadata(metadataNet.encryptedMetadata, privateKey: privateKey) else {
+            return
         }
+
+        // Assign e2eMetaDataJSON for ServerUrl Main
+        main.e2eMetaDataJSON = e2eMetaDataJSON
+        // Reload data source
+        main.reloadDatasource(metadataNet.serverUrl)
     }
     
     func getEndToEndMetadataFailure(_ metadataNet: CCMetadataNet!, message: String!, errorCode: Int) {
@@ -455,10 +440,21 @@ class NCEntoToEndInterface : NSObject, OCNetworkingDelegate  {
         metadataNet.action = actionGetEndToEndMetadata;
         metadataNet.fileID = metadata.fileID;
         
+        guard let serverUrl = NCManageDatabase.sharedInstance.getServerUrl(metadata.directoryID) else {
+            
+            appDelegate.messageNotification("E2E Get metadata", description: "Serious internal error: ServerURL not found", visible: true, delay: TimeInterval(k_dismissAfterSecond), type: TWMessageBarMessageType.error, errorCode: 0)
+            return
+        }
+        metadataNet.serverUrl = serverUrl
+        
         appDelegate.addNetworkingOperationQueue(appDelegate.netQueue, delegate: self, metadataNet: metadataNet)
     }
     
-    @objc func encoderMetadata (_ recordsE2eEncryption: [tableE2eEncryption], publicKey: String, version: Int) -> String? {
+    // --------------------------------------------------------------------------------------------
+    // MARK: Encode / Decode JSON Metadata
+    // --------------------------------------------------------------------------------------------
+    
+    @objc func encoderMetadata(_ recordsE2eEncryption: [tableE2eEncryption], publicKey: String, version: Int) -> String? {
         
         let jsonEncoder = JSONEncoder.init()
         var files = [String: e2eMetadata.filesKey]()
@@ -469,7 +465,7 @@ class NCEntoToEndInterface : NSObject, OCNetworkingDelegate  {
             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: "Error in creation \"encrypted\" key", visible: true, delay: TimeInterval(k_dismissAfterSecond), type: TWMessageBarMessageType.error, errorCode: 0)
+                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
             }
             
@@ -494,11 +490,52 @@ class NCEntoToEndInterface : NSObject, OCNetworkingDelegate  {
             
         } catch let error {
             
-            appDelegate.messageNotification("E2E encore metadata", description: "Error in encoding metadata ("+error.localizedDescription+")", visible: true, delay: TimeInterval(k_dismissAfterSecond), type: TWMessageBarMessageType.error, errorCode: 0)
+            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
     }
+    
+     @objc func decoderMetadata(_ e2eMetaDataJSON: String, privateKey: String) -> String? {
+        
+        let jsonDecoder = JSONDecoder.init()
+        let data = e2eMetaDataJSON.data(using: .utf8)
+        
+        do {
+            
+            let response = try jsonDecoder.decode(e2eMetadata.self, from: data!)
+            
+            let files = response.files
+            let metadata = response.metadata
+            let sharing = response.sharing
+            
+            for file in files {
+                
+                let fileNameID = file.key
+                let element = file.value as e2eMetadata.filesKey
+                
+                let iv = element.initializationVector
+                let tag = element.authenticationTag
+                let encrypted = element.encrypted
+                
+                let x = NCEndToEndEncryption.sharedManager().decryptAsymmetricData(encrypted.data(using: .utf8), privateKey: privateKey)
+                
+                print(metadata)
+                
+            }
+            
+            print(response)
+            
+            
+        } 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 nil
+        }
+        
+        return e2eMetaDataJSON
+    }
+    
 }