Bläddra i källkod

E2EE review

Signed-off-by: Marino Faggiana <marino@marinofaggiana.com>
Marino Faggiana 2 år sedan
förälder
incheckning
a3597063bb

+ 3 - 0
iOSClient/Networking/E2EE/NCNetworkingE2EE.swift

@@ -478,7 +478,9 @@ import Alamofire
 
     func sendE2EMetadata(account: String, serverUrl: String, fileNameRename: String?, fileNameNewRename: String?, deleteE2eEncryption: NSPredicate?, urlBase: String, userId: String, upload: Bool = false) async -> (e2eToken: String?, error: NKError) {
 
+        // Lock
         let lockResults = await lock(account: account, serverUrl: serverUrl)
+
         if lockResults.error == .success, let e2eToken = lockResults.e2eToken, let directory = lockResults.directory {
             let getE2EEMetadataResults = await  NextcloudKit.shared.getE2EEMetadata(fileId: directory.fileId, e2eToken: e2eToken)
 
@@ -509,6 +511,7 @@ import Alamofire
                 method = "DELETE"
             }
 
+            // send metadata
             let putE2EEMetadataResults =  await NextcloudKit.shared.putE2EEMetadata(fileId: directory.fileId, e2eToken: e2eToken, e2eMetadata: e2eMetadataNew, method: method)
             if upload {
                 return (e2eToken, putE2EEMetadataResults.error)

+ 14 - 2
iOSClient/Networking/E2EE/NCNetworkingE2EECreateFolder.swift

@@ -47,10 +47,14 @@ import Foundation
         fileNameIdentifier = CCUtility.generateRandomIdentifier()
         fileNameFolderUrl = serverUrl + "/" + fileNameIdentifier
 
+        // Lock
         let lockResults = await NCNetworkingE2EE.shared.lock(account: account, serverUrl: serverUrl)
+
         if lockResults.error == .success, let e2eToken = lockResults.e2eToken {
+
             let options = NKRequestOptions(customHeader: ["e2e-token": e2eToken])
             let createFolderResults = await NextcloudKit.shared.createFolder(fileNameFolderUrl, options: options)
+
             if createFolderResults.error == .success {
                 guard let fileId = NCUtility.shared.ocIdToFileId(ocId: createFolderResults.ocId) else {
                     // unlock
@@ -59,7 +63,10 @@ import Foundation
                     }
                     return NKError(errorCode: NCGlobal.shared.errorInternalError, errorDescription: "Error convert ocId")
                 }
+
+                // Mark folder as E2EE
                 let markE2EEFolderResults = await NextcloudKit.shared.markE2EEFolder(fileId: fileId, delete: false)
+
                 if markE2EEFolderResults.error == .success {
                     let object = tableE2eEncryption()
                     NCEndToEndEncryption.sharedManager()?.encryptkey(&key, initializationVector: &initializationVector)
@@ -82,18 +89,23 @@ import Foundation
                     object.version = 1
                     NCManageDatabase.shared.addE2eEncryption(object)
 
+                    // Send metadata
                     let sendE2EMetadataResults = await NCNetworkingE2EE.shared.sendE2EMetadata(account: account, serverUrl: serverUrl, fileNameRename: nil, fileNameNewRename: nil, deleteE2eEncryption: nil, urlBase: urlBase, userId: userId)
-                    // unlock
+
+                    // Unlock
                     if let tableLock = NCManageDatabase.shared.getE2ETokenLock(account: account, serverUrl: serverUrl) {
                         await NextcloudKit.shared.lockE2EEFolder(fileId: tableLock.fileId, e2eToken: tableLock.e2eToken, method: "DELETE")
                     }
+
                     if sendE2EMetadataResults.error == .success, let ocId = createFolderResults.ocId {
                         NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterCreateFolder, userInfo: ["ocId": ocId, "serverUrl": serverUrl, "account": account, "e2ee": true])
                     }
+
                     return sendE2EMetadataResults.error
 
                 } else {
-                    // unlock
+
+                    // Unlock
                     if let tableLock = NCManageDatabase.shared.getE2ETokenLock(account: account, serverUrl: serverUrl) {
                         await NextcloudKit.shared.lockE2EEFolder(fileId: tableLock.fileId, e2eToken: tableLock.e2eToken, method: "DELETE")
                     }

+ 15 - 11
iOSClient/Networking/E2EE/NCNetworkingE2EEDelete.swift

@@ -34,12 +34,19 @@ import Foundation
 
     func delete(metadata: tableMetadata) async -> (NKError) {
 
+        // Lock
         let lockResults = await NCNetworkingE2EE.shared.lock(account: metadata.account, serverUrl: metadata.serverUrl)
+
         if lockResults.error == .success, let e2eToken = lockResults.e2eToken {
+
             let deleteE2eEncryption = NSPredicate(format: "account == %@ AND serverUrl == %@ AND fileNameIdentifier == %@", metadata.account, metadata.serverUrl, metadata.fileName)
             let errorDeleteMetadataPlain = await NCNetworking.shared.deleteMetadataPlain(metadata, customHeader: ["e2e-token": e2eToken])
             let home = NCUtilityFileSystem.shared.getHomeServer(urlBase: metadata.urlBase, userId: metadata.userId)
+            var error = errorDeleteMetadataPlain
+
             if metadata.serverUrl != home {
+
+                // Send metadata
                 let sendE2EMetadataResults = await
                     NCNetworkingE2EE.shared.sendE2EMetadata(account: metadata.account,
                                                             serverUrl: metadata.serverUrl,
@@ -48,20 +55,17 @@ import Foundation
                                                             deleteE2eEncryption: deleteE2eEncryption,
                                                             urlBase: metadata.urlBase,
                                                             userId: metadata.userId)
-                // unlock
-                if let tableLock = NCManageDatabase.shared.getE2ETokenLock(account: metadata.account, serverUrl: metadata.serverUrl) {
-                    await NextcloudKit.shared.lockE2EEFolder(fileId: tableLock.fileId, e2eToken: tableLock.e2eToken, method: "DELETE")
-                }
-                return sendE2EMetadataResults.error
 
-            } else {
-                // unlock
-                if let tableLock = NCManageDatabase.shared.getE2ETokenLock(account: metadata.account, serverUrl: metadata.serverUrl) {
-                    await NextcloudKit.shared.lockE2EEFolder(fileId: tableLock.fileId, e2eToken: tableLock.e2eToken, method: "DELETE")
-                }
-                return errorDeleteMetadataPlain
+                error = sendE2EMetadataResults.error
             }
 
+            // Unlock
+            if let tableLock = NCManageDatabase.shared.getE2ETokenLock(account: metadata.account, serverUrl: metadata.serverUrl) {
+                await NextcloudKit.shared.lockE2EEFolder(fileId: tableLock.fileId, e2eToken: tableLock.e2eToken, method: "DELETE")
+            }
+
+            return error
+
         } else {
             return lockResults.error
         }

+ 5 - 1
iOSClient/Networking/E2EE/NCNetworkingE2EERename.swift

@@ -36,8 +36,12 @@ import Foundation
 
         // verify if exists the new fileName
         if NCManageDatabase.shared.getE2eEncryption(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND fileName == %@", metadata.account, metadata.serverUrl, fileNameNew)) != nil {
+
             return NKError(errorCode: NCGlobal.shared.errorInternalError, errorDescription: "_file_already_exists_")
+
         } else {
+
+            // Lock & Send metadata
             let sendE2EMetadataResults = await
             NCNetworkingE2EE.shared.sendE2EMetadata(account: metadata.account,
                             serverUrl: metadata.serverUrl,
@@ -61,7 +65,7 @@ import Foundation
                 NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterRenameFile, userInfo: ["ocId": metadata.ocId, "account": metadata.account])
             }
 
-            // unlock
+            // Unlock
             if let tableLock = NCManageDatabase.shared.getE2ETokenLock(account: metadata.account, serverUrl: metadata.serverUrl) {
                 await NextcloudKit.shared.lockE2EEFolder(fileId: tableLock.fileId, e2eToken: tableLock.e2eToken, method: "DELETE")
             }