marinofaggiana 4 năm trước cách đây
mục cha
commit
df66bc3922

+ 1 - 15
iOSClient/Networking/CCNetworking.m

@@ -1065,21 +1065,7 @@
     
     // E2EE : UNLOCK
     if (isE2EEDirectory && e2eeMetadataInSession == nil) {
-                
-        tableE2eEncryptionLock *tableLock = [[NCManageDatabase sharedInstance] getE2ETokenLockWithServerUrl:serverUrl];
-
-        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
-            
-            if (tableLock) {
-                
-                NSError *error = [[NCNetworkingEndToEnd sharedManager] unlockEndToEndFolderEncryptedOnServerUrl:serverUrl fileId:tableLock.fileId e2eToken:tableLock.e2eToken user:tableAccount.user userID:tableAccount.userID password:[CCUtility getPassword:tableAccount.account] url:tableAccount.url];
-                if (error) {
-                    [[NCContentPresenter shared] messageNotification:@"_e2e_error_unlock_" description:error.localizedDescription delay:k_dismissAfterSecond type:messageTypeError errorCode:error.code];
-                }
-            } else {
-                NSLog(@"Error unlock not found");
-            }
-        });
+        [[NCNetworkingE2EE sharedInstance] unlockWithAccount:tableAccount.account serverUrl:serverUrl completion:^(NSInteger errorCode, NSString *errorDescription) { }];
     }
         
     [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadName:k_notificationCenter_uploadedFile object:nil userInfo:@{@"metadata": metadata, @"errorCode": @(errorCode), @"errorDescription": errorMessage}];

+ 8 - 10
iOSClient/Networking/NCNetworking.swift

@@ -299,16 +299,14 @@ import NCCommunication
         
         if isDirectoryEncrypted {
             #if !EXTENSION
-            if let directory = NCManageDatabase.sharedInstance.getTableDirectory(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", metadata.account, metadata.serverUrl)) {
-                if metadataLive == nil {
-                    NCNetworkingE2EE.sharedInstance.deleteMetadata(metadata, directory: directory, account: account, url: url, completion: completion)
-                } else {
-                    NCNetworkingE2EE.sharedInstance.deleteMetadata(metadataLive!, directory: directory, account: account, url: url) { (errorCode, errorDescription) in
-                        if errorCode == 0 {
-                            NCNetworkingE2EE.sharedInstance.deleteMetadata(metadata, directory: directory, account: account, url: url, completion: completion)
-                        } else {
-                            completion(errorCode, errorDescription)
-                        }
+            if metadataLive == nil {
+                NCNetworkingE2EE.sharedInstance.deleteMetadata(metadata, url: url, completion: completion)
+            } else {
+                NCNetworkingE2EE.sharedInstance.deleteMetadata(metadataLive!, url: url) { (errorCode, errorDescription) in
+                    if errorCode == 0 {
+                        NCNetworkingE2EE.sharedInstance.deleteMetadata(metadata, url: url, completion: completion)
+                    } else {
+                        completion(errorCode, errorDescription)
                     }
                 }
             }

+ 27 - 22
iOSClient/Networking/NCNetworkingE2EE.swift

@@ -47,13 +47,8 @@ import NCCommunication
         fileNameIdentifier = CCUtility.generateRandomIdentifier()
         fileNameFolderUrl = serverUrl + "/" + fileNameIdentifier
        
-        guard let directory = NCManageDatabase.sharedInstance.getTableDirectory(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", account, serverUrl)) else {
-            self.NotificationPost(name: k_notificationCenter_createFolder, serverUrl: serverUrl, userInfo: ["fileName": fileName, "serverUrl": serverUrl, "errorCode": k_CCErrorInternalError], errorDescription: "Directory not found", completion: completion)
-            return
-        }
-        
-        self.lock(serverUrl: serverUrl, fileId: directory.fileId) { (e2eToken, errorCode, errorDescription) in
-            if errorCode == 0 && e2eToken != nil {
+        self.lock(account: account, serverUrl: serverUrl) { (directory, e2eToken, errorCode, errorDescription) in
+            if errorCode == 0 && e2eToken != nil && directory != nil {
                                
                 NCCommunication.shared.createFolder(fileNameFolderUrl, addCustomHeaders: ["e2e-token" : e2eToken!]) { (account, ocId, date, errorCode, errorDescription) in
                     if errorCode == 0 {
@@ -100,7 +95,7 @@ import NCCommunication
                                         
                                         let _ = NCManageDatabase.sharedInstance.addE2eEncryption(object)
                                         
-                                        self.sendE2EMetadata(account: account, serverUrl: serverUrl, fileId: directory.fileId, fileNameRename: nil, fileNameNewRename: nil, deleteE2eEncryption: nil, url: url) { (errorCode, errorDescription) in
+                                        self.sendE2EMetadata(account: account, serverUrl: serverUrl, fileId: directory!.fileId, fileNameRename: nil, fileNameNewRename: nil, deleteE2eEncryption: nil, url: url) { (errorCode, errorDescription) in
                                             self.NotificationPost(name: k_notificationCenter_createFolder, serverUrl: serverUrl, userInfo: ["fileName": fileName, "serverUrl": serverUrl, "errorCode": errorCode], errorDescription: errorDescription, completion: completion)
                                         }
                                     } else {
@@ -123,13 +118,13 @@ import NCCommunication
     
     //MARK: - WebDav Delete
     
-    func deleteMetadata(_ metadata: tableMetadata, directory: tableDirectory, account: String, url: String, completion: @escaping (_ errorCode: Int, _ errorDescription: String)->()) {
+    func deleteMetadata(_ metadata: tableMetadata, url: String, completion: @escaping (_ errorCode: Int, _ errorDescription: String)->()) {
                         
-        self.lock(serverUrl: directory.serverUrl, fileId: directory.fileId) { (e2eToken, errorCode, errorDescription) in
-            if errorCode == 0 && e2eToken != nil {
-                let deleteE2eEncryption = NSPredicate(format: "account == %@ AND serverUrl == %@ AND fileNameIdentifier == %@", metadata.account, directory.serverUrl, metadata.fileName)
+        self.lock(account:metadata.account, serverUrl: metadata.serverUrl) { (directory, e2eToken, errorCode, errorDescription) in
+            if errorCode == 0 && e2eToken != nil && directory != nil {
+                let deleteE2eEncryption = NSPredicate(format: "account == %@ AND serverUrl == %@ AND fileNameIdentifier == %@", metadata.account, metadata.serverUrl, metadata.fileName)
                 NCNetworking.sharedInstance.deleteMetadataPlain(metadata, addCustomHeaders: ["e2e-token" :e2eToken!]) { (errorCode, errorDescription) in
-                    self.sendE2EMetadata(account: account, serverUrl: directory.serverUrl, fileId: directory.fileId, fileNameRename: nil, fileNameNewRename: nil, deleteE2eEncryption: deleteE2eEncryption, url: url) { (errorCode, errorDescription) in
+                    self.sendE2EMetadata(account: metadata.account, serverUrl: metadata.serverUrl, fileId: directory!.fileId, fileNameRename: nil, fileNameNewRename: nil, deleteE2eEncryption: deleteE2eEncryption, url: url) { (errorCode, errorDescription) in
                          self.NotificationPost(name: k_notificationCenter_deleteFile, serverUrl: metadata.serverUrl, userInfo: ["metadata": metadata, "errorCode": errorCode], errorDescription: errorDescription, completion: completion)
                     }
                 }
@@ -175,31 +170,41 @@ import NCCommunication
     
     //MARK: - E2EE
     
-    private func lock(serverUrl: String, fileId: String, completion: @escaping (_ e2eToken: String?, _ errorCode: Int, _ errorDescription: String?)->()) {
+    @objc func lock(account:String, serverUrl: String, completion: @escaping (_ direcrtory: tableDirectory?, _ e2eToken: String?, _ errorCode: Int, _ errorDescription: String?)->()) {
         
         var e2eToken: String?
         
+        guard let directory = NCManageDatabase.sharedInstance.getTableDirectory(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", account, serverUrl)) else {
+            completion(nil, nil, 0, "")
+            return
+        }
+        
         if let tableLock = NCManageDatabase.sharedInstance.getE2ETokenLock(serverUrl: serverUrl) {
             e2eToken = tableLock.e2eToken
         }
         
-        NCCommunication.shared.lockE2EEFolder(fileId: fileId, e2eToken: e2eToken, delete: false) { (account, e2eToken, errorCode, errorDescription) in
+        NCCommunication.shared.lockE2EEFolder(fileId: directory.fileId, e2eToken: e2eToken, delete: false) { (account, e2eToken, errorCode, errorDescription) in
             if errorCode == 0 && e2eToken != nil {
-                NCManageDatabase.sharedInstance.setE2ETokenLock(serverUrl: serverUrl, fileId: fileId, e2eToken: e2eToken!)
+                NCManageDatabase.sharedInstance.setE2ETokenLock(serverUrl: serverUrl, fileId: directory.fileId, e2eToken: e2eToken!)
             }
-            completion(e2eToken, errorCode, errorDescription)
+            completion(directory, e2eToken, errorCode, errorDescription)
         }
     }
     
-    private func unlock(serverUrl: String, fileId: String, completion: @escaping (_ errorCode: Int, _ errorDescription: String?)->()) {
+    @objc func unlock(account:String, serverUrl: String, completion: @escaping (_ errorCode: Int, _ errorDescription: String?)->()) {
         
         var e2eToken: String?
         
+        guard let directory = NCManageDatabase.sharedInstance.getTableDirectory(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", account, serverUrl)) else {
+            completion(0, "")
+            return
+        }
+        
         if let tableLock = NCManageDatabase.sharedInstance.getE2ETokenLock(serverUrl: serverUrl) {
             e2eToken = tableLock.e2eToken
         }
         
-        NCCommunication.shared.lockE2EEFolder(fileId: fileId, e2eToken: e2eToken, delete: true) { (account, e2eToken, errorCode, errorDescription) in
+        NCCommunication.shared.lockE2EEFolder(fileId: directory.fileId, e2eToken: e2eToken, delete: true) { (account, e2eToken, errorCode, errorDescription) in
             if errorCode == 0 {
                 NCManageDatabase.sharedInstance.deteleE2ETokenLock(serverUrl: serverUrl)
             }
@@ -207,9 +212,9 @@ import NCCommunication
         }
     }
     
-    private func sendE2EMetadata(account: String, serverUrl: String, fileId: String, fileNameRename: String?, fileNameNewRename: String?, deleteE2eEncryption : NSPredicate?, url: String, completion: @escaping (_ errorCode: Int, _ errorDescription: String?)->()) {
+    @objc func sendE2EMetadata(account: String, serverUrl: String, fileId: String, fileNameRename: String?, fileNameNewRename: String?, deleteE2eEncryption : NSPredicate?, url: String, completion: @escaping (_ errorCode: Int, _ errorDescription: String?)->()) {
     
-        self.lock(serverUrl: serverUrl, fileId: fileId) { (e2eToken, errorCode, errorDescription) in
+        self.lock(account: account, serverUrl: serverUrl) { (directory, e2eToken, errorCode, errorDescription) in
             if errorCode == 0 && e2eToken != nil {
                           
                 NCCommunication.shared.getE2EEMetadata(fileId: fileId, e2eToken: e2eToken) { (account, metadata, errorCode, errorDescription) in
@@ -241,7 +246,7 @@ import NCCommunication
                     }
                     
                     NCCommunication.shared.putE2EEMetadata(fileId: fileId, e2eToken: e2eToken!, metadata: rebuildMetadata, method: method) { (account, metadata, errorCode, errorDescription) in
-                        self.unlock(serverUrl: serverUrl, fileId: fileId) { (_, _) in
+                        self.unlock(account: account, serverUrl: serverUrl) { (_, _) in
                             if errorCode == 0 && metadata != nil {
                                 let result = NCEndToEndMetadata.sharedInstance.decoderMetadata(metadata!, privateKey: CCUtility.getEndToEndPrivateKey(account), serverUrl: serverUrl, account: account, url: url)
                                 print("\(result)")