diff options
| author | Andrej Mihajlov <and@mullvad.net> | 2020-05-08 15:54:29 +0200 |
|---|---|---|
| committer | Andrej Mihajlov <and@mullvad.net> | 2020-05-08 15:59:38 +0200 |
| commit | e39692bee9ef39b4cf1b66792ad7699fd10f1e80 (patch) | |
| tree | 1ab0ee112c54e0a68529a1805450cfceda340920 /ios | |
| parent | 695a2aad01e6ffdea72e9015f6c7107e3aa14fa8 (diff) | |
| download | mullvadvpn-e39692bee9ef39b4cf1b66792ad7699fd10f1e80.tar.xz mullvadvpn-e39692bee9ef39b4cf1b66792ad7699fd10f1e80.zip | |
Rename MullvadAPI -> MullvadRpc and rework MullvadRpc.Error type
Diffstat (limited to 'ios')
| -rw-r--r-- | ios/MullvadVPN.xcodeproj/project.pbxproj | 12 | ||||
| -rw-r--r-- | ios/MullvadVPN/Account.swift | 57 | ||||
| -rw-r--r-- | ios/MullvadVPN/AppStorePaymentManager.swift | 18 | ||||
| -rw-r--r-- | ios/MullvadVPN/MullvadRpc.swift (renamed from ios/MullvadVPN/MullvadAPI.swift) | 80 | ||||
| -rw-r--r-- | ios/MullvadVPN/RelayCache.swift | 18 | ||||
| -rw-r--r-- | ios/MullvadVPN/WireguardKeysViewController.swift | 28 |
6 files changed, 109 insertions, 104 deletions
diff --git a/ios/MullvadVPN.xcodeproj/project.pbxproj b/ios/MullvadVPN.xcodeproj/project.pbxproj index 68b147b6ca..6838aa16d4 100644 --- a/ios/MullvadVPN.xcodeproj/project.pbxproj +++ b/ios/MullvadVPN.xcodeproj/project.pbxproj @@ -77,7 +77,7 @@ 58A8BE8323A0F362006B74AC /* UIAlertController+Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58A8BE8223A0F362006B74AC /* UIAlertController+Error.swift */; }; 58A99ED3240014A0006599E9 /* ConsentViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58A99ED2240014A0006599E9 /* ConsentViewController.swift */; }; 58ADDB3C227B1BD200FAFEA7 /* JsonRpc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58ADDB3B227B1BD200FAFEA7 /* JsonRpc.swift */; }; - 58ADDB3E227B1CD900FAFEA7 /* MullvadAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58ADDB3D227B1CD900FAFEA7 /* MullvadAPI.swift */; }; + 58ADDB3E227B1CD900FAFEA7 /* MullvadRpc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58ADDB3D227B1CD900FAFEA7 /* MullvadRpc.swift */; }; 58AEEF652344A36000C9BBD5 /* KeychainError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58AEEF642344A36000C9BBD5 /* KeychainError.swift */; }; 58AEEF662344A37400C9BBD5 /* KeychainError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58AEEF642344A36000C9BBD5 /* KeychainError.swift */; }; 58AEEF682344A40800C9BBD5 /* TunnelConfigurationCoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58AEEF672344A40800C9BBD5 /* TunnelConfigurationCoder.swift */; }; @@ -96,7 +96,7 @@ 58BA692F23E99F5B009DC256 /* Locking.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58BA692D23E99EFF009DC256 /* Locking.swift */; }; 58BA693123EADA6A009DC256 /* SimulatorTunnelProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58BA693023EADA6A009DC256 /* SimulatorTunnelProvider.swift */; }; 58BA693223EAE1AE009DC256 /* SimulatorTunnelProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58BA693023EADA6A009DC256 /* SimulatorTunnelProvider.swift */; }; - 58BFA5C022A7C8A900A6173D /* MullvadAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58ADDB3D227B1CD900FAFEA7 /* MullvadAPI.swift */; }; + 58BFA5C022A7C8A900A6173D /* MullvadRpc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58ADDB3D227B1CD900FAFEA7 /* MullvadRpc.swift */; }; 58BFA5C222A7C92900A6173D /* JsonRpc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58ADDB3B227B1BD200FAFEA7 /* JsonRpc.swift */; }; 58BFA5C322A7C93400A6173D /* RelayList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5888AD88227B18C40051EB06 /* RelayList.swift */; }; 58BFA5C622A7C97F00A6173D /* RelayCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58BFA5C522A7C97F00A6173D /* RelayCache.swift */; }; @@ -234,7 +234,7 @@ 58A8BE8223A0F362006B74AC /* UIAlertController+Error.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIAlertController+Error.swift"; sourceTree = "<group>"; }; 58A99ED2240014A0006599E9 /* ConsentViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConsentViewController.swift; sourceTree = "<group>"; }; 58ADDB3B227B1BD200FAFEA7 /* JsonRpc.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JsonRpc.swift; sourceTree = "<group>"; }; - 58ADDB3D227B1CD900FAFEA7 /* MullvadAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MullvadAPI.swift; sourceTree = "<group>"; }; + 58ADDB3D227B1CD900FAFEA7 /* MullvadRpc.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MullvadRpc.swift; sourceTree = "<group>"; }; 58AEEF642344A36000C9BBD5 /* KeychainError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeychainError.swift; sourceTree = "<group>"; }; 58AEEF672344A40800C9BBD5 /* TunnelConfigurationCoder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TunnelConfigurationCoder.swift; sourceTree = "<group>"; }; 58AEEF6A2344A46200C9BBD5 /* TunnelConfigurationManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TunnelConfigurationManager.swift; sourceTree = "<group>"; }; @@ -407,8 +407,8 @@ 587B08DF229433EB000E6F17 /* LoginState.swift */, 58CE5E65224146200008646E /* LoginViewController.swift */, 58CE5E67224146200008646E /* Main.storyboard */, - 58ADDB3D227B1CD900FAFEA7 /* MullvadAPI.swift */, 5840250322B11AB700E4CFEC /* MullvadEndpoint.swift */, + 58ADDB3D227B1CD900FAFEA7 /* MullvadRpc.swift */, 58FBDAAA22A52DC500EB69A3 /* MullvadVPN-Bridging-Header.h */, 5866F39B2243B82D00168AE5 /* MullvadVPN.entitlements */, 588AE72E2362001F009F9F2E /* MutuallyExclusive.swift */, @@ -783,7 +783,7 @@ 5845F842236CBACD00B2D93C /* PacketTunnelIpc.swift in Sources */, 58781CC922AE7CA8009B9D8E /* RelayConstraints.swift in Sources */, 584E96BC240FD4DA00D3334F /* Location.swift in Sources */, - 58ADDB3E227B1CD900FAFEA7 /* MullvadAPI.swift in Sources */, + 58ADDB3E227B1CD900FAFEA7 /* MullvadRpc.swift in Sources */, 58B8743222B25A7600015324 /* WireguardAssociatedAddresses.swift in Sources */, 587B08E0229433EB000E6F17 /* LoginState.swift in Sources */, 58C6B34F22BB7AC0003C19AD /* IPAddressRange.swift in Sources */, @@ -855,7 +855,7 @@ 5840250522B11AB700E4CFEC /* MullvadEndpoint.swift in Sources */, 582650872384117900FA7A86 /* ReplaceNilWithError.swift in Sources */, 58BFA5C722A7C97F00A6173D /* RelayCache.swift in Sources */, - 58BFA5C022A7C8A900A6173D /* MullvadAPI.swift in Sources */, + 58BFA5C022A7C8A900A6173D /* MullvadRpc.swift in Sources */, 58906DE02445C7A5002F0673 /* NEProviderStopReason+Debug.swift in Sources */, 58AEEF692344A43A00C9BBD5 /* TunnelConfigurationCoder.swift in Sources */, 584E96BD240FD4DA00D3334F /* Location.swift in Sources */, diff --git a/ios/MullvadVPN/Account.swift b/ios/MullvadVPN/Account.swift index 6677005615..989cd8a53f 100644 --- a/ios/MullvadVPN/Account.swift +++ b/ios/MullvadVPN/Account.swift @@ -26,14 +26,12 @@ enum AccountError: Error { /// A enum describing the error emitted during login enum AccountLoginError: Error { - case network(MullvadAPI.Error) - case communication(MullvadAPI.ResponseError) + case rpc(MullvadRpc.Error) case tunnelConfiguration(TunnelManagerError) } enum CreateAccountError: Error { - case network(MullvadAPI.Error) - case communication(MullvadAPI.ResponseError) + case rpc(MullvadRpc.Error) case tunnelConfiguration(TunnelManagerError) } @@ -53,22 +51,22 @@ extension AccountError: LocalizedError { var failureReason: String? { switch self { - case .createNew(.network), .createNew(.communication): + case .createNew(.rpc): return NSLocalizedString("Failed to create new account", comment: "") - case .login(.communication(let serverError)) where serverError.code == .accountDoesNotExist: + case .login(.rpc(.server(let serverError))) where serverError.code == .accountDoesNotExist: return NSLocalizedString("Invalid account", comment: "") - case .login(.network): + case .login(.rpc(.network)): return NSLocalizedString("Network error", comment: "") - case .login(.communication): + case .login(.rpc(.server)): return NSLocalizedString("Server error", comment: "") case .login(.tunnelConfiguration(.setAccount(let setAccountError))), .createNew(.tunnelConfiguration(.setAccount(let setAccountError))): switch setAccountError { - case .pushWireguardKey(.transport(.network)): + case .pushWireguardKey(.network): return NSLocalizedString("Network error", comment: "") case .pushWireguardKey(.server(let serverError)): @@ -108,7 +106,7 @@ class Account { static let newAccountExpiryUserInfoKey = "newAccountExpiry" static let shared = Account() - private let apiClient = MullvadAPI() + private let rpc = MullvadRpc() /// Returns true if user agreed to terms of service, otherwise false var isAgreedToTermsOfService: Bool { @@ -139,17 +137,12 @@ class Account { } func loginWithNewAccount() -> AnyPublisher<String, AccountError> { - return apiClient.createAccount() - .mapError { CreateAccountError.network($0) } - .flatMap { (response) -> AnyPublisher<(String, Date), CreateAccountError> in - response.result - .mapError { CreateAccountError.communication($0) } - .publisher - .flatMap { (accountToken) in - TunnelManager.shared.setAccount(accountToken: accountToken) - .mapError { CreateAccountError.tunnelConfiguration($0) } - .map { (accountToken, Date()) } - }.eraseToAnyPublisher() + return rpc.createAccount() + .mapError { CreateAccountError.rpc($0) } + .flatMap { (newAccountToken) in + TunnelManager.shared.setAccount(accountToken: newAccountToken) + .mapError { CreateAccountError.tunnelConfiguration($0) } + .map { (newAccountToken, Date()) } }.mapError { AccountError.createNew($0) } .receive(on: DispatchQueue.main) .map { (accountToken, expiry) -> String in @@ -162,18 +155,16 @@ class Account { /// Perform the login and save the account token along with expiry (if available) to the /// application preferences. func login(with accountToken: String) -> AnyPublisher<(), AccountError> { - return apiClient.getAccountExpiry(accountToken: accountToken) - .mapError { AccountLoginError.network($0) } - .flatMap { (response) in - response.result - .mapError { AccountLoginError.communication($0) } - .publisher - }.flatMap { (expiry) in - TunnelManager.shared.setAccount(accountToken: accountToken) - .mapError { AccountLoginError.tunnelConfiguration($0) } - .map { expiry } - }.mapError { AccountError.login($0) }.receive(on: DispatchQueue.main).map { (expiry) in - self.saveAccountToPreferences(accountToken: accountToken, expiry: expiry) + return rpc.getAccountExpiry(accountToken: accountToken) + .mapError { AccountLoginError.rpc($0) } + .flatMap { (expiry) in + TunnelManager.shared.setAccount(accountToken: accountToken) + .mapError { AccountLoginError.tunnelConfiguration($0) } + .map { expiry } + }.mapError { AccountError.login($0) } + .receive(on: DispatchQueue.main) + .map { (expiry) in + self.saveAccountToPreferences(accountToken: accountToken, expiry: expiry) }.eraseToAnyPublisher() } diff --git a/ios/MullvadVPN/AppStorePaymentManager.swift b/ios/MullvadVPN/AppStorePaymentManager.swift index 04a4928fe4..ff76c379da 100644 --- a/ios/MullvadVPN/AppStorePaymentManager.swift +++ b/ios/MullvadVPN/AppStorePaymentManager.swift @@ -85,8 +85,7 @@ class AppStorePaymentManager { enum SendAppStoreReceiptError: Swift.Error { case read(AppStoreReceipt.Error) - case network(MullvadAPI.Error) - case server(MullvadAPI.ResponseError) + case rpc(MullvadRpc.Error) } enum Error: Swift.Error { @@ -99,7 +98,7 @@ class AppStorePaymentManager { static let shared = AppStorePaymentManager(queue: SKPaymentQueue.default()) private let queue: SKPaymentQueue - private let apiClient = MullvadAPI() + private let rpc = MullvadRpc() private var paymentQueueSubscriber: AnyCancellable? private var sendReceiptSubscriber: AnyCancellable? @@ -223,11 +222,10 @@ class AppStorePaymentManager { return AppStoreReceipt.fetch(forceRefresh: forceRefresh) .mapError { SendAppStoreReceiptError.read($0) } .flatMap { (receiptData) in - self.apiClient.sendAppStoreReceipt(accountToken: accountToken, receiptData: receiptData) - .mapError { SendAppStoreReceiptError.network($0) } - .flatMap({ (response) in - response.result.mapError { SendAppStoreReceiptError.server($0) }.publisher - }) + self.rpc.sendAppStoreReceipt( + accountToken: accountToken, + receiptData: receiptData + ).mapError { SendAppStoreReceiptError.rpc($0) } } .receive(on: DispatchQueue.main) .handleEvents(receiveOutput: { (response) in @@ -345,9 +343,9 @@ extension AppStorePaymentManager.Error: LocalizedError { switch self { case .storePayment(let storeError): return storeError.localizedDescription - case .sendReceipt(.network(let urlError)): + case .sendReceipt(.rpc(.network(let urlError))): return urlError.localizedDescription - case .sendReceipt(.server(let serverError)): + case .sendReceipt(.rpc(.server(let serverError))): return serverError.errorDescription case .sendReceipt(.read(.refresh(let storeError))): return storeError.localizedDescription diff --git a/ios/MullvadVPN/MullvadAPI.swift b/ios/MullvadVPN/MullvadRpc.swift index 95a01a27a7..3db2c25bf6 100644 --- a/ios/MullvadVPN/MullvadAPI.swift +++ b/ios/MullvadVPN/MullvadRpc.swift @@ -1,5 +1,5 @@ // -// MullvadAPI.swift +// MullvadRpc.swift // MullvadVPN // // Created by pronebird on 02/05/2019. @@ -32,7 +32,7 @@ struct SendAppStoreReceiptResponse: Codable { } } -class MullvadAPI { +class MullvadRpc { private let session: URLSession /// A enum mapping the integer codes returned by Mullvad API with the corresponding enum @@ -73,101 +73,123 @@ class MullvadAPI { case other(Int) } - /// An error type emitted by `MullvadAPI` + /// An error type emitted by `MullvadRpc` enum Error: Swift.Error { /// A network communication error case network(URLError) + /// A server error + case server(JsonRpcResponseError<ResponseCode>) + /// An error occured when decoding the JSON response case decoding(Swift.Error) /// An error occured when encoding the JSON request case encoding(Swift.Error) - } - typealias ResponseError = JsonRpcResponseError<ResponseCode> - typealias Response<T: Decodable> = JsonRpcResponse<T, ResponseCode> + var localizedDescription: String { + switch self { + case .network(let urlError): + return "Network error: \(urlError.localizedDescription)" + + case .server(let serverError): + return "Server error: \(serverError.localizedDescription)" + + case .encoding(let encodingError): + return "Encoding error: \(encodingError.localizedDescription)" + + case .decoding(let decodingError): + return "Decoding error: \(decodingError.localizedDescription)" + } + } + } init(session: URLSession = URLSession.shared) { self.session = session } - func createAccount() -> AnyPublisher<Response<String>, MullvadAPI.Error> { + func createAccount() -> AnyPublisher<String, MullvadRpc.Error> { let request = JsonRpcRequest(method: "create_account", params: []) - return MullvadAPI.makeDataTaskPublisher(request: request) + return MullvadRpc.makeDataTaskPublisher(request: request) } - func getRelayList() -> AnyPublisher<Response<RelayList>, MullvadAPI.Error> { + func getRelayList() -> AnyPublisher<RelayList, MullvadRpc.Error> { let request = JsonRpcRequest(method: "relay_list_v3", params: []) - return MullvadAPI.makeDataTaskPublisher(request: request) + return MullvadRpc.makeDataTaskPublisher(request: request) } - func getAccountExpiry(accountToken: String) -> AnyPublisher<Response<Date>, MullvadAPI.Error> { + func getAccountExpiry(accountToken: String) -> AnyPublisher<Date, MullvadRpc.Error> { let request = JsonRpcRequest(method: "get_expiry", params: [AnyEncodable(accountToken)]) - return MullvadAPI.makeDataTaskPublisher(request: request) + return MullvadRpc.makeDataTaskPublisher(request: request) } - func pushWireguardKey(accountToken: String, publicKey: Data) -> AnyPublisher<Response<WireguardAssociatedAddresses>, MullvadAPI.Error> { + func pushWireguardKey(accountToken: String, publicKey: Data) -> AnyPublisher<WireguardAssociatedAddresses, MullvadRpc.Error> { let request = JsonRpcRequest(method: "push_wg_key", params: [ AnyEncodable(accountToken), AnyEncodable(publicKey) ]) - return MullvadAPI.makeDataTaskPublisher(request: request) + return MullvadRpc.makeDataTaskPublisher(request: request) } - func replaceWireguardKey(accountToken: String, oldPublicKey: Data, newPublicKey: Data) -> AnyPublisher<Response<WireguardAssociatedAddresses>, MullvadAPI.Error> { + func replaceWireguardKey(accountToken: String, oldPublicKey: Data, newPublicKey: Data) -> AnyPublisher<WireguardAssociatedAddresses, MullvadRpc.Error> { let request = JsonRpcRequest(method: "replace_wg_key", params: [ AnyEncodable(accountToken), AnyEncodable(oldPublicKey), AnyEncodable(newPublicKey) ]) - return MullvadAPI.makeDataTaskPublisher(request: request) + return MullvadRpc.makeDataTaskPublisher(request: request) } - func checkWireguardKey(accountToken: String, publicKey: Data) -> AnyPublisher<Response<Bool>, MullvadAPI.Error> { + func checkWireguardKey(accountToken: String, publicKey: Data) -> AnyPublisher<Bool, MullvadRpc.Error> { let request = JsonRpcRequest(method: "check_wg_key", params: [ AnyEncodable(accountToken), AnyEncodable(publicKey) ]) - return MullvadAPI.makeDataTaskPublisher(request: request) + return MullvadRpc.makeDataTaskPublisher(request: request) } - func removeWireguardKey(accountToken: String, publicKey: Data) -> AnyPublisher<Response<Bool>, MullvadAPI.Error> { + func removeWireguardKey(accountToken: String, publicKey: Data) -> AnyPublisher<Bool, MullvadRpc.Error> { let request = JsonRpcRequest(method: "remove_wg_key", params: [ AnyEncodable(accountToken), AnyEncodable(publicKey) ]) - return MullvadAPI.makeDataTaskPublisher(request: request) + return MullvadRpc.makeDataTaskPublisher(request: request) } - func sendAppStoreReceipt(accountToken: String, receiptData: Data) -> AnyPublisher<Response<SendAppStoreReceiptResponse>, MullvadAPI.Error> { + func sendAppStoreReceipt(accountToken: String, receiptData: Data) -> AnyPublisher<SendAppStoreReceiptResponse, MullvadRpc.Error> { let request = JsonRpcRequest(method: "apple_payment", params: [ AnyEncodable(accountToken), AnyEncodable(receiptData) ]) - return MullvadAPI.makeDataTaskPublisher(request: request) + return MullvadRpc.makeDataTaskPublisher(request: request) } - private static func makeDataTaskPublisher<T: Decodable>(request: JsonRpcRequest) -> AnyPublisher<Response<T>, MullvadAPI.Error> { + private static func makeDataTaskPublisher<T: Decodable>(request: JsonRpcRequest) -> AnyPublisher<T, MullvadRpc.Error> { return Just(request) .encode(encoder: makeJSONEncoder()) - .mapError { MullvadAPI.Error.encoding($0) } + .mapError { MullvadRpc.Error.encoding($0) } .map { self.makeURLRequest(httpBody: $0) } .flatMap { URLSession.shared.dataTaskPublisher(for: $0) - .mapError { MullvadAPI.Error.network($0) } - .flatMap { (data, response) in + .mapError { MullvadRpc.Error.network($0) } + .flatMap { (data, httpResponse) in Just(data) - .decode(type: Response<T>.self, decoder: makeJSONDecoder()) - .mapError { MullvadAPI.Error.decoding($0) } + .decode(type: JsonRpcResponse<T, ResponseCode>.self, decoder: makeJSONDecoder()) + .mapError { MullvadRpc.Error.decoding($0) } + .flatMap { (serverResponse) in + // unwrap JsonRpcResponse.result + serverResponse.result + .mapError { MullvadRpc.Error.server($0) } + .publisher + } } }.eraseToAnyPublisher() } @@ -201,7 +223,7 @@ class MullvadAPI { extension JsonRpcResponseError: LocalizedError where - ResponseCode == MullvadAPI.ResponseCode + ResponseCode == MullvadRpc.ResponseCode { var errorDescription: String? { switch code { diff --git a/ios/MullvadVPN/RelayCache.swift b/ios/MullvadVPN/RelayCache.swift index 5bb4082fbb..8512f2160b 100644 --- a/ios/MullvadVPN/RelayCache.swift +++ b/ios/MullvadVPN/RelayCache.swift @@ -15,8 +15,7 @@ enum RelayCacheError: Error { case defaultLocationNotFound case io(Error) case coding(Error) - case network(MullvadAPI.Error) - case server(JsonRpcResponseError<MullvadAPI.ResponseCode>) + case rpc(MullvadRpc.Error) } /// A enum describing the source of the relay list @@ -31,7 +30,7 @@ enum RelayListSource { class RelayCache { /// Mullvad API client - private let apiClient: MullvadAPI + private let rpc: MullvadRpc /// The cache location used by the class instance private let cacheFileURL: URL @@ -51,7 +50,7 @@ class RelayCache { } init(cacheFileURL: URL, networkSession: URLSession = URLSession.shared) { - apiClient = MullvadAPI(session: networkSession) + rpc = MullvadRpc(session: networkSession) self.cacheFileURL = cacheFileURL } @@ -153,14 +152,9 @@ class RelayCache { } private func downloadRelays() -> AnyPublisher<RelayList, RelayCacheError> { - apiClient.getRelayList() - .mapError({ (networkError) -> RelayCacheError in - return .network(networkError) - }) - .flatMap({ (response) in - return response.result.publisher - .mapError { RelayCacheError.server($0) } - }).eraseToAnyPublisher() + rpc.getRelayList() + .mapError { .rpc($0) } + .eraseToAnyPublisher() } private func saveRelayListToCache(relayList: RelayList) -> AnyPublisher<CachedRelayList, RelayCacheError> { diff --git a/ios/MullvadVPN/WireguardKeysViewController.swift b/ios/MullvadVPN/WireguardKeysViewController.swift index 3ce6ac3e5f..1a50dc9c7e 100644 --- a/ios/MullvadVPN/WireguardKeysViewController.swift +++ b/ios/MullvadVPN/WireguardKeysViewController.swift @@ -24,9 +24,12 @@ private enum WireguardKeysViewState { case regeneratingKey } -enum VerifyWireguardPublicKeyError { - case network(MullvadAPI.Error) - case server(MullvadAPI.ResponseError) +private struct VerifyWireguardPublicKeyError: Error { + var underlyingError: MullvadRpc.Error + + init(_ error: MullvadRpc.Error) { + self.underlyingError = error + } } extension VerifyWireguardPublicKeyError: LocalizedError { @@ -35,12 +38,14 @@ extension VerifyWireguardPublicKeyError: LocalizedError { } var failureReason: String? { - switch self { - case .network(.network(let urlError)): + switch underlyingError { + case .network(let urlError): return urlError.localizedDescription + case .server(let serverError): return serverError.errorDescription - default: + + case .decoding, .encoding: return NSLocalizedString("Internal error", comment: "") } } @@ -60,7 +65,7 @@ class WireguardKeysViewController: UIViewController { private var creationDateTimerSubscriber: AnyCancellable? private var copyToPasteboardSubscriber: AnyCancellable? - private let apiClient = MullvadAPI() + private let rpc = MullvadRpc() private var publicKey: WireguardPublicKey? private var state: WireguardKeysViewState = .default { @@ -207,18 +212,13 @@ class WireguardKeysViewController: UIViewController { } private func verifyKey(accountToken: String, publicKey: WireguardPublicKey) { - verifyKeySubscriber = apiClient.checkWireguardKey( + verifyKeySubscriber = rpc.checkWireguardKey( accountToken: accountToken, publicKey: publicKey.rawRepresentation ) .retry(1) .receive(on: DispatchQueue.main) - .mapError { VerifyWireguardPublicKeyError.network($0) } - .flatMap({ (response) in - response.result - .mapError { VerifyWireguardPublicKeyError.server($0) } - .publisher - }) + .mapError { VerifyWireguardPublicKeyError($0) } .handleEvents(receiveSubscription: { _ in self.updateViewState(.verifyingKey) }) |
