diff options
| author | Andrej Mihajlov <and@mullvad.net> | 2020-06-02 16:24:23 +0200 |
|---|---|---|
| committer | Andrej Mihajlov <and@mullvad.net> | 2020-06-02 16:32:27 +0200 |
| commit | 409529b45847aa6324ed41474e503be4ddbb88b1 (patch) | |
| tree | b13e60242b5927bde801ea84ef2628eadfac9dfa | |
| parent | c934fc9282276f371dce8abc7f72c52b1dc4f0d5 (diff) | |
| download | mullvadvpn-409529b45847aa6324ed41474e503be4ddbb88b1.tar.xz mullvadvpn-409529b45847aa6324ed41474e503be4ddbb88b1.zip | |
Switch to using ephemeral URLSession configuration
| -rw-r--r-- | ios/CHANGELOG.md | 1 | ||||
| -rw-r--r-- | ios/MullvadVPN/Account.swift | 2 | ||||
| -rw-r--r-- | ios/MullvadVPN/AppStorePaymentManager.swift | 2 | ||||
| -rw-r--r-- | ios/MullvadVPN/AutomaticKeyRotationManager.swift | 2 | ||||
| -rw-r--r-- | ios/MullvadVPN/MullvadRpc.swift | 33 | ||||
| -rw-r--r-- | ios/MullvadVPN/RelayCache.swift | 11 | ||||
| -rw-r--r-- | ios/MullvadVPN/RelaySelector+RelayCache.swift | 2 | ||||
| -rw-r--r-- | ios/MullvadVPN/SelectLocationController.swift | 2 | ||||
| -rw-r--r-- | ios/MullvadVPN/TunnelManager.swift | 2 | ||||
| -rw-r--r-- | ios/MullvadVPN/WireguardKeysViewController.swift | 2 |
10 files changed, 35 insertions, 24 deletions
diff --git a/ios/CHANGELOG.md b/ios/CHANGELOG.md index 8efe829a48..c5e4581620 100644 --- a/ios/CHANGELOG.md +++ b/ios/CHANGELOG.md @@ -35,6 +35,7 @@ Line wrap the file at 100 chars. Th and 90 days to always be displayed in days quantity. - Fix a number of errors in DNS64 resolution and IPv6 support. - Update the tunnel state when the app returns from suspended state. +- Disable `URLSession` cache. ## [2020.2] - 2020-04-16 ### Fixed diff --git a/ios/MullvadVPN/Account.swift b/ios/MullvadVPN/Account.swift index 989cd8a53f..ade6405da6 100644 --- a/ios/MullvadVPN/Account.swift +++ b/ios/MullvadVPN/Account.swift @@ -106,7 +106,7 @@ class Account { static let newAccountExpiryUserInfoKey = "newAccountExpiry" static let shared = Account() - private let rpc = MullvadRpc() + private let rpc = MullvadRpc.withEphemeralURLSession() /// Returns true if user agreed to terms of service, otherwise false var isAgreedToTermsOfService: Bool { diff --git a/ios/MullvadVPN/AppStorePaymentManager.swift b/ios/MullvadVPN/AppStorePaymentManager.swift index ff76c379da..fb1c2f51cb 100644 --- a/ios/MullvadVPN/AppStorePaymentManager.swift +++ b/ios/MullvadVPN/AppStorePaymentManager.swift @@ -98,7 +98,7 @@ class AppStorePaymentManager { static let shared = AppStorePaymentManager(queue: SKPaymentQueue.default()) private let queue: SKPaymentQueue - private let rpc = MullvadRpc() + private let rpc = MullvadRpc.withEphemeralURLSession() private var paymentQueueSubscriber: AnyCancellable? private var sendReceiptSubscriber: AnyCancellable? diff --git a/ios/MullvadVPN/AutomaticKeyRotationManager.swift b/ios/MullvadVPN/AutomaticKeyRotationManager.swift index 2756417eb5..abc28d9eb0 100644 --- a/ios/MullvadVPN/AutomaticKeyRotationManager.swift +++ b/ios/MullvadVPN/AutomaticKeyRotationManager.swift @@ -46,7 +46,7 @@ class AutomaticKeyRotationManager { var publicKey: WireguardPublicKey } - private let rpc = MullvadRpc() + private let rpc = MullvadRpc.withEphemeralURLSession() private let persistentKeychainReference: Data private var rotateKeySubscriber: AnyCancellable? diff --git a/ios/MullvadVPN/MullvadRpc.swift b/ios/MullvadVPN/MullvadRpc.swift index 8f07c6d8cb..95f1d36683 100644 --- a/ios/MullvadVPN/MullvadRpc.swift +++ b/ios/MullvadVPN/MullvadRpc.swift @@ -103,26 +103,31 @@ class MullvadRpc { } } - init(session: URLSession = URLSession.shared) { + /// Returns an instance of `MullvadRpc` configured with ephemeral `URLSession` configuration + class func withEphemeralURLSession() -> MullvadRpc { + return MullvadRpc(session: URLSession(configuration: .ephemeral)) + } + + init(session: URLSession) { self.session = session } func createAccount() -> AnyPublisher<String, MullvadRpc.Error> { let request = JsonRpcRequest(method: "create_account", params: []) - return MullvadRpc.makeDataTaskPublisher(request: request) + return makeDataTaskPublisher(request: request) } func getRelayList() -> AnyPublisher<RelayList, MullvadRpc.Error> { let request = JsonRpcRequest(method: "relay_list_v3", params: []) - return MullvadRpc.makeDataTaskPublisher(request: request) + return makeDataTaskPublisher(request: request) } func getAccountExpiry(accountToken: String) -> AnyPublisher<Date, MullvadRpc.Error> { let request = JsonRpcRequest(method: "get_expiry", params: [AnyEncodable(accountToken)]) - return MullvadRpc.makeDataTaskPublisher(request: request) + return makeDataTaskPublisher(request: request) } func pushWireguardKey(accountToken: String, publicKey: Data) -> AnyPublisher<WireguardAssociatedAddresses, MullvadRpc.Error> { @@ -131,7 +136,7 @@ class MullvadRpc { AnyEncodable(publicKey) ]) - return MullvadRpc.makeDataTaskPublisher(request: request) + return makeDataTaskPublisher(request: request) } func replaceWireguardKey(accountToken: String, oldPublicKey: Data, newPublicKey: Data) -> AnyPublisher<WireguardAssociatedAddresses, MullvadRpc.Error> { @@ -141,7 +146,7 @@ class MullvadRpc { AnyEncodable(newPublicKey) ]) - return MullvadRpc.makeDataTaskPublisher(request: request) + return makeDataTaskPublisher(request: request) } func checkWireguardKey(accountToken: String, publicKey: Data) -> AnyPublisher<Bool, MullvadRpc.Error> { @@ -150,7 +155,7 @@ class MullvadRpc { AnyEncodable(publicKey) ]) - return MullvadRpc.makeDataTaskPublisher(request: request) + return makeDataTaskPublisher(request: request) } func removeWireguardKey(accountToken: String, publicKey: Data) -> AnyPublisher<Bool, MullvadRpc.Error> { @@ -159,7 +164,7 @@ class MullvadRpc { AnyEncodable(publicKey) ]) - return MullvadRpc.makeDataTaskPublisher(request: request) + return makeDataTaskPublisher(request: request) } func sendAppStoreReceipt(accountToken: String, receiptData: Data) -> AnyPublisher<SendAppStoreReceiptResponse, MullvadRpc.Error> { @@ -168,20 +173,20 @@ class MullvadRpc { AnyEncodable(receiptData) ]) - return MullvadRpc.makeDataTaskPublisher(request: request) + return makeDataTaskPublisher(request: request) } - private static func makeDataTaskPublisher<T: Decodable>(request: JsonRpcRequest) -> AnyPublisher<T, MullvadRpc.Error> { + private func makeDataTaskPublisher<T: Decodable>(request: JsonRpcRequest) -> AnyPublisher<T, MullvadRpc.Error> { return Just(request) - .encode(encoder: makeJSONEncoder()) + .encode(encoder: Self.makeJSONEncoder()) .mapError { MullvadRpc.Error.encoding($0) } - .map { self.makeURLRequest(httpBody: $0) } + .map { Self.makeURLRequest(httpBody: $0) } .flatMap { - URLSession.shared.dataTaskPublisher(for: $0) + self.session.dataTaskPublisher(for: $0) .mapError { MullvadRpc.Error.network($0) } .flatMap { (data, httpResponse) in Just(data) - .decode(type: JsonRpcResponse<T, ResponseCode>.self, decoder: makeJSONDecoder()) + .decode(type: JsonRpcResponse<T, ResponseCode>.self, decoder: Self.makeJSONDecoder()) .mapError { MullvadRpc.Error.decoding($0) } .flatMap { (serverResponse) in // unwrap JsonRpcResponse.result diff --git a/ios/MullvadVPN/RelayCache.swift b/ios/MullvadVPN/RelayCache.swift index deacee21e7..c1e3e79110 100644 --- a/ios/MullvadVPN/RelayCache.swift +++ b/ios/MullvadVPN/RelayCache.swift @@ -49,19 +49,24 @@ class RelayCache { return containerURL.flatMap { URL(fileURLWithPath: "relays.json", relativeTo: $0) } } - init(cacheFileURL: URL, networkSession: URLSession = URLSession.shared) { + init(cacheFileURL: URL, networkSession: URLSession) { rpc = MullvadRpc(session: networkSession) self.cacheFileURL = cacheFileURL } - class func withDefaultLocation() -> Result<RelayCache, RelayCacheError> { + class func withDefaultLocation(networkSession: URLSession) -> Result<RelayCache, RelayCacheError> { if let cacheFileURL = defaultCacheFileURL { - return .success(RelayCache(cacheFileURL: cacheFileURL)) + return .success(RelayCache(cacheFileURL: cacheFileURL, networkSession: networkSession)) } else { return .failure(.defaultLocationNotFound) } } + + class func withDefaultLocationAndEphemeralSession() -> Result<RelayCache, RelayCacheError> { + return withDefaultLocation(networkSession: URLSession(configuration: .ephemeral)) + } + /// Read the relay cache and update it from remote if needed. func read() -> AnyPublisher<CachedRelayList, RelayCacheError> { MutuallyExclusive(exclusivityQueue: exclusivityQueue, executionQueue: executionQueue) { diff --git a/ios/MullvadVPN/RelaySelector+RelayCache.swift b/ios/MullvadVPN/RelaySelector+RelayCache.swift index 09da3f8ecf..3fd30180a5 100644 --- a/ios/MullvadVPN/RelaySelector+RelayCache.swift +++ b/ios/MullvadVPN/RelaySelector+RelayCache.swift @@ -12,7 +12,7 @@ import Foundation extension RelaySelector { static func loadedFromRelayCache() -> AnyPublisher<RelaySelector, RelayCacheError> { - return RelayCache.withDefaultLocation().publisher + return RelayCache.withDefaultLocationAndEphemeralSession().publisher .flatMap { $0.read() } .map { RelaySelector(relayList: $0.relayList) } .eraseToAnyPublisher() diff --git a/ios/MullvadVPN/SelectLocationController.swift b/ios/MullvadVPN/SelectLocationController.swift index 20bad64386..3fb22600a1 100644 --- a/ios/MullvadVPN/SelectLocationController.swift +++ b/ios/MullvadVPN/SelectLocationController.swift @@ -19,7 +19,7 @@ enum SelectLocationControllerError: Error { class SelectLocationController: UITableViewController { - private let relayCache = try! RelayCache.withDefaultLocation().get() + private let relayCache = try! RelayCache.withDefaultLocationAndEphemeralSession().get() private var relayList: RelayList? private var relayConstraints: RelayConstraints? private var expandedItems = [RelayLocation]() diff --git a/ios/MullvadVPN/TunnelManager.swift b/ios/MullvadVPN/TunnelManager.swift index 8103edf373..4c116d8df1 100644 --- a/ios/MullvadVPN/TunnelManager.swift +++ b/ios/MullvadVPN/TunnelManager.swift @@ -290,7 +290,7 @@ class TunnelManager { /// A queue used for access synchronization to the TunnelManager members private let executionQueue = DispatchQueue(label: "net.mullvad.vpn.tunnel-manager.execution-queue") - private let rpc = MullvadRpc() + private let rpc = MullvadRpc.withEphemeralURLSession() private var tunnelProvider: TunnelProviderManagerType? private var tunnelIpc: PacketTunnelIpc? diff --git a/ios/MullvadVPN/WireguardKeysViewController.swift b/ios/MullvadVPN/WireguardKeysViewController.swift index c677c75eee..e29035b5c5 100644 --- a/ios/MullvadVPN/WireguardKeysViewController.swift +++ b/ios/MullvadVPN/WireguardKeysViewController.swift @@ -66,7 +66,7 @@ class WireguardKeysViewController: UIViewController { private var creationDateTimerSubscriber: AnyCancellable? private var copyToPasteboardSubscriber: AnyCancellable? - private let rpc = MullvadRpc() + private let rpc = MullvadRpc.withEphemeralURLSession() private var state: WireguardKeysViewState = .default { didSet { |
