|
@@ -31,132 +31,6 @@ import Alamofire
|
|
|
return instance
|
|
|
}()
|
|
|
|
|
|
- // MARK: - WebDav Create Folder
|
|
|
-
|
|
|
- func createFolder(fileName: String, serverUrl: String, account: String, urlBase: String, userId: String, completion: @escaping (_ error: NKError) -> Void) {
|
|
|
-
|
|
|
- var fileNameFolder = CCUtility.removeForbiddenCharactersServer(fileName)!
|
|
|
- var fileNameFolderUrl = ""
|
|
|
- var fileNameIdentifier = ""
|
|
|
- var key: NSString?
|
|
|
- var initializationVector: NSString?
|
|
|
-
|
|
|
- fileNameFolder = NCUtilityFileSystem.shared.createFileName(fileNameFolder, serverUrl: serverUrl, account: account)
|
|
|
- if fileNameFolder.count == 0 {
|
|
|
- return completion(NKError())
|
|
|
- }
|
|
|
- fileNameIdentifier = CCUtility.generateRandomIdentifier()
|
|
|
- fileNameFolderUrl = serverUrl + "/" + fileNameIdentifier
|
|
|
-
|
|
|
- self.lock(account: account, serverUrl: serverUrl) { directory, e2eToken, error in
|
|
|
- if error == .success && e2eToken != nil && directory != nil {
|
|
|
-
|
|
|
- let options = NKRequestOptions(customHeader: ["e2e-token": e2eToken!])
|
|
|
-
|
|
|
- NextcloudKit.shared.createFolder(fileNameFolderUrl, options: options) { account, ocId, _, error in
|
|
|
- if error == .success {
|
|
|
- guard let fileId = NCUtility.shared.ocIdToFileId(ocId: ocId) else {
|
|
|
- // unlock
|
|
|
- if let tableLock = NCManageDatabase.shared.getE2ETokenLock(account: account, serverUrl: serverUrl) {
|
|
|
- NextcloudKit.shared.lockE2EEFolder(fileId: tableLock.fileId, e2eToken: tableLock.e2eToken, method: "DELETE") { _, _, _, _ in }
|
|
|
- }
|
|
|
- return completion(NKError(errorCode: NCGlobal.shared.errorInternalError, errorDescription: "Error convert ocId"))
|
|
|
- }
|
|
|
- NextcloudKit.shared.markE2EEFolder(fileId: fileId, delete: false) { account, error in
|
|
|
- if error == .success {
|
|
|
-
|
|
|
- let object = tableE2eEncryption()
|
|
|
-
|
|
|
- NCEndToEndEncryption.sharedManager()?.encryptkey(&key, initializationVector: &initializationVector)
|
|
|
-
|
|
|
- object.account = account
|
|
|
- object.authenticationTag = nil
|
|
|
- object.fileName = fileNameFolder
|
|
|
- object.fileNameIdentifier = fileNameIdentifier
|
|
|
- object.fileNamePath = ""
|
|
|
- object.key = key! as String
|
|
|
- object.initializationVector = initializationVector! as String
|
|
|
-
|
|
|
- if let result = NCManageDatabase.shared.getE2eEncryption(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", account, serverUrl)) {
|
|
|
- object.metadataKey = result.metadataKey
|
|
|
- object.metadataKeyIndex = result.metadataKeyIndex
|
|
|
- } else {
|
|
|
- object.metadataKey = (NCEndToEndEncryption.sharedManager()?.generateKey(16)?.base64EncodedString(options: []))! as String // AES_KEY_128_LENGTH
|
|
|
- object.metadataKeyIndex = 0
|
|
|
- }
|
|
|
- object.mimeType = "httpd/unix-directory"
|
|
|
- object.serverUrl = serverUrl
|
|
|
- object.version = 1
|
|
|
-
|
|
|
- NCManageDatabase.shared.addE2eEncryption(object)
|
|
|
-
|
|
|
- self.sendE2EMetadata(account: account, serverUrl: serverUrl, fileNameRename: nil, fileNameNewRename: nil, deleteE2eEncryption: nil, urlBase: urlBase, userId: userId) { e2eToken, error in
|
|
|
- // unlock
|
|
|
- if let tableLock = NCManageDatabase.shared.getE2ETokenLock(account: account, serverUrl: serverUrl) {
|
|
|
- NextcloudKit.shared.lockE2EEFolder(fileId: tableLock.fileId, e2eToken: tableLock.e2eToken, method: "DELETE") { _, _, _, _ in }
|
|
|
- }
|
|
|
- if error == .success, let ocId = ocId {
|
|
|
- NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterCreateFolder, userInfo: ["ocId": ocId, "serverUrl": serverUrl, "account": account, "e2ee": true])
|
|
|
- }
|
|
|
- completion(error)
|
|
|
- }
|
|
|
-
|
|
|
- } else {
|
|
|
- // unlock
|
|
|
- if let tableLock = NCManageDatabase.shared.getE2ETokenLock(account: account, serverUrl: serverUrl) {
|
|
|
- NextcloudKit.shared.lockE2EEFolder(fileId: tableLock.fileId, e2eToken: tableLock.e2eToken, method: "DELETE") { _, _, _, _ in }
|
|
|
- }
|
|
|
- completion(error)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- } else {
|
|
|
- // unlock
|
|
|
- if let tableLock = NCManageDatabase.shared.getE2ETokenLock(account: account, serverUrl: serverUrl) {
|
|
|
- NextcloudKit.shared.lockE2EEFolder(fileId: tableLock.fileId, e2eToken: tableLock.e2eToken, method: "DELETE") { _, _, _, _ in }
|
|
|
- }
|
|
|
- completion(error)
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- completion(error)
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // MARK: - WebDav Delete
|
|
|
-
|
|
|
- func deleteMetadata(_ metadata: tableMetadata, completion: @escaping (_ error: NKError) -> Void) {
|
|
|
-
|
|
|
- self.lock(account: metadata.account, serverUrl: metadata.serverUrl) { directory, e2eToken, error in
|
|
|
- if error == .success && e2eToken != nil && directory != nil {
|
|
|
-
|
|
|
- let deleteE2eEncryption = NSPredicate(format: "account == %@ AND serverUrl == %@ AND fileNameIdentifier == %@", metadata.account, metadata.serverUrl, metadata.fileName)
|
|
|
- NCNetworking.shared.deleteMetadataPlain(metadata, customHeader: ["e2e-token": e2eToken!]) { error in
|
|
|
-
|
|
|
- let home = NCUtilityFileSystem.shared.getHomeServer(urlBase: metadata.urlBase, userId: metadata.userId)
|
|
|
- if metadata.serverUrl != home {
|
|
|
- self.sendE2EMetadata(account: metadata.account, serverUrl: metadata.serverUrl, fileNameRename: nil, fileNameNewRename: nil, deleteE2eEncryption: deleteE2eEncryption, urlBase: metadata.urlBase, userId: metadata.userId) { e2eToken, error in
|
|
|
- // unlock
|
|
|
- if let tableLock = NCManageDatabase.shared.getE2ETokenLock(account: metadata.account, serverUrl: metadata.serverUrl) {
|
|
|
- NextcloudKit.shared.lockE2EEFolder(fileId: tableLock.fileId, e2eToken: tableLock.e2eToken, method: "DELETE") { _, _, _, _ in }
|
|
|
- }
|
|
|
- completion(error)
|
|
|
- }
|
|
|
- } else {
|
|
|
- // unlock
|
|
|
- if let tableLock = NCManageDatabase.shared.getE2ETokenLock(account: metadata.account, serverUrl: metadata.serverUrl) {
|
|
|
- NextcloudKit.shared.lockE2EEFolder(fileId: tableLock.fileId, e2eToken: tableLock.e2eToken, method: "DELETE") { _, _, _, _ in }
|
|
|
- }
|
|
|
- completion(error)
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- completion(error)
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
// MARK: - WebDav Rename
|
|
|
|
|
|
func renameMetadata(_ metadata: tableMetadata, fileNameNew: String, completion: @escaping (_ error: NKError) -> Void) {
|