diff --git a/SessionSnodeKit/OnionRequestAPI+Encryption.swift b/SessionSnodeKit/OnionRequestAPI+Encryption.swift index 96c5d53fa..79cfb2baa 100644 --- a/SessionSnodeKit/OnionRequestAPI+Encryption.swift +++ b/SessionSnodeKit/OnionRequestAPI+Encryption.swift @@ -27,7 +27,7 @@ internal extension OnionRequestAPI { let plaintext = try encode(ciphertext: payloadAsData, json: [ "headers" : "" ]) let result = try AESGCM.encrypt(plaintext, for: snodeX25519PublicKey) seal.fulfill(result) - case .server(_, _, let serverX25519PublicKey): + case .server(_, _, let serverX25519PublicKey, _, _): let plaintext = try JSONSerialization.data(withJSONObject: payload, options: [ .fragmentsAllowed ]) let result = try AESGCM.encrypt(plaintext, for: serverX25519PublicKey) seal.fulfill(result) @@ -48,9 +48,9 @@ internal extension OnionRequestAPI { case .snode(let snode): let snodeED25519PublicKey = snode.publicKeySet.ed25519Key parameters = [ "destination" : snodeED25519PublicKey ] - case .server(let host, let target, _): - // FIXME: protocol and port shouldn't be hardcoded - parameters = [ "host" : host, "target" : target, "method" : "POST", "protocol" : "http", "port" : 80 ] + case .server(let host, let target, _, let scheme, let port): + parameters = [ "host" : host, "target" : target, "method" : "POST", "protocol" : scheme ?? "https" ] + if let port = port { parameters["port"] = port } } parameters["ephemeral_key"] = previousEncryptionResult.ephemeralPublicKey.toHexString() let x25519PublicKey: String @@ -58,7 +58,7 @@ internal extension OnionRequestAPI { case .snode(let snode): let snodeX25519PublicKey = snode.publicKeySet.x25519Key x25519PublicKey = snodeX25519PublicKey - case .server(_, _, let serverX25519PublicKey): + case .server(_, _, let serverX25519PublicKey, _, _): x25519PublicKey = serverX25519PublicKey } do { diff --git a/SessionSnodeKit/OnionRequestAPI.swift b/SessionSnodeKit/OnionRequestAPI.swift index 420b548fc..ebcf8504b 100644 --- a/SessionSnodeKit/OnionRequestAPI.swift +++ b/SessionSnodeKit/OnionRequestAPI.swift @@ -29,7 +29,7 @@ public enum OnionRequestAPI { // MARK: Destination public enum Destination { case snode(Snode) - case server(host: String, target: String, x25519PublicKey: String) + case server(host: String, target: String, x25519PublicKey: String, scheme: String?, port: UInt16?) } // MARK: Error @@ -306,13 +306,10 @@ public enum OnionRequestAPI { default: return value } } - guard let url = request.url?.absoluteString, let host = request.url?.host else { return Promise(error: Error.invalidURL) } - var endpoint = "" - if server.count < url.count { - guard let serverEndIndex = url.range(of: server)?.upperBound else { return Promise(error: Error.invalidURL) } - let endpointStartIndex = url.index(after: serverEndIndex) - endpoint = String(url[endpointStartIndex..