Don't hardcode scheme and port

This commit is contained in:
Niels Andriesse 2021-04-20 11:13:55 +10:00
parent 5a242ce4e8
commit 8375b598ad
2 changed files with 11 additions and 14 deletions

View File

@ -27,7 +27,7 @@ internal extension OnionRequestAPI {
let plaintext = try encode(ciphertext: payloadAsData, json: [ "headers" : "" ]) let plaintext = try encode(ciphertext: payloadAsData, json: [ "headers" : "" ])
let result = try AESGCM.encrypt(plaintext, for: snodeX25519PublicKey) let result = try AESGCM.encrypt(plaintext, for: snodeX25519PublicKey)
seal.fulfill(result) seal.fulfill(result)
case .server(_, _, let serverX25519PublicKey): case .server(_, _, let serverX25519PublicKey, _, _):
let plaintext = try JSONSerialization.data(withJSONObject: payload, options: [ .fragmentsAllowed ]) let plaintext = try JSONSerialization.data(withJSONObject: payload, options: [ .fragmentsAllowed ])
let result = try AESGCM.encrypt(plaintext, for: serverX25519PublicKey) let result = try AESGCM.encrypt(plaintext, for: serverX25519PublicKey)
seal.fulfill(result) seal.fulfill(result)
@ -48,9 +48,9 @@ internal extension OnionRequestAPI {
case .snode(let snode): case .snode(let snode):
let snodeED25519PublicKey = snode.publicKeySet.ed25519Key let snodeED25519PublicKey = snode.publicKeySet.ed25519Key
parameters = [ "destination" : snodeED25519PublicKey ] parameters = [ "destination" : snodeED25519PublicKey ]
case .server(let host, let target, _): case .server(let host, let target, _, let scheme, let port):
// FIXME: protocol and port shouldn't be hardcoded parameters = [ "host" : host, "target" : target, "method" : "POST", "protocol" : scheme ?? "https" ]
parameters = [ "host" : host, "target" : target, "method" : "POST", "protocol" : "http", "port" : 80 ] if let port = port { parameters["port"] = port }
} }
parameters["ephemeral_key"] = previousEncryptionResult.ephemeralPublicKey.toHexString() parameters["ephemeral_key"] = previousEncryptionResult.ephemeralPublicKey.toHexString()
let x25519PublicKey: String let x25519PublicKey: String
@ -58,7 +58,7 @@ internal extension OnionRequestAPI {
case .snode(let snode): case .snode(let snode):
let snodeX25519PublicKey = snode.publicKeySet.x25519Key let snodeX25519PublicKey = snode.publicKeySet.x25519Key
x25519PublicKey = snodeX25519PublicKey x25519PublicKey = snodeX25519PublicKey
case .server(_, _, let serverX25519PublicKey): case .server(_, _, let serverX25519PublicKey, _, _):
x25519PublicKey = serverX25519PublicKey x25519PublicKey = serverX25519PublicKey
} }
do { do {

View File

@ -29,7 +29,7 @@ public enum OnionRequestAPI {
// MARK: Destination // MARK: Destination
public enum Destination { public enum Destination {
case snode(Snode) 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 // MARK: Error
@ -306,13 +306,10 @@ public enum OnionRequestAPI {
default: return value default: return value
} }
} }
guard let url = request.url?.absoluteString, let host = request.url?.host else { return Promise(error: Error.invalidURL) } guard let url = request.url, let host = request.url?.host else { return Promise(error: Error.invalidURL) }
var endpoint = "" let endpoint = url.path.removingPrefix("/")
if server.count < url.count { let scheme = url.scheme
guard let serverEndIndex = url.range(of: server)?.upperBound else { return Promise(error: Error.invalidURL) } let port = given(url.port) { UInt16($0) }
let endpointStartIndex = url.index(after: serverEndIndex)
endpoint = String(url[endpointStartIndex..<url.endIndex])
}
let parametersAsString: String let parametersAsString: String
if let tsRequest = request as? TSRequest { if let tsRequest = request as? TSRequest {
headers["Content-Type"] = "application/json" headers["Content-Type"] = "application/json"
@ -339,7 +336,7 @@ public enum OnionRequestAPI {
"method" : request.httpMethod!, "method" : request.httpMethod!,
"headers" : headers "headers" : headers
] ]
let destination = Destination.server(host: host, target: target, x25519PublicKey: x25519PublicKey) let destination = Destination.server(host: host, target: target, x25519PublicKey: x25519PublicKey, scheme: scheme, port: port)
let promise = sendOnionRequest(with: payload, to: destination, isJSONRequired: isJSONRequired) let promise = sendOnionRequest(with: payload, to: destination, isJSONRequired: isJSONRequired)
promise.catch2 { error in promise.catch2 { error in
SNLog("Couldn't reach server: \(url) due to error: \(error).") SNLog("Couldn't reach server: \(url) due to error: \(error).")