summaryrefslogtreecommitdiffhomepage
path: root/ios
diff options
context:
space:
mode:
authorAndrej Mihajlov <and@mullvad.net>2023-04-19 13:37:52 +0200
committerAndrej Mihajlov <and@mullvad.net>2023-04-20 14:15:27 +0200
commitfe8b0f89b4d60bc2396768cb0e8eb711639b2dfa (patch)
treea586ec2ecd496d4cfe12a2e53f6c8dbec1200a8c /ios
parent1e8239d684ed688fcbe6ca5bdbd2e5db319a1c9f (diff)
downloadmullvadvpn-fe8b0f89b4d60bc2396768cb0e8eb711639b2dfa.tar.xz
mullvadvpn-fe8b0f89b4d60bc2396768cb0e8eb711639b2dfa.zip
REST: add HTTP proxy configuration
Diffstat (limited to 'ios')
-rw-r--r--ios/MullvadREST/RESTURLSession.swift27
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
)