Marino Faggiana 7 жил өмнө
parent
commit
52260bb9b9

+ 1 - 1
iOSClient/Database/NCManageDatabase.swift

@@ -900,7 +900,7 @@ class NCManageDatabase: NSObject {
         return result.serverUrl
     }
     
-    @objc func getDirectoryTokenLock(serverUrl: String) -> String? {
+    @objc func getDirectoryE2ETokenLock(serverUrl: String) -> String? {
         
         guard let tableAccount = self.getAccountActive() else {
             return nil

+ 21 - 17
iOSClient/Networking/CCNetworking.m

@@ -1112,31 +1112,34 @@
         
     } else {
         
-        // *** IS ENCRYPTED ---> SEND METADATA ***
+        NSString *e2eMetadataJSON = nil;
+        
+        // *** IS ENCRYPTED ---> CREATE METADATA ***
         if ([CCUtility isFolderEncrypted:serverUrl account:_activeAccount]) {
         
             BOOL updateMetadata;
         
             tableDirectory *directory = [[NCManageDatabase sharedInstance] getTableDirectoryWithPredicate:[NSPredicate predicateWithFormat:@"account = %@ AND serverUrl = %@", _activeAccount, serverUrl]];
         
-            if (directory.e2eMetadataJSON.length > 0) {
-                updateMetadata = YES;
-            } else {
-                updateMetadata = NO;
-            }
+            if (directory.e2eMetadataJSON.length > 0) updateMetadata = YES;
+            else updateMetadata = NO;
             
-            // Preparing metadata
+            NSArray *tableE2eEncryption = [[NCManageDatabase sharedInstance] getE2eEncryptionsWithPredicate:[NSPredicate predicateWithFormat:@"account = %@ AND serverUrl = %@", _activeAccount, serverUrl]];
             
-            // Send metadata
-        
-            /*
-             NSError *error;
-         
-             NSString *tokenLock = [[NCManageDatabase sharedInstance] getE2eEncryptionTokenLockWithServerUrl:serverUrl];
-             tableDirectory *directory = [[NCManageDatabase sharedInstance] getTableDirectoryWithPredicate:[NSPredicate predicateWithFormat:@"account = %@ AND serverUrl = %@", _activeAccount, serverUrl]];
-             error = [[NCNetworkingSync sharedManager] lockEndToEndFolderEncrypted:_activeUser userID:_activeUserID password:_activePassword url:_activeUrl fileID:directory.fileID token:&tokenLock];
-             }
-             */
+            e2eMetadataJSON = [[NCEndToEndMetadata sharedInstance] encoderMetadata:tableE2eEncryption publicKey:[CCUtility getEndToEndPublicKey:_activeAccount]];
+            
+            if (!e2eMetadataJSON) {
+                
+                [[NCManageDatabase sharedInstance] addActivityClient:fileName fileID:assetLocalIdentifier action:k_activityDebugActionUpload selector:selector note:@"Serious internal error in encoding metadata" type:k_activityTypeFailure verbose:k_activityVerboseHigh activeUrl:_activeUrl];
+                
+                [[NCManageDatabase sharedInstance] setMetadataSession:session sessionError:@"Serious internal error in encoding metadata" sessionSelector:nil sessionSelectorPost:nil sessionTaskIdentifier:k_taskIdentifierError predicate:[NSPredicate predicateWithFormat:@"sessionID = %@ AND account = %@", sessionID, _activeAccount]];
+                
+                NSLog(@"[LOG] Upload Serious internal error in encoding metadata - %@", fileName);
+            }
+        }
+        
+        // *** IS e2eMetadataJSON ---> SEND METADATA ***
+        if (e2eMetadataJSON) {
         }
         
         [[NCManageDatabase sharedInstance] setMetadataSession:session sessionError:@"" sessionSelector:nil sessionSelectorPost:nil sessionTaskIdentifier:uploadTask.taskIdentifier predicate:[NSPredicate predicateWithFormat:@"sessionID = %@ AND account = %@", sessionID, _activeAccount]];
@@ -1150,6 +1153,7 @@
         else if (taskStatus == k_taskStatusResume) [uploadTask resume];
         
         NSLog(@"[LOG] Upload file %@ TaskIdentifier %lu", fileName, (unsigned long)uploadTask.taskIdentifier);
+            
     }
 
     // refresh main

+ 4 - 1
iOSClient/Security/NCEndToEndMetadata.swift

@@ -68,10 +68,11 @@ class NCEndToEndMetadata : NSObject  {
     // MARK: Encode / Decode JSON Metadata
     // --------------------------------------------------------------------------------------------
     
-    @objc func encoderMetadata(_ recordsE2eEncryption: [tableE2eEncryption], publicKey: String, version: Int) -> String? {
+    @objc func encoderMetadata(_ recordsE2eEncryption: [tableE2eEncryption], publicKey: String) -> String? {
         
         let jsonEncoder = JSONEncoder.init()
         var files = [String: e2eMetadata.filesKey]()
+        var version = 1
         
         // Create "files"
         for recordE2eEncryption in recordsE2eEncryption {
@@ -84,6 +85,8 @@ class NCEndToEndMetadata : NSObject  {
             
             let e2eMetadataFilesKey = e2eMetadata.filesKey(initializationVector: recordE2eEncryption.initializationVector, authenticationTag: recordE2eEncryption.authenticationTag, metadataKey: 0, encrypted: String(data: encryptedData, encoding: .utf8)!)
             files.updateValue(e2eMetadataFilesKey, forKey: recordE2eEncryption.fileNameIdentifier)
+            
+            version = recordE2eEncryption.version
         }
         
         // Create "metadata"

+ 2 - 2
iOSClient/Security/NCEntoToEndInterface.swift

@@ -319,7 +319,7 @@ class NCEntoToEndInterface : NSObject, OCNetworkingDelegate  {
     
     @objc func markEndToEndFolderEncrypted(_ url: String, fileID: String, serverUrl: String) -> Bool {
         
-        var token =  NCManageDatabase.sharedInstance.getDirectoryTokenLock(serverUrl: serverUrl) as NSString?
+        var token =  NCManageDatabase.sharedInstance.getDirectoryE2ETokenLock(serverUrl: serverUrl) as NSString?
 
         if let error = NCNetworkingSync.sharedManager().lockEnd(toEndFolderEncrypted: appDelegate.activeUser, userID: appDelegate.activeUserID, password: appDelegate.activePassword, url: url , fileID: fileID, token: &token) as NSError? {
             
@@ -351,7 +351,7 @@ class NCEntoToEndInterface : NSObject, OCNetworkingDelegate  {
     
     @objc func deletemarkEndToEndFolderEncrypted(_ url: String, fileID: String, serverUrl: String) -> Bool {
         
-        var token =  NCManageDatabase.sharedInstance.getDirectoryTokenLock(serverUrl: serverUrl) as NSString?
+        var token =  NCManageDatabase.sharedInstance.getDirectoryE2ETokenLock(serverUrl: serverUrl) as NSString?
         
         if let error = NCNetworkingSync.sharedManager().lockEnd(toEndFolderEncrypted: appDelegate.activeUser, userID: appDelegate.activeUserID, password: appDelegate.activePassword, url: url , fileID: fileID, token: &token) as NSError? {