From 52d6b9504650e9a127a0b0d90f6c9b147385de78 Mon Sep 17 00:00:00 2001 From: Niels Andriesse Date: Fri, 18 Oct 2019 11:33:14 +1100 Subject: [PATCH] Update attachment API for public chat server --- .../src/Loki/API/LokiDotNetAPI.swift | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/SignalServiceKit/src/Loki/API/LokiDotNetAPI.swift b/SignalServiceKit/src/Loki/API/LokiDotNetAPI.swift index 20e0eef82..931deb1f5 100644 --- a/SignalServiceKit/src/Loki/API/LokiDotNetAPI.swift +++ b/SignalServiceKit/src/Loki/API/LokiDotNetAPI.swift @@ -38,27 +38,34 @@ public class LokiDotNetAPI : NSObject { // MARK: Attachments (Public API) public static func uploadAttachment(_ attachment: TSAttachmentStream, with attachmentID: String, to server: String) -> Promise { + let isEncryptionRequired = (server == LokiStorageAPI.server) return Promise() { seal in getAuthToken(for: server).done { token in - // Encrypt the attachment + let data: Data guard let unencryptedAttachmentData = try? attachment.readDataFromFile() else { print("[Loki] Couldn't read attachment data from disk.") return seal.reject(Error.generic) } - var encryptionKey = NSData() - var digest = NSData() - guard let encryptedAttachmentData = Cryptography.encryptAttachmentData(unencryptedAttachmentData, outKey: &encryptionKey, outDigest: &digest) else { - print("[Loki] Couldn't encrypt attachment.") - return seal.reject(Error.encryptionFailed) + // Encrypt the attachment if needed + if isEncryptionRequired { + var encryptionKey = NSData() + var digest = NSData() + guard let encryptedAttachmentData = Cryptography.encryptAttachmentData(unencryptedAttachmentData, outKey: &encryptionKey, outDigest: &digest) else { + print("[Loki] Couldn't encrypt attachment.") + return seal.reject(Error.encryptionFailed) + } + attachment.encryptionKey = encryptionKey as Data + attachment.digest = digest as Data + data = encryptedAttachmentData + } else { + data = unencryptedAttachmentData } - attachment.encryptionKey = encryptionKey as Data - attachment.digest = digest as Data // Create the request let url = "\(server)/files" let parameters: JSON = [ "type" : attachmentType, "Content-Type" : "application/binary" ] var error: NSError? var request = AFHTTPRequestSerializer().multipartFormRequest(withMethod: "POST", urlString: url, parameters: parameters, constructingBodyWith: { formData in - formData.appendPart(withFileData: encryptedAttachmentData, name: "content", fileName: UUID().uuidString, mimeType: "application/binary") + formData.appendPart(withFileData: data, name: "content", fileName: UUID().uuidString, mimeType: "application/binary") }, error: &error) request.addValue("Bearer \(token)", forHTTPHeaderField: "Authorization") if let error = error {