diff --git a/SignalServiceKit/src/Loki/API/LokiDotNetAPI.swift b/SignalServiceKit/src/Loki/API/LokiDotNetAPI.swift index e39e6601c..2b3c50c33 100644 --- a/SignalServiceKit/src/Loki/API/LokiDotNetAPI.swift +++ b/SignalServiceKit/src/Loki/API/LokiDotNetAPI.swift @@ -74,9 +74,9 @@ public class LokiDotNetAPI : NSObject { throw error } // Send the request - let isLokiFileServer = server.contains("file.lokinet.org") || server.contains("file-dev.lokinet.org") - if isLokiFileServer { - LokiFileServerProxy(for: server).performLokiFileServerNSURLRequest(request as NSURLRequest).done { responseObject in + let isProxyingRequired = (server == LokiStorageAPI.server) + if isProxyingRequired { + let _ = LokiFileServerProxy(for: server).performLokiFileServerNSURLRequest(request as NSURLRequest).done { responseObject in // Parse the server ID & download URL guard let json = responseObject as? JSON, let data = json["data"] as? JSON, let serverID = data["id"] as? UInt64, let downloadURL = data["url"] as? String else { print("[Loki] Couldn't parse attachment from: \(responseObject).") diff --git a/SignalServiceKit/src/Loki/API/LokiFileServerProxy.swift b/SignalServiceKit/src/Loki/API/LokiFileServerProxy.swift index b6a0aa90a..dd70d537c 100644 --- a/SignalServiceKit/src/Loki/API/LokiFileServerProxy.swift +++ b/SignalServiceKit/src/Loki/API/LokiFileServerProxy.swift @@ -59,7 +59,7 @@ internal class LokiFileServerProxy : LokiHTTPClient { let parametersAsData = try JSONSerialization.data(withJSONObject: tsRequest.parameters, options: []) parametersAsString = !tsRequest.parameters.isEmpty ? String(bytes: parametersAsData, encoding: .utf8)! : "null" } else { - if let parametersAsData = request.httpBody { + if let parametersAsInputStream = request.httpBodyStream, let parametersAsData = try? Data(from: parametersAsInputStream) { parametersAsString = "{ \"fileUpload\" : \"\(String(data: parametersAsData.base64EncodedData(), encoding: .utf8) ?? "null")\" }" } else { parametersAsString = "null" diff --git a/SignalServiceKit/src/Loki/Utilities/Data+Streaming.swift b/SignalServiceKit/src/Loki/Utilities/Data+Streaming.swift new file mode 100644 index 000000000..745dc3792 --- /dev/null +++ b/SignalServiceKit/src/Loki/Utilities/Data+Streaming.swift @@ -0,0 +1,22 @@ + +extension Data { + + init(from inputStream: InputStream) throws { + self.init() + inputStream.open() + defer { inputStream.close() } + let bufferSize = 1024 + let buffer = UnsafeMutablePointer.allocate(capacity: bufferSize) + defer { buffer.deallocate() } + while inputStream.hasBytesAvailable { + let count = inputStream.read(buffer, maxLength: bufferSize) + if count < 0 { + throw inputStream.streamError! + } else if count == 0 { + break + } else { + append(buffer, count: count) + } + } + } +}