Explorar o código

coding

Signed-off-by: Marino Faggiana <marino@marinofaggiana.com>
Marino Faggiana %!s(int64=2) %!d(string=hai) anos
pai
achega
b04aa9cacc

+ 3 - 0
iOSClient/AppDelegate.swift

@@ -228,6 +228,9 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD
 
         // Request Service Server Nextcloud
         NCService.shared.startRequestServicesServer()
+
+        // Unlock E2EE
+        NCNetworkingE2EE.shared.unlockAll(account: account)
         
         // Request TouchID, FaceID
         enableTouchFaceID()

+ 13 - 0
iOSClient/Data/NCManageDatabase.swift

@@ -939,6 +939,19 @@ class NCManageDatabase: NSObject {
         return tableE2eEncryptionLock.init(value: result)
     }
 
+    @objc func getE2EAllTokenLock(account: String) -> [tableE2eEncryptionLock] {
+
+        let realm = try! Realm()
+
+        let results = realm.objects(tableE2eEncryptionLock.self).filter("account == %@", account)
+
+        if results.count > 0 {
+            return Array(results.map { tableE2eEncryptionLock.init(value: $0) })
+        } else {
+            return []
+        }
+    }
+
     @objc func setE2ETokenLock(account: String, serverUrl: String, fileId: String, e2eToken: String) {
 
         let realm = try! Realm()

+ 22 - 14
iOSClient/Networking/E2EE/NCNetworkingE2EE.swift

@@ -38,7 +38,7 @@ class NCNetworkingE2EE: NSObject {
         return UUID
     }
 
-    func lock(account: String, serverUrl: String) async -> (directory: tableDirectory?, e2eToken: String?, error: NKError) {
+    func lock(account: String, serverUrl: String) async -> (fileId: String?, e2eToken: String?, error: NKError) {
 
         var e2eToken: String?
 
@@ -55,30 +55,37 @@ class NCNetworkingE2EE: NSObject {
             NCManageDatabase.shared.setE2ETokenLock(account: account, serverUrl: serverUrl, fileId: directory.fileId, e2eToken: e2eToken)
         }
 
-        return (directory, lockE2EEFolderResults.e2eToken, lockE2EEFolderResults.error)
+        return (directory.fileId, lockE2EEFolderResults.e2eToken, lockE2EEFolderResults.error)
     }
 
-    @discardableResult
-    func unlock(account: String, serverUrl: String) async -> (directory: tableDirectory?, e2eToken: String?, error: NKError) {
+    func unlock(account: String, serverUrl: String) async -> () {
 
-        var e2eToken: String?
-
-        guard let directory = NCManageDatabase.shared.getTableDirectory(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", account, serverUrl)) else {
-            return (nil, nil, NKError())
-        }
-
-        if let tableLock = NCManageDatabase.shared.getE2ETokenLock(account: account, serverUrl: serverUrl) {
-            e2eToken = tableLock.e2eToken
+        guard let tableLock = NCManageDatabase.shared.getE2ETokenLock(account: account, serverUrl: serverUrl) else {
+            return
         }
 
-        let lockE2EEFolderResults = await NextcloudKit.shared.lockE2EEFolder(fileId: directory.fileId, e2eToken: e2eToken, method: "DELETE")
+        let lockE2EEFolderResults = await NextcloudKit.shared.lockE2EEFolder(fileId: tableLock.fileId, e2eToken: tableLock.e2eToken, method: "DELETE")
         if lockE2EEFolderResults.error == .success {
             NCManageDatabase.shared.deteleE2ETokenLock(account: account, serverUrl: serverUrl)
         }
 
-        return (directory, lockE2EEFolderResults.e2eToken, lockE2EEFolderResults.error)
+        return
+    }
+
+    func unlockAll(account: String) {
+        guard CCUtility.isEnd(toEndEnabled: account) else { return }
+
+        Task {
+            for result in NCManageDatabase.shared.getE2EAllTokenLock(account: account) {
+                let lockE2EEFolderResults = await NextcloudKit.shared.lockE2EEFolder(fileId: result.fileId, e2eToken: result.e2eToken, method: "DELETE")
+                if lockE2EEFolderResults.error == .success {
+                    NCManageDatabase.shared.deteleE2ETokenLock(account: account, serverUrl: result.serverUrl)
+                }
+            }
+        }
     }
 
+    /*
     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
@@ -126,4 +133,5 @@ class NCNetworkingE2EE: NSObject {
             return (lockResults.e2eToken, lockResults.error)
         }
     }
+    */
 }

+ 5 - 5
iOSClient/Networking/E2EE/NCNetworkingE2EECreateFolder.swift

@@ -48,7 +48,7 @@ class NCNetworkingE2EECreateFolder: NSObject {
         // Lock
         let lockResults = await NCNetworkingE2EE.shared.lock(account: account, serverUrl: serverUrl)
         error = lockResults.error
-        if error == .success, let e2eToken = lockResults.e2eToken, let directory = lockResults.directory {
+        if error == .success, let e2eToken = lockResults.e2eToken, let fileId = lockResults.fileId {
 
             let createFolderResults = await NextcloudKit.shared.createFolder(serverUrlFileName: serverUrlFileName, options: NKRequestOptions(customHeader: ["e2e-token": e2eToken]))
             error = createFolderResults.error
@@ -58,7 +58,7 @@ class NCNetworkingE2EECreateFolder: NSObject {
                 let markE2EEFolderResults = await NextcloudKit.shared.markE2EEFolder(fileId: fileId, delete: false)
                 error = markE2EEFolderResults.error
                 if error == .success {
-                    error = await createE2Ee(account: account, fileNameFolder: fileNameFolder, fileNameIdentifier: fileNameIdentifier, serverUrl: serverUrl, e2eToken: e2eToken, directory: directory ,urlBase: urlBase, userId: userId)
+                    error = await createE2Ee(account: account, fileNameFolder: fileNameFolder, fileNameIdentifier: fileNameIdentifier, serverUrl: serverUrl, e2eToken: e2eToken, fileId: fileId ,urlBase: urlBase, userId: userId)
                 }
             }
 
@@ -72,7 +72,7 @@ class NCNetworkingE2EECreateFolder: NSObject {
         return error
     }
 
-    private func createE2Ee(account: String, fileNameFolder: String, fileNameIdentifier: String, serverUrl: String, e2eToken: String, directory: tableDirectory, urlBase: String, userId: String) async -> (NKError) {
+    private func createE2Ee(account: String, fileNameFolder: String, fileNameIdentifier: String, serverUrl: String, e2eToken: String, fileId: String, urlBase: String, userId: String) async -> (NKError) {
 
         var key: NSString?
         var initializationVector: NSString?
@@ -80,7 +80,7 @@ class NCNetworkingE2EECreateFolder: NSObject {
         var method = "POST"
 
         // Get last metadata
-        let getE2EEMetadataResults = await NextcloudKit.shared.getE2EEMetadata(fileId: directory.fileId, e2eToken: e2eToken)
+        let getE2EEMetadataResults = await NextcloudKit.shared.getE2EEMetadata(fileId: fileId, e2eToken: e2eToken)
         if getE2EEMetadataResults.error == .success, let e2eMetadata = getE2EEMetadataResults.e2eMetadata {
             if !NCEndToEndMetadata.shared.decoderMetadata(e2eMetadata, privateKey: CCUtility.getEndToEndPrivateKey(account), serverUrl: serverUrl, account: account, urlBase: urlBase, userId: userId) {
                 return NKError(errorCode: NCGlobal.shared.errorInternalError, errorDescription: NSLocalizedString("_e2e_error_encode_metadata_", comment: ""))
@@ -115,7 +115,7 @@ class NCNetworkingE2EECreateFolder: NSObject {
         }
 
         // send metadata
-        let putE2EEMetadataResults = await NextcloudKit.shared.putE2EEMetadata(fileId: directory.fileId, e2eToken: e2eToken, e2eMetadata: e2eMetadataNew, method: method)
+        let putE2EEMetadataResults = await NextcloudKit.shared.putE2EEMetadata(fileId: fileId, e2eToken: e2eToken, e2eMetadata: e2eMetadataNew, method: method)
         
         return putE2EEMetadataResults.error
     }

+ 5 - 5
iOSClient/Networking/E2EE/NCNetworkingE2EEDelete.swift

@@ -36,13 +36,13 @@ class NCNetworkingE2EEDelete: NSObject {
 
         var error = NKError()
 
-        func sendE2EMetadata(e2eToken: String, directory: tableDirectory) async -> (NKError) {
+        func sendE2EMetadata(e2eToken: String, fileId: String) async -> (NKError) {
 
             var e2eMetadataNew: String?
             var method = "PUT"
 
             // Get last metadata
-            let getE2EEMetadataResults = await NextcloudKit.shared.getE2EEMetadata(fileId: directory.fileId, e2eToken: e2eToken)
+            let getE2EEMetadataResults = await NextcloudKit.shared.getE2EEMetadata(fileId: fileId, e2eToken: e2eToken)
             guard getE2EEMetadataResults.error == .success, let e2eMetadata = getE2EEMetadataResults.e2eMetadata, NCEndToEndMetadata.shared.decoderMetadata(e2eMetadata, privateKey: CCUtility.getEndToEndPrivateKey(metadata.account), serverUrl: metadata.serverUrl, account: metadata.account, urlBase: metadata.urlBase, userId: metadata.userId) else {
                     return NKError(errorCode: NCGlobal.shared.errorInternalError, errorDescription: NSLocalizedString("_e2e_error_encode_metadata_", comment: ""))
             }
@@ -58,7 +58,7 @@ class NCNetworkingE2EEDelete: NSObject {
             }
 
             // Send metadata
-            let putE2EEMetadataResults = await NextcloudKit.shared.putE2EEMetadata(fileId: directory.fileId, e2eToken: e2eToken, e2eMetadata: e2eMetadataNew, method: method)
+            let putE2EEMetadataResults = await NextcloudKit.shared.putE2EEMetadata(fileId: fileId, e2eToken: e2eToken, e2eMetadata: e2eMetadataNew, method: method)
             
             return putE2EEMetadataResults.error
         }
@@ -66,12 +66,12 @@ class NCNetworkingE2EEDelete: NSObject {
         // Lock
         let lockResults = await NCNetworkingE2EE.shared.lock(account: metadata.account, serverUrl: metadata.serverUrl)
         error = lockResults.error
-        if error == .success, let e2eToken = lockResults.e2eToken, let directory = lockResults.directory {
+        if error == .success, let e2eToken = lockResults.e2eToken, let fileId = lockResults.fileId {
 
             let deleteMetadataPlainError = await NCNetworking.shared.deleteMetadataPlain(metadata, customHeader: ["e2e-token": e2eToken])
             error = deleteMetadataPlainError
             if error == .success {
-                let sendE2EMetadataError = await sendE2EMetadata(e2eToken: e2eToken, directory: directory)
+                let sendE2EMetadataError = await sendE2EMetadata(e2eToken: e2eToken, fileId: fileId)
                 error = sendE2EMetadataError
             }
             // Unlock

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

@@ -36,10 +36,10 @@ class NCNetworkingE2EERename: NSObject {
 
         var error = NKError()
 
-        func sendE2EMetadata(e2eToken: String, directory: tableDirectory) async -> (NKError) {
+        func sendE2EMetadata(e2eToken: String, fileId: String) async -> (NKError) {
 
             // Get last metadata
-            let getE2EEMetadataResults = await NextcloudKit.shared.getE2EEMetadata(fileId: directory.fileId, e2eToken: e2eToken)
+            let getE2EEMetadataResults = await NextcloudKit.shared.getE2EEMetadata(fileId: fileId, e2eToken: e2eToken)
             guard getE2EEMetadataResults.error == .success, let e2eMetadata = getE2EEMetadataResults.e2eMetadata, NCEndToEndMetadata.shared.decoderMetadata(e2eMetadata, privateKey: CCUtility.getEndToEndPrivateKey(metadata.account), serverUrl: metadata.serverUrl, account: metadata.account, urlBase: metadata.urlBase, userId: metadata.userId) else {
                 return NKError(errorCode: NCGlobal.shared.errorInternalError, errorDescription: NSLocalizedString("_e2e_error_encode_metadata_", comment: ""))
             }
@@ -53,7 +53,7 @@ class NCNetworkingE2EERename: NSObject {
             }
 
             // send metadata
-            let putE2EEMetadataResults = await NextcloudKit.shared.putE2EEMetadata(fileId: directory.fileId, e2eToken: e2eToken, e2eMetadata: e2eMetadataNew, method: "PUT")
+            let putE2EEMetadataResults = await NextcloudKit.shared.putE2EEMetadata(fileId: fileId, e2eToken: e2eToken, e2eMetadata: e2eMetadataNew, method: "PUT")
             
             return putE2EEMetadataResults.error
         }
@@ -66,9 +66,9 @@ class NCNetworkingE2EERename: NSObject {
         // Lock
         let lockResults = await NCNetworkingE2EE.shared.lock(account: metadata.account, serverUrl: metadata.serverUrl)
         error = lockResults.error
-        if error == .success, let e2eToken = lockResults.e2eToken, let directory = lockResults.directory {
+        if error == .success, let e2eToken = lockResults.e2eToken, let fileId = lockResults.fileId {
 
-            let sendE2EMetadataError = await sendE2EMetadata(e2eToken: e2eToken, directory: directory)
+            let sendE2EMetadataError = await sendE2EMetadata(e2eToken: e2eToken, fileId: fileId)
             error = sendE2EMetadataError
             if error == .success {
                 NCManageDatabase.shared.setMetadataFileNameView(serverUrl: metadata.serverUrl, fileName: metadata.fileName, newFileNameView: fileNameNew, account: metadata.account)

+ 5 - 5
iOSClient/Networking/E2EE/NCNetworkingE2EEUpload.swift

@@ -58,14 +58,14 @@ class NCNetworkingE2EEUpload: NSObject {
         metadata = result
 
         let lockResults = await NCNetworkingE2EE.shared.lock(account: metadata.account, serverUrl: metadata.serverUrl)
-        guard let e2eToken = lockResults.e2eToken, let directory = lockResults.directory, lockResults.error == .success else {
+        guard let e2eToken = lockResults.e2eToken, let fileId = lockResults.fileId, lockResults.error == .success else {
             NCManageDatabase.shared.deleteMetadata(predicate: NSPredicate(format: "ocId == %@", ocIdTemp))
             NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterUploadedFile, userInfo: ["ocId": metadata.ocId, "serverUrl": metadata.serverUrl, "account": metadata.account, "fileName": metadata.fileName, "ocIdTemp": ocIdTemp, "error": NKError(errorCode: NCGlobal.shared.errorInternalError, errorDescription: "_e2e_error_create_encrypted_")])
             return errorCreateEncrypted
         }
 
         // Send e2e metadata
-        let createE2EeError = await createE2Ee(metadata: metadata, e2eToken: e2eToken, directory: directory)
+        let createE2EeError = await createE2Ee(metadata: metadata, e2eToken: e2eToken, fileId: fileId)
         guard createE2EeError == .success else {
             // Unlock
             await NCNetworkingE2EE.shared.unlock(account: metadata.account, serverUrl: metadata.serverUrl)
@@ -114,7 +114,7 @@ class NCNetworkingE2EEUpload: NSObject {
         return(sendFileResults.error)
     }
 
-    private func createE2Ee(metadata: tableMetadata, e2eToken: String, directory: tableDirectory) async -> (NKError) {
+    private func createE2Ee(metadata: tableMetadata, e2eToken: String, fileId: String) async -> (NKError) {
 
         var key: NSString?, initializationVector: NSString?, authenticationTag: NSString?
         let objectE2eEncryption = tableE2eEncryption()
@@ -126,7 +126,7 @@ class NCNetworkingE2EEUpload: NSObject {
         }
 
         // Get last metadata
-        let getE2EEMetadataResults = await NextcloudKit.shared.getE2EEMetadata(fileId: directory.fileId, e2eToken: e2eToken)
+        let getE2EEMetadataResults = await NextcloudKit.shared.getE2EEMetadata(fileId: fileId, e2eToken: e2eToken)
         if getE2EEMetadataResults.error == .success, let e2eMetadata = getE2EEMetadataResults.e2eMetadata {
             if !NCEndToEndMetadata.shared.decoderMetadata(e2eMetadata, privateKey: CCUtility.getEndToEndPrivateKey(metadata.account), serverUrl: metadata.serverUrl, account: metadata.account, urlBase: metadata.urlBase, userId: metadata.userId) {
                 return NKError(errorCode: NCGlobal.shared.errorInternalError, errorDescription: NSLocalizedString("_e2e_error_encode_metadata_", comment: ""))
@@ -161,7 +161,7 @@ class NCNetworkingE2EEUpload: NSObject {
         }
 
         // send metadata
-        let putE2EEMetadataResults = await NextcloudKit.shared.putE2EEMetadata(fileId: directory.fileId, e2eToken: e2eToken, e2eMetadata: e2eMetadataNew, method: method)
+        let putE2EEMetadataResults = await NextcloudKit.shared.putE2EEMetadata(fileId: fileId, e2eToken: e2eToken, e2eMetadata: e2eMetadataNew, method: method)
         
         return putE2EEMetadataResults.error
     }