From f4af994294ec3f736d9bc207f3d8597281b50065 Mon Sep 17 00:00:00 2001 From: Sasha Weiss Date: Tue, 10 Jan 2023 11:32:15 -0800 Subject: [PATCH] Move boost payment requests to extension in own file --- Signal.xcodeproj/project.pbxproj | 4 + .../OWSRequestFactory+BoostPayments.swift | 81 +++++++++++++++++++ .../API/Requests/OWSRequestFactory.swift | 68 ---------------- 3 files changed, 85 insertions(+), 68 deletions(-) create mode 100644 SignalServiceKit/src/Network/API/Requests/OWSRequestFactory+BoostPayments.swift diff --git a/Signal.xcodeproj/project.pbxproj b/Signal.xcodeproj/project.pbxproj index a5db0f78fc..a85b5e976f 100644 --- a/Signal.xcodeproj/project.pbxproj +++ b/Signal.xcodeproj/project.pbxproj @@ -1128,6 +1128,7 @@ D943F3EF2892F89B008C0C8B /* NSELogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = D943F3EE2892F89B008C0C8B /* NSELogger.swift */; }; D9517ABE292C596B00DDD37E /* Paypal+WebAuthentication.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9517ABD292C596B00DDD37E /* Paypal+WebAuthentication.swift */; }; D9517AC0292C5A3900DDD37E /* Paypal+API.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9517ABF292C5A3900DDD37E /* Paypal+API.swift */; }; + D95C39E6296DE9E900A9DA23 /* OWSRequestFactory+BoostPayments.swift in Sources */ = {isa = PBXBuildFile; fileRef = D95C39E5296DE9E900A9DA23 /* OWSRequestFactory+BoostPayments.swift */; }; D95DA7ED28B560D1003996BA /* ConversationViewController+SystemMessageItems.swift in Sources */ = {isa = PBXBuildFile; fileRef = D95DA7EC28B560D1003996BA /* ConversationViewController+SystemMessageItems.swift */; }; D9668B2F291AF63500665298 /* SSKJobQueues.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9668B2E291AF63500665298 /* SSKJobQueues.swift */; }; D9668B33291B03C200665298 /* SessionResetJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45D231761DC7E8F10034FA89 /* SessionResetJob.swift */; }; @@ -3512,6 +3513,7 @@ D943F3EE2892F89B008C0C8B /* NSELogger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSELogger.swift; sourceTree = ""; }; D9517ABD292C596B00DDD37E /* Paypal+WebAuthentication.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Paypal+WebAuthentication.swift"; sourceTree = ""; }; D9517ABF292C5A3900DDD37E /* Paypal+API.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Paypal+API.swift"; sourceTree = ""; }; + D95C39E5296DE9E900A9DA23 /* OWSRequestFactory+BoostPayments.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "OWSRequestFactory+BoostPayments.swift"; sourceTree = ""; }; D95DA7EC28B560D1003996BA /* ConversationViewController+SystemMessageItems.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ConversationViewController+SystemMessageItems.swift"; sourceTree = ""; }; D9668B2E291AF63500665298 /* SSKJobQueues.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SSKJobQueues.swift; sourceTree = ""; }; D9668B34291B088200665298 /* SignalMessagingJobQueues.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignalMessagingJobQueues.swift; sourceTree = ""; }; @@ -8222,6 +8224,7 @@ F9C5CAE1289453B200548EEE /* Requests */ = { isa = PBXGroup; children = ( + D95C39E5296DE9E900A9DA23 /* OWSRequestFactory+BoostPayments.swift */, F9C5CAE4289453B200548EEE /* OWSRequestFactory.h */, F9C5CAE6289453B200548EEE /* OWSRequestFactory.m */, F9C5CAE2289453B200548EEE /* OWSRequestFactory.swift */, @@ -11038,6 +11041,7 @@ F9C5CC68289453B300548EEE /* OWSRecoverableDecryptionPlaceholder+Replace.swift in Sources */, F9C5CC6E289453B300548EEE /* OWSRecoverableDecryptionPlaceholder+SDS.swift in Sources */, F9C5CC85289453B300548EEE /* OWSRecoverableDecryptionPlaceholder.m in Sources */, + D95C39E6296DE9E900A9DA23 /* OWSRequestFactory+BoostPayments.swift in Sources */, F9C5CDB9289453B400548EEE /* OWSRequestFactory.m in Sources */, F9C5CDB5289453B400548EEE /* OWSRequestFactory.swift in Sources */, F9C5CC52289453B300548EEE /* OWSRequestMaker.swift in Sources */, diff --git a/SignalServiceKit/src/Network/API/Requests/OWSRequestFactory+BoostPayments.swift b/SignalServiceKit/src/Network/API/Requests/OWSRequestFactory+BoostPayments.swift new file mode 100644 index 0000000000..605d6da88b --- /dev/null +++ b/SignalServiceKit/src/Network/API/Requests/OWSRequestFactory+BoostPayments.swift @@ -0,0 +1,81 @@ +// +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only +// + +import Foundation + +public extension OWSRequestFactory { + private enum BoostApiPaths { + private static let basePath = "v1/subscription/boost" + + static let stripeCreatePaymentIntent = "\(basePath)/create" + static let paypalCreatePayment = "\(basePath)/paypal/create" + static let paypalConfirmPayment = "\(basePath)/paypal/confirm" + } + + /// A request to create a Stripe payment intent for a boost. + static func boostStripeCreatePaymentIntent( + integerMoneyValue: UInt, + inCurrencyCode currencyCode: Currency.Code, + level: UInt64 + ) -> TSRequest { + let request = TSRequest(url: URL(string: BoostApiPaths.stripeCreatePaymentIntent)!, + method: HTTPMethod.post.methodName, + parameters: ["currency": currencyCode.lowercased(), + "amount": integerMoneyValue, + "level": level]) + request.shouldHaveAuthorizationHeaders = false + return request + } + + /// A request to create a PayPal payment for a boost. + static func boostPaypalCreatePayment( + integerMoneyValue: UInt, + inCurrencyCode currencyCode: Currency.Code, + level: UInt64, + returnUrl: URL, + cancelUrl: URL + ) -> TSRequest { + let request = TSRequest( + url: URL(string: BoostApiPaths.paypalCreatePayment)!, + method: HTTPMethod.post.methodName, + parameters: [ + "currency": currencyCode.lowercased(), + "amount": integerMoneyValue, + "level": level, + "returnUrl": returnUrl.absoluteString, + "cancelUrl": cancelUrl.absoluteString + ] + ) + + request.shouldHaveAuthorizationHeaders = false + return request + } + + /// A request to confirm a PayPal payment for a boost. + static func boostPaypalConfirmPayment( + integerMoneyValue: UInt, + inCurrencyCode currencyCode: Currency.Code, + level: UInt64, + payerId: String, + paymentId: String, + paymentToken: String + ) -> TSRequest { + let request = TSRequest( + url: URL(string: BoostApiPaths.paypalConfirmPayment)!, + method: HTTPMethod.post.methodName, + parameters: [ + "currency": currencyCode.lowercased(), + "amount": integerMoneyValue, + "level": level, + "payerId": payerId, + "paymentId": paymentId, + "paymentToken": paymentToken + ] + ) + + request.shouldHaveAuthorizationHeaders = false + return request + } +} diff --git a/SignalServiceKit/src/Network/API/Requests/OWSRequestFactory.swift b/SignalServiceKit/src/Network/API/Requests/OWSRequestFactory.swift index fd447a526f..c1fccbbe92 100644 --- a/SignalServiceKit/src/Network/API/Requests/OWSRequestFactory.swift +++ b/SignalServiceKit/src/Network/API/Requests/OWSRequestFactory.swift @@ -22,9 +22,6 @@ public extension OWSRequestFactory { static let textSecureProfileAvatarFormAPI = "v1/profile/form/avatar" static let textSecure2FAAPI = "v1/accounts/pin" static let textSecureRegistrationLockV2API = "v1/accounts/registration_lock" - static let textSecureBoostStripeCreatePaymentIntent = "v1/subscription/boost/create" - static let textSecureBoostPaypalCreatePayment = "v1/subscription/boost/paypal/create" - static let textSecureBoostPaypalConfirmPayment = "v1/subscription/boost/paypal/confirm" static let textSecureGiftBadgePricesAPI = "v1/subscription/boost/amounts/gift" static let textSecureHTTPTimeOut: TimeInterval = 10 @@ -69,71 +66,6 @@ public extension OWSRequestFactory { parameters: [:]) } - /// A request to create a Stripe payment intent for a boost. - static func boostStripeCreatePaymentIntent( - integerMoneyValue: UInt, - inCurrencyCode currencyCode: Currency.Code, - level: UInt64 - ) -> TSRequest { - let request = TSRequest(url: URL(string: textSecureBoostStripeCreatePaymentIntent)!, - method: HTTPMethod.post.methodName, - parameters: ["currency": currencyCode.lowercased(), - "amount": integerMoneyValue, - "level": level]) - request.shouldHaveAuthorizationHeaders = false - return request - } - - /// A request to create a PayPal payment for a boost. - static func boostPaypalCreatePayment( - integerMoneyValue: UInt, - inCurrencyCode currencyCode: Currency.Code, - level: UInt64, - returnUrl: URL, - cancelUrl: URL - ) -> TSRequest { - let request = TSRequest( - url: URL(string: textSecureBoostPaypalCreatePayment)!, - method: HTTPMethod.post.methodName, - parameters: [ - "currency": currencyCode.lowercased(), - "amount": integerMoneyValue, - "level": level, - "returnUrl": returnUrl.absoluteString, - "cancelUrl": cancelUrl.absoluteString - ] - ) - - request.shouldHaveAuthorizationHeaders = false - return request - } - - /// A request to confirm a PayPal payment for a boost. - static func boostPaypalConfirmPayment( - integerMoneyValue: UInt, - inCurrencyCode currencyCode: Currency.Code, - level: UInt64, - payerId: String, - paymentId: String, - paymentToken: String - ) -> TSRequest { - let request = TSRequest( - url: URL(string: textSecureBoostPaypalConfirmPayment)!, - method: HTTPMethod.post.methodName, - parameters: [ - "currency": currencyCode.lowercased(), - "amount": integerMoneyValue, - "level": level, - "payerId": payerId, - "paymentId": paymentId, - "paymentToken": paymentToken - ] - ) - - request.shouldHaveAuthorizationHeaders = false - return request - } - static let batchIdentityCheckElementsLimit = 1000 static func batchIdentityCheckRequest(elements: [[String: String]]) -> TSRequest { precondition(elements.count <= batchIdentityCheckElementsLimit)