onion routing attachment download for open groups

pull/295/head
Ryan ZHAO 5 years ago
parent 76b6afe0e3
commit bdd178b227

@ -66,24 +66,38 @@ public final class FileServerAPI : DotNetAPI {
public static func downloadAttachment(_ downloadURL: String) -> Promise<Data> { public static func downloadAttachment(_ downloadURL: String) -> Promise<Data> {
var error: NSError? var error: NSError?
var url = downloadURL let url = URL(string: downloadURL)!
if downloadURL.contains(fileStaticServer) { var host = "https://\(url.host!)"
url = downloadURL.replacingOccurrences(of: fileStaticServer, with: "\(server)/loki/v1") var actualDownloadURL = downloadURL
if fileStaticServer.contains(host) {
actualDownloadURL = downloadURL.replacingOccurrences(of: fileStaticServer, with: "\(server)/loki/v1")
host = server
} else {
actualDownloadURL = downloadURL.replacingOccurrences(of: host, with: "\(host)/loki/v1")
} }
let request = AFHTTPRequestSerializer().request(withMethod: "GET", urlString: url, parameters: nil, error: &error) let request = AFHTTPRequestSerializer().request(withMethod: "GET", urlString: actualDownloadURL, parameters: nil, error: &error)
if let error = error { if let error = error {
print("[Loki] Couldn't download attachment due to error: \(error).") print("[Loki] Couldn't download attachment due to error: \(error).")
return Promise(error: error) return Promise(error: error)
} }
return OnionRequestAPI.sendOnionRequest(request, to: server, using: fileServerPublicKey, isJSONRequired: false).map2 { json in return getServerPublicKey(for: host).then2 { serverPublicKey in
guard let body = json["body"] as? JSON, let dataArray = body["data"] as? [UInt8] else { OnionRequestAPI.sendOnionRequest(request, to: host, using: serverPublicKey, isJSONRequired: false).map2 { json in
print("[Loki] Couldn't download attachment.") guard let body = json["body"] as? JSON, let dataArray = body["data"] as? [UInt8] else {
return Data() print("[Loki] Couldn't download attachment.")
return Data()
}
return Data(dataArray)
} }
return Data(dataArray)
} }
} }
public static func getServerPublicKey(for host: String) -> Promise<String> {
if server.contains(host) {
return Promise.value(fileServerPublicKey)
}
return PublicChatAPI.getOpenGroupServerPublicKey(for: host)
}
// MARK: Open Group Server Public Key // MARK: Open Group Server Public Key
public static func getPublicKey(for openGroupServer: String) -> Promise<String> { public static func getPublicKey(for openGroupServer: String) -> Promise<String> {
let url = URL(string: "\(server)/loki/v1/getOpenGroupKey/\(URL(string: openGroupServer)!.host!)")! let url = URL(string: "\(server)/loki/v1/getOpenGroupKey/\(URL(string: openGroupServer)!.host!)")!

Loading…
Cancel
Save