Skip to content

Commit 6d4e6c7

Browse files
committed
Move Mullvad API functions to new file
1 parent ec10b0e commit 6d4e6c7

File tree

12 files changed

+338
-225
lines changed

12 files changed

+338
-225
lines changed

ios/MullvadMockData/MullvadREST/APIProxy+Stubs.swift

-15
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,6 @@ import MullvadTypes
1212
import WireGuardKitTypes
1313

1414
struct APIProxyStub: APIQuerying {
15-
func mullvadApiGetAddressList(
16-
retryStrategy: REST.RetryStrategy,
17-
completionHandler: @escaping ProxyCompletionHandler<[AnyIPEndpoint]>
18-
) -> Cancellable {
19-
AnyCancellable()
20-
}
21-
22-
func mullvadApiGetRelayList(
23-
retryStrategy: REST.RetryStrategy,
24-
etag: String?,
25-
completionHandler: @escaping ProxyCompletionHandler<REST.ServerRelaysCacheResponse>)
26-
-> Cancellable {
27-
AnyCancellable()
28-
}
29-
3015
func getAddressList(
3116
retryStrategy: REST.RetryStrategy,
3217
completionHandler: @escaping ProxyCompletionHandler<[AnyIPEndpoint]>

ios/MullvadREST/ApiHandlers/RESTAPIProxy.swift

-130
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,6 @@ import Operations
1313
import WireGuardKitTypes
1414

1515
public protocol APIQuerying: Sendable {
16-
func mullvadApiGetAddressList(
17-
retryStrategy: REST.RetryStrategy,
18-
completionHandler: @escaping @Sendable ProxyCompletionHandler<[AnyIPEndpoint]>
19-
) -> Cancellable
20-
21-
func mullvadApiGetRelayList(
22-
retryStrategy: REST.RetryStrategy,
23-
etag: String?,
24-
completionHandler: @escaping @Sendable ProxyCompletionHandler<REST.ServerRelaysCacheResponse>
25-
) -> Cancellable
26-
2716
func getAddressList(
2817
retryStrategy: REST.RetryStrategy,
2918
completionHandler: @escaping @Sendable ProxyCompletionHandler<[AnyIPEndpoint]>
@@ -68,76 +57,6 @@ extension REST {
6857
)
6958
}
7059

71-
public func mullvadApiGetAddressList(
72-
retryStrategy: REST.RetryStrategy,
73-
completionHandler: @escaping @Sendable ProxyCompletionHandler<[AnyIPEndpoint]>
74-
) -> Cancellable {
75-
let responseHandler = rustResponseHandler(
76-
decoding: [AnyIPEndpoint].self,
77-
with: responseDecoder
78-
)
79-
80-
return createNetworkOperation(
81-
request: .getAddressList(retryStrategy),
82-
responseHandler: responseHandler,
83-
completionHandler: completionHandler
84-
)
85-
}
86-
87-
public func mullvadApiGetRelayList(
88-
retryStrategy: REST.RetryStrategy,
89-
etag: String?,
90-
completionHandler: @escaping @Sendable ProxyCompletionHandler<REST.ServerRelaysCacheResponse>
91-
) -> Cancellable {
92-
if var etag {
93-
// Enforce weak validator to account for some backend caching quirks.
94-
if etag.starts(with: "\"") {
95-
etag.insert(contentsOf: "W/", at: etag.startIndex)
96-
}
97-
}
98-
99-
let responseHandler = rustCustomResponseHandler { [weak self] (data, responseEtag) in
100-
// Discarding result since we're only interested in knowing that it's parseable.
101-
let canDecodeResponse = (try? self?.responseDecoder.decode(REST.ServerRelaysResponse.self, from: data)) != nil
102-
103-
return if canDecodeResponse {
104-
if let responseEtag, responseEtag == etag {
105-
REST.ServerRelaysCacheResponse.notModified
106-
} else {
107-
REST.ServerRelaysCacheResponse.newContent(responseEtag, data)
108-
}
109-
} else {
110-
nil
111-
}
112-
}
113-
114-
return createNetworkOperation(
115-
request: .getRelayList(retryStrategy, etag: etag),
116-
responseHandler: responseHandler,
117-
completionHandler: completionHandler
118-
)
119-
}
120-
121-
private func createNetworkOperation<Success: Decodable>(
122-
request: APIRequest,
123-
responseHandler: RustResponseHandler<Success>,
124-
completionHandler: @escaping @Sendable ProxyCompletionHandler<Success>
125-
) -> MullvadApiNetworkOperation<Success> {
126-
let networkOperation = MullvadApiNetworkOperation(
127-
name: request.name,
128-
dispatchQueue: dispatchQueue,
129-
request: request,
130-
transportProvider: configuration.apiTransportProvider,
131-
responseDecoder: responseDecoder,
132-
responseHandler: responseHandler,
133-
completionHandler: completionHandler
134-
)
135-
136-
operationQueue.addOperation(networkOperation)
137-
138-
return networkOperation
139-
}
140-
14160
public func getAddressList(
14261
retryStrategy: REST.RetryStrategy,
14362
completionHandler: @escaping @Sendable ProxyCompletionHandler<[AnyIPEndpoint]>
@@ -366,64 +285,15 @@ extension REST {
366285

367286
// MARK: - Response types
368287

369-
public enum ServerRelaysCacheResponse: Sendable, Decodable {
370-
case notModified
371-
case newContent(_ etag: String?, _ rawData: Data)
372-
}
373-
374288
private struct CreateApplePaymentRequest: Encodable, Sendable {
375289
let receiptString: Data
376290
}
377291

378-
public enum CreateApplePaymentResponse: Sendable {
379-
case noTimeAdded(_ expiry: Date)
380-
case timeAdded(_ timeAdded: Int, _ newExpiry: Date)
381-
382-
public var newExpiry: Date {
383-
switch self {
384-
case let .noTimeAdded(expiry), let .timeAdded(_, expiry):
385-
return expiry
386-
}
387-
}
388-
389-
public var timeAdded: TimeInterval {
390-
switch self {
391-
case .noTimeAdded:
392-
return 0
393-
case let .timeAdded(timeAdded, _):
394-
return TimeInterval(timeAdded)
395-
}
396-
}
397-
398-
/// Returns a formatted string for the `timeAdded` interval, i.e "30 days"
399-
public var formattedTimeAdded: String? {
400-
let formatter = DateComponentsFormatter()
401-
formatter.allowedUnits = [.day, .hour]
402-
formatter.unitsStyle = .full
403-
404-
return formatter.string(from: self.timeAdded)
405-
}
406-
}
407-
408292
private struct CreateApplePaymentRawResponse: Decodable, Sendable {
409293
let timeAdded: Int
410294
let newExpiry: Date
411295
}
412296

413-
public struct ProblemReportRequest: Encodable, Sendable {
414-
public let address: String
415-
public let message: String
416-
public let log: String
417-
public let metadata: [String: String]
418-
419-
public init(address: String, message: String, log: String, metadata: [String: String]) {
420-
self.address = address
421-
self.message = message
422-
self.log = log
423-
self.metadata = metadata
424-
}
425-
}
426-
427297
private struct SubmitVoucherRequest: Encodable, Sendable {
428298
let voucherCode: String
429299
}

0 commit comments

Comments
 (0)