summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--ios/CHANGELOG.md1
-rw-r--r--ios/MullvadVPN/Account.swift2
-rw-r--r--ios/MullvadVPN/AppStorePaymentManager.swift2
-rw-r--r--ios/MullvadVPN/AutomaticKeyRotationManager.swift2
-rw-r--r--ios/MullvadVPN/MullvadRpc.swift33
-rw-r--r--ios/MullvadVPN/RelayCache.swift11
-rw-r--r--ios/MullvadVPN/RelaySelector+RelayCache.swift2
-rw-r--r--ios/MullvadVPN/SelectLocationController.swift2
-rw-r--r--ios/MullvadVPN/TunnelManager.swift2
-rw-r--r--ios/MullvadVPN/WireguardKeysViewController.swift2
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 {