diff options
| author | Andrej Mihajlov <and@mullvad.net> | 2020-03-26 12:38:52 +0100 |
|---|---|---|
| committer | Andrej Mihajlov <and@mullvad.net> | 2020-03-26 16:23:13 +0100 |
| commit | 5eca8ab8efbb03938dfd01908c347822db981ab9 (patch) | |
| tree | 3d4e3a6347dec1a1772e9c2ac1b5f730732b93c5 | |
| parent | 56624b3f835d9e896c08651a1e09a28cbe475010 (diff) | |
| download | mullvadvpn-5eca8ab8efbb03938dfd01908c347822db981ab9.tar.xz mullvadvpn-5eca8ab8efbb03938dfd01908c347822db981ab9.zip | |
Add a method to submit the appstore receipt to API
| -rw-r--r-- | ios/MullvadVPN/MullvadAPI.swift | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/ios/MullvadVPN/MullvadAPI.swift b/ios/MullvadVPN/MullvadAPI.swift index 9e6add133a..7ba5de4d5c 100644 --- a/ios/MullvadVPN/MullvadAPI.swift +++ b/ios/MullvadVPN/MullvadAPI.swift @@ -38,6 +38,22 @@ enum DeferReasonError: Error { case server(MullvadAPI.ResponseError) } +/// A response received when sending the AppStore receipt to the backend +struct SendAppStoreReceiptResponse: Codable { + let timeAdded: TimeInterval + let newExpiry: Date + + /// Returns a formatted string for the `timeAdded` interval, i.e "30 days" + var formattedTimeAdded: String? { + let formatter = DateComponentsFormatter() + formatter.allowedUnits = [.day, .hour] + formatter.unitsStyle = .full + formatter.maximumUnitCount = 1 + + return formatter.string(from: timeAdded) + } +} + class MullvadAPI { private let session: URLSession @@ -172,6 +188,15 @@ class MullvadAPI { return MullvadAPI.makeDataTaskPublisher(request: request) } + func sendAppStoreReceipt(accountToken: String, receiptData: Data) -> AnyPublisher<Response<SendAppStoreReceiptResponse>, MullvadAPI.Error> { + let request = JsonRpcRequest(method: "apple_payment", params: [ + AnyEncodable(accountToken), + AnyEncodable(receiptData) + ]) + + return MullvadAPI.makeDataTaskPublisher(request: request) + } + private static func makeDataTaskPublisher<T: Decodable>(request: JsonRpcRequest) -> AnyPublisher<Response<T>, MullvadAPI.Error> { return Just(request) .encode(encoder: makeJSONEncoder()) |
