Marino Faggiana 7 жил өмнө
parent
commit
10b86d552f

+ 2 - 2
iOSClient/Database/NCManageDatabase.swift

@@ -1085,7 +1085,7 @@ class NCManageDatabase: NSObject {
         return result.tokenLock
     }
     
-    @objc func setE2eEncryptionTokenLock(fileName: String, token: String) {
+    @objc func setE2eEncryptionTokenLock(fileName: String, serverUrl: String, token: String) {
         
         guard let tableAccount = self.getAccountActive() else {
             return
@@ -1095,7 +1095,7 @@ class NCManageDatabase: NSObject {
         
         realm.beginWrite()
         
-        guard let result = realm.objects(tableE2eEncryption.self).filter("account = %@ AND fileName = %@", tableAccount.account, fileName).first else {
+        guard let result = realm.objects(tableE2eEncryption.self).filter("account = %@ AND fileName = %@ AND serverUrl = %@", tableAccount.account, fileName, serverUrl).first else {
             realm.cancelWrite()
             return
         }

+ 21 - 1
iOSClient/Networking/CCNetworking.m

@@ -554,8 +554,28 @@
     }
         
     [[NCManageDatabase sharedInstance] setMetadataSession:session sessionError:@"" sessionSelector:selector sessionSelectorPost:selectorPost sessionTaskIdentifier:k_taskIdentifierNULL predicate:[NSPredicate predicateWithFormat:@"fileID = %@",metadata.fileID]];
+    
+    // Lock if encrypted directory
+    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
         
-    [self downloaURLSession:metadata.fileName serverUrl:serverUrl fileID:metadata.fileID session:session taskStatus:taskStatus selector:selector];
+        if ([CCUtility isFolderEncrypted:serverUrl account:_activeAccount]) {
+
+            NSString *tokenLock = [[NCManageDatabase sharedInstance] getE2eEncryptionTokenLockWithServerUrl:serverUrl];
+            tableDirectory *directory = [[NCManageDatabase sharedInstance] getTableDirectoryWithPredicate:[NSPredicate predicateWithFormat:@"account = %@ AND serverUrl = %@", _activeAccount, serverUrl]];
+            
+            NSError *error = [[NCNetworkingSync sharedManager] lockEndToEndFolderEncrypted:_activeUser userID:_activeUserID password:_activePassword url:_activeUrl fileID:directory.fileID token:&tokenLock];
+            
+            if (error == nil && tokenLock != nil) {
+                [[NCManageDatabase sharedInstance] setE2eEncryptionTokenLockWithFileName:metadata.fileName serverUrl:serverUrl token:tokenLock];
+            } else {
+                return;
+            }
+        }
+
+        dispatch_async(dispatch_get_main_queue(), ^{
+            [self downloaURLSession:metadata.fileName serverUrl:serverUrl fileID:metadata.fileID session:session taskStatus:taskStatus selector:selector];
+        });
+    });
 }
 
 - (void)downloaURLSession:(NSString *)fileName serverUrl:(NSString *)serverUrl fileID:(NSString *)fileID session:(NSString *)session taskStatus:(NSInteger)taskStatus selector:(NSString *)selector