diff options
| -rw-r--r-- | ios/MullvadREST/RESTURLSession.swift | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/ios/MullvadREST/RESTURLSession.swift b/ios/MullvadREST/RESTURLSession.swift index f1d3dfe501..87e2d7abbe 100644 --- a/ios/MullvadREST/RESTURLSession.swift +++ b/ios/MullvadREST/RESTURLSession.swift @@ -9,7 +9,27 @@ import Foundation extension REST { - public static func makeURLSession() -> URLSession { + public struct HTTPProxyConfiguration { + public var address: String + public var port: UInt16 + + public init(address: String, port: UInt16) { + self.address = address + self.port = port + } + + fileprivate func apply(to sessionConfiguration: URLSessionConfiguration) { + var configuration = [CFString: Any]() + + configuration[kCFNetworkProxiesHTTPProxy] = address + configuration[kCFNetworkProxiesHTTPPort] = NSNumber(value: port) + configuration[kCFNetworkProxiesProxyAutoConfigEnable] = kCFBooleanFalse + + sessionConfiguration.connectionProxyDictionary = configuration + } + } + + public static func makeURLSession(httpProxyConfiguration: HTTPProxyConfiguration? = nil) -> URLSession { let certificatePath = Bundle(for: SSLPinningURLSessionDelegate.self) .path(forResource: "le_root_cert", ofType: "cer")! let data = FileManager.default.contents(atPath: certificatePath)! @@ -20,8 +40,11 @@ extension REST { trustedRootCertificates: [secCertificate] ) + let sessionConfiguration = URLSessionConfiguration.ephemeral + httpProxyConfiguration?.apply(to: sessionConfiguration) + let session = URLSession( - configuration: .ephemeral, + configuration: sessionConfiguration, delegate: sessionDelegate, delegateQueue: nil ) |
