|
@@ -57,9 +57,16 @@ class NCNetworkingE2EEUpload: NSObject {
|
|
|
guard let result = NCManageDatabase.shared.addMetadata(metadata) else { return errorCreateEncrypted }
|
|
|
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 {
|
|
|
+ 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 results = await createE2Ee(metadata: metadata)
|
|
|
- guard let e2eToken = results.e2eToken, results.error == .success else {
|
|
|
+ let createE2EeError = await createE2Ee(metadata: metadata, e2eToken: e2eToken, directory: directory)
|
|
|
+ guard createE2EeError == .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
|
|
@@ -105,17 +112,18 @@ class NCNetworkingE2EEUpload: NSObject {
|
|
|
return(sendFileResults.error)
|
|
|
}
|
|
|
|
|
|
- private func createE2Ee(metadata: tableMetadata) async -> (e2eToken: String?, error: NKError) {
|
|
|
+ private func createE2Ee(metadata: tableMetadata, e2eToken: String, directory: tableDirectory) async -> (NKError) {
|
|
|
|
|
|
var key: NSString?, initializationVector: NSString?, authenticationTag: NSString?
|
|
|
let objectE2eEncryption = tableE2eEncryption()
|
|
|
let fileNameLocalPath = CCUtility.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileName)!
|
|
|
+ var method = "POST"
|
|
|
|
|
|
if NCEndToEndEncryption.sharedManager()?.encryptFileName(metadata.fileNameView, fileNameIdentifier: metadata.fileName, directory: CCUtility.getDirectoryProviderStorageOcId(metadata.ocId), key: &key, initializationVector: &initializationVector, authenticationTag: &authenticationTag) == false {
|
|
|
|
|
|
NCManageDatabase.shared.deleteMetadata(predicate: NSPredicate(format: "ocId == %@", metadata.ocId))
|
|
|
NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterUploadedFile, userInfo: ["ocId": metadata.ocId, "serverUrl": metadata.serverUrl, "account": metadata.account, "fileName": metadata.fileName, "ocIdTemp": metadata.ocId, "error": NKError(errorCode: NCGlobal.shared.errorInternalError, errorDescription: "_e2e_error_create_encrypted_")])
|
|
|
- return (nil, NKError(errorCode: NCGlobal.shared.errorInternalError, errorDescription: "_e2e_error_create_encrypted_"))
|
|
|
+ return NKError(errorCode: NCGlobal.shared.errorInternalError, errorDescription: "_e2e_error_create_encrypted_")
|
|
|
}
|
|
|
|
|
|
if let result = NCManageDatabase.shared.getE2eEncryption(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", metadata.account, metadata.serverUrl)) {
|
|
@@ -138,7 +146,23 @@ class NCNetworkingE2EEUpload: NSObject {
|
|
|
objectE2eEncryption.version = 1
|
|
|
NCManageDatabase.shared.addE2eEncryption(objectE2eEncryption)
|
|
|
|
|
|
- return await NCNetworkingE2EE.shared.sendE2EMetadata(account: metadata.account, serverUrl: metadata.serverUrl, fileNameRename: nil, fileNameNewRename: nil, deleteE2eEncryption: nil, urlBase: metadata.urlBase, userId: metadata.userId, upload: true)
|
|
|
+ // Get last metadata
|
|
|
+ let getE2EEMetadataResults = await NextcloudKit.shared.getE2EEMetadata(fileId: directory.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: ""))
|
|
|
+ }
|
|
|
+ method = "PUT"
|
|
|
+ }
|
|
|
+
|
|
|
+ // Rebuild metadata
|
|
|
+ guard let tableE2eEncryption = NCManageDatabase.shared.getE2eEncryptions(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", metadata.account, metadata.serverUrl)), let e2eMetadataNew = NCEndToEndMetadata.shared.encoderMetadata(tableE2eEncryption, privateKey: CCUtility.getEndToEndPrivateKey(metadata.account), serverUrl: metadata.serverUrl) else {
|
|
|
+ return NKError(errorCode: NCGlobal.shared.errorInternalError, errorDescription: NSLocalizedString("_e2e_error_encode_metadata_", comment: ""))
|
|
|
+ }
|
|
|
+
|
|
|
+ // send metadata
|
|
|
+ let putE2EEMetadataResults = await NextcloudKit.shared.putE2EEMetadata(fileId: directory.fileId, e2eToken: e2eToken, e2eMetadata: e2eMetadataNew, method: method)
|
|
|
+ return putE2EEMetadataResults.error
|
|
|
}
|
|
|
|
|
|
private func sendFile(metadata: tableMetadata, e2eToken: String) async -> (ocId: String?, etag: String?, date: NSDate? ,afError: AFError?, error: NKError) {
|