Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 24 additions & 12 deletions Networking/Networking.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -716,6 +716,7 @@
DE50296328C609DE00551736 /* jetpack-user-not-connected.json in Resources */ = {isa = PBXBuildFile; fileRef = DE50296228C609DE00551736 /* jetpack-user-not-connected.json */; };
DE50296528C60A8000551736 /* JetpackUserMapperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE50296428C60A8000551736 /* JetpackUserMapperTests.swift */; };
DE5CA111288A3E080077BEF9 /* product-malformed-variations-and-image-alt.json in Resources */ = {isa = PBXBuildFile; fileRef = DE5CA110288A3E080077BEF9 /* product-malformed-variations-and-image-alt.json */; };
DE66C5532976508300DAA978 /* CookieNonceAuthenticator.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE66C5522976508300DAA978 /* CookieNonceAuthenticator.swift */; };
DE6F308727966FEF004E1C9A /* CouponReportListMapperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE6F308627966FEF004E1C9A /* CouponReportListMapperTests.swift */; };
DE74F29A27E08F5A0002FE59 /* SiteSettingMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE74F29927E08F5A0002FE59 /* SiteSettingMapper.swift */; };
DE74F29C27E0A1D00002FE59 /* setting-coupon.json in Resources */ = {isa = PBXBuildFile; fileRef = DE74F29B27E0A1D00002FE59 /* setting-coupon.json */; };
Expand Down Expand Up @@ -752,7 +753,7 @@
DEF13C5E296686AB0024A02B /* orders-load-all-without-data.json in Resources */ = {isa = PBXBuildFile; fileRef = DEF13C5D296686AB0024A02B /* orders-load-all-without-data.json */; };
DEF13C6029668C420024A02B /* order-without-data.json in Resources */ = {isa = PBXBuildFile; fileRef = DEF13C5F29668C420024A02B /* order-without-data.json */; };
DEFBA74E29485A7600C35BA9 /* RESTRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEFBA74D29485A7600C35BA9 /* RESTRequest.swift */; };
DEFBA7542949CE6600C35BA9 /* RequestProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEFBA7532949CE6600C35BA9 /* RequestProcessor.swift */; };
DEFBA7542949CE6600C35BA9 /* ApplicationPasswordRequestProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEFBA7532949CE6600C35BA9 /* ApplicationPasswordRequestProcessor.swift */; };
DEFBA7562949D17400C35BA9 /* DefaultRequestAuthenticatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEFBA7552949D17300C35BA9 /* DefaultRequestAuthenticatorTests.swift */; };
E12552C526385B05001CEE70 /* ShippingLabelAddressValidationSuccess.swift in Sources */ = {isa = PBXBuildFile; fileRef = E12552C426385B05001CEE70 /* ShippingLabelAddressValidationSuccess.swift */; };
E137619929151C7400FD098F /* error-wp-rest-forbidden.json in Resources */ = {isa = PBXBuildFile; fileRef = E137619829151C7400FD098F /* error-wp-rest-forbidden.json */; };
Expand All @@ -779,13 +780,13 @@
EE6FDCFC2966A70400E1CECF /* product-without-data.json in Resources */ = {isa = PBXBuildFile; fileRef = EE6FDCFB2966A70400E1CECF /* product-without-data.json */; };
EE71CC3D2951A8EA0074D908 /* ApplicationPasswordStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE71CC3C2951A8EA0074D908 /* ApplicationPasswordStorage.swift */; };
EE71CC412951CE700074D908 /* generate-application-password-using-wporg-creds-success.json in Resources */ = {isa = PBXBuildFile; fileRef = EE71CC402951CE700074D908 /* generate-application-password-using-wporg-creds-success.json */; };
EE76762F2962B85E000066FA /* RequestProcessorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE76762E2962B85E000066FA /* RequestProcessorTests.swift */; };
EE76762F2962B85E000066FA /* ApplicationPasswordRequestProcessorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE76762E2962B85E000066FA /* ApplicationPasswordRequestProcessorTests.swift */; };
EE80A24729547F8B003591E4 /* coupons-all-without-data.json in Resources */ = {isa = PBXBuildFile; fileRef = EE80A24529547F8B003591E4 /* coupons-all-without-data.json */; };
EE80A24829547F8B003591E4 /* coupon-without-data.json in Resources */ = {isa = PBXBuildFile; fileRef = EE80A24629547F8B003591E4 /* coupon-without-data.json */; };
EE80A25029556FBD003591E4 /* coupon-reports-without-data.json in Resources */ = {isa = PBXBuildFile; fileRef = EE80A24F29556FBD003591E4 /* coupon-reports-without-data.json */; };
EE8A86F1286C5226003E8AA4 /* media-update-product-id-in-wordpress-site.json in Resources */ = {isa = PBXBuildFile; fileRef = EE8A86F0286C5226003E8AA4 /* media-update-product-id-in-wordpress-site.json */; };
EE8DE432294B17CD005054E7 /* DefaultApplicationPasswordUseCaseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE8DE431294B17CD005054E7 /* DefaultApplicationPasswordUseCaseTests.swift */; };
EE99814E295AA7430074AE68 /* RequestAuthenticator.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE99814D295AA7430074AE68 /* RequestAuthenticator.swift */; };
EE99814E295AA7430074AE68 /* ApplicationPasswordAuthenticator.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE99814D295AA7430074AE68 /* ApplicationPasswordAuthenticator.swift */; };
EE998150295AACE10074AE68 /* RequestConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE99814F295AACE10074AE68 /* RequestConverter.swift */; };
EEA6583E2966B41E00112DF0 /* products-load-all-without-data.json in Resources */ = {isa = PBXBuildFile; fileRef = EEA6583D2966B41E00112DF0 /* products-load-all-without-data.json */; };
EEA658402966C05D00112DF0 /* product-search-sku-without-data.json in Resources */ = {isa = PBXBuildFile; fileRef = EEA6583F2966C05D00112DF0 /* product-search-sku-without-data.json */; };
Expand Down Expand Up @@ -1545,6 +1546,7 @@
DE50296228C609DE00551736 /* jetpack-user-not-connected.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "jetpack-user-not-connected.json"; sourceTree = "<group>"; };
DE50296428C60A8000551736 /* JetpackUserMapperTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JetpackUserMapperTests.swift; sourceTree = "<group>"; };
DE5CA110288A3E080077BEF9 /* product-malformed-variations-and-image-alt.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "product-malformed-variations-and-image-alt.json"; sourceTree = "<group>"; };
DE66C5522976508300DAA978 /* CookieNonceAuthenticator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CookieNonceAuthenticator.swift; sourceTree = "<group>"; };
DE6F308627966FEF004E1C9A /* CouponReportListMapperTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CouponReportListMapperTests.swift; sourceTree = "<group>"; };
DE74F29927E08F5A0002FE59 /* SiteSettingMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SiteSettingMapper.swift; sourceTree = "<group>"; };
DE74F29B27E0A1D00002FE59 /* setting-coupon.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "setting-coupon.json"; sourceTree = "<group>"; };
Expand Down Expand Up @@ -1581,7 +1583,7 @@
DEF13C5D296686AB0024A02B /* orders-load-all-without-data.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "orders-load-all-without-data.json"; sourceTree = "<group>"; };
DEF13C5F29668C420024A02B /* order-without-data.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "order-without-data.json"; sourceTree = "<group>"; };
DEFBA74D29485A7600C35BA9 /* RESTRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RESTRequest.swift; sourceTree = "<group>"; };
DEFBA7532949CE6600C35BA9 /* RequestProcessor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestProcessor.swift; sourceTree = "<group>"; };
DEFBA7532949CE6600C35BA9 /* ApplicationPasswordRequestProcessor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationPasswordRequestProcessor.swift; sourceTree = "<group>"; };
DEFBA7552949D17300C35BA9 /* DefaultRequestAuthenticatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultRequestAuthenticatorTests.swift; sourceTree = "<group>"; };
E12552C426385B05001CEE70 /* ShippingLabelAddressValidationSuccess.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShippingLabelAddressValidationSuccess.swift; sourceTree = "<group>"; };
E137619829151C7400FD098F /* error-wp-rest-forbidden.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "error-wp-rest-forbidden.json"; sourceTree = "<group>"; };
Expand All @@ -1608,13 +1610,13 @@
EE6FDCFB2966A70400E1CECF /* product-without-data.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "product-without-data.json"; sourceTree = "<group>"; };
EE71CC3C2951A8EA0074D908 /* ApplicationPasswordStorage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationPasswordStorage.swift; sourceTree = "<group>"; };
EE71CC402951CE700074D908 /* generate-application-password-using-wporg-creds-success.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "generate-application-password-using-wporg-creds-success.json"; sourceTree = "<group>"; };
EE76762E2962B85E000066FA /* RequestProcessorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestProcessorTests.swift; sourceTree = "<group>"; };
EE76762E2962B85E000066FA /* ApplicationPasswordRequestProcessorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationPasswordRequestProcessorTests.swift; sourceTree = "<group>"; };
EE80A24529547F8B003591E4 /* coupons-all-without-data.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "coupons-all-without-data.json"; sourceTree = "<group>"; };
EE80A24629547F8B003591E4 /* coupon-without-data.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "coupon-without-data.json"; sourceTree = "<group>"; };
EE80A24F29556FBD003591E4 /* coupon-reports-without-data.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "coupon-reports-without-data.json"; sourceTree = "<group>"; };
EE8A86F0286C5226003E8AA4 /* media-update-product-id-in-wordpress-site.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "media-update-product-id-in-wordpress-site.json"; sourceTree = "<group>"; };
EE8DE431294B17CD005054E7 /* DefaultApplicationPasswordUseCaseTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultApplicationPasswordUseCaseTests.swift; sourceTree = "<group>"; };
EE99814D295AA7430074AE68 /* RequestAuthenticator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestAuthenticator.swift; sourceTree = "<group>"; };
EE99814D295AA7430074AE68 /* ApplicationPasswordAuthenticator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationPasswordAuthenticator.swift; sourceTree = "<group>"; };
EE99814F295AACE10074AE68 /* RequestConverter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestConverter.swift; sourceTree = "<group>"; };
EEA6583D2966B41E00112DF0 /* products-load-all-without-data.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "products-load-all-without-data.json"; sourceTree = "<group>"; };
EEA6583F2966C05D00112DF0 /* product-search-sku-without-data.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "product-search-sku-without-data.json"; sourceTree = "<group>"; };
Expand Down Expand Up @@ -1953,6 +1955,7 @@
B557D9E5209753AA005962F4 /* Networking */ = {
isa = PBXGroup;
children = (
DE66C5512976507100DAA978 /* CookieNonce */,
EE54C899294777D000A9BF61 /* ApplicationPassword */,
B5A0369F214C0F4C00774E2C /* Internal */,
B5BB1D0A20A204F400112D92 /* Extensions */,
Expand Down Expand Up @@ -2746,6 +2749,14 @@
path = Product;
sourceTree = "<group>";
};
DE66C5512976507100DAA978 /* CookieNonce */ = {
isa = PBXGroup;
children = (
DE66C5522976508300DAA978 /* CookieNonceAuthenticator.swift */,
);
path = CookieNonce;
sourceTree = "<group>";
};
DE97C3902861B8CD0042E973 /* Encoder */ = {
isa = PBXGroup;
children = (
Expand Down Expand Up @@ -2780,10 +2791,10 @@
EE54C899294777D000A9BF61 /* ApplicationPassword */ = {
isa = PBXGroup;
children = (
DEFBA7532949CE6600C35BA9 /* RequestProcessor.swift */,
DEFBA7532949CE6600C35BA9 /* ApplicationPasswordRequestProcessor.swift */,
EE54C89E2947782E00A9BF61 /* ApplicationPasswordUseCase.swift */,
EE71CC3C2951A8EA0074D908 /* ApplicationPasswordStorage.swift */,
EE99814D295AA7430074AE68 /* RequestAuthenticator.swift */,
EE99814D295AA7430074AE68 /* ApplicationPasswordAuthenticator.swift */,
EE99814F295AACE10074AE68 /* RequestConverter.swift */,
);
path = ApplicationPassword;
Expand Down Expand Up @@ -2830,7 +2841,7 @@
isa = PBXGroup;
children = (
EE8DE431294B17CD005054E7 /* DefaultApplicationPasswordUseCaseTests.swift */,
EE76762E2962B85E000066FA /* RequestProcessorTests.swift */,
EE76762E2962B85E000066FA /* ApplicationPasswordRequestProcessorTests.swift */,
);
path = ApplicationPassword;
sourceTree = "<group>";
Expand Down Expand Up @@ -3330,7 +3341,7 @@
457A574025D1817E000797AD /* ShippingLabelAddressVerification.swift in Sources */,
74ABA1D1213F22CA00FFAD30 /* TopEarnersStatsRemote.swift in Sources */,
DEC51AF127699E7A009F3DF4 /* SystemStatus+Page.swift in Sources */,
EE99814E295AA7430074AE68 /* RequestAuthenticator.swift in Sources */,
EE99814E295AA7430074AE68 /* ApplicationPasswordAuthenticator.swift in Sources */,
025CA2C0238EB8CB00B05C81 /* ProductShippingClass.swift in Sources */,
02C1CEF424C6A02B00703EBA /* ProductVariationMapper.swift in Sources */,
3105470C262E27F000C5C02B /* WCPayPaymentIntentStatusEnum.swift in Sources */,
Expand All @@ -3345,6 +3356,7 @@
451A97E9260B657D0059D135 /* ShippingLabelPredefinedOption.swift in Sources */,
02C2548425635BD000A04423 /* ShippingLabelPaperSize.swift in Sources */,
CE132BBC223859710029DB6C /* ProductTag.swift in Sources */,
DE66C5532976508300DAA978 /* CookieNonceAuthenticator.swift in Sources */,
26650332261FFA1A0079A159 /* ProductAddOnEnvelope.swift in Sources */,
D88D5A47230BC838007B6E01 /* ProductReview.swift in Sources */,
DEFBA74E29485A7600C35BA9 /* RESTRequest.swift in Sources */,
Expand All @@ -3361,7 +3373,7 @@
020D07B823D852BB00FD9580 /* Media.swift in Sources */,
B5BB1D0C20A2050300112D92 /* DateFormatter+Woo.swift in Sources */,
743E84EE2217244C00FAC9D7 /* ShipmentTrackingListMapper.swift in Sources */,
DEFBA7542949CE6600C35BA9 /* RequestProcessor.swift in Sources */,
DEFBA7542949CE6600C35BA9 /* ApplicationPasswordRequestProcessor.swift in Sources */,
451A97E5260B631E0059D135 /* ShippingLabelPredefinedPackage.swift in Sources */,
BAB373722795A1FB00837B4A /* OrderTaxLine.swift in Sources */,
EE54C89F2947782E00A9BF61 /* ApplicationPasswordUseCase.swift in Sources */,
Expand Down Expand Up @@ -3753,7 +3765,7 @@
D800DA0A25EFEB9C001E13CE /* WCPayRemoteTests.swift in Sources */,
E13BAD5328F8625600217769 /* InAppPurchasesRemoteTests.swift in Sources */,
CC851D1425E52AB500249E9C /* Decimal+ExtensionsTests.swift in Sources */,
EE76762F2962B85E000066FA /* RequestProcessorTests.swift in Sources */,
EE76762F2962B85E000066FA /* ApplicationPasswordRequestProcessorTests.swift in Sources */,
B554FA8B2180B1D500C54DFF /* NotificationsRemoteTests.swift in Sources */,
B518662A20A09C6F00037A38 /* OrdersRemoteTests.swift in Sources */,
02EF166E292F0C5800D90AD6 /* PaymentRemoteTests.swift in Sources */,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
enum RequestAuthenticatorError: Error {
enum ApplicationPasswordAuthenticatorError: Error {
case applicationPasswordUseCaseNotAvailable
case applicationPasswordNotAvailable
}

protocol RequestAuthenticator {
protocol ApplicationPasswordAuthenticator {
/// Credentials to authenticate the URLRequest
///
var credentials: Credentials? { get }
Expand All @@ -26,7 +26,7 @@ protocol RequestAuthenticator {

/// Authenticates request
///
public struct DefaultRequestAuthenticator: RequestAuthenticator {
public struct DefaultApplicationPasswordAuthenticator: ApplicationPasswordAuthenticator {
/// Credentials to authenticate the URLRequest
///
let credentials: Credentials?
Expand Down Expand Up @@ -71,7 +71,7 @@ public struct DefaultRequestAuthenticator: RequestAuthenticator {
///
func generateApplicationPassword() async throws {
guard let applicationPasswordUseCase else {
throw RequestAuthenticatorError.applicationPasswordUseCaseNotAvailable
throw ApplicationPasswordAuthenticatorError.applicationPasswordUseCaseNotAvailable
}
let _ = try await applicationPasswordUseCase.generateNewPassword()
return
Expand All @@ -84,7 +84,7 @@ public struct DefaultRequestAuthenticator: RequestAuthenticator {
}
}

private extension DefaultRequestAuthenticator {
private extension DefaultApplicationPasswordAuthenticator {
/// To check whether the given URLRequest is a REST API request
///
func isRestAPIRequest(_ urlRequest: URLRequest) -> Bool {
Expand All @@ -110,7 +110,7 @@ private extension DefaultRequestAuthenticator {
///
func authenticateUsingApplicationPasswordIfPossible(_ urlRequest: URLRequest) throws -> URLRequest {
guard let applicationPassword = applicationPasswordUseCase?.applicationPassword else {
throw RequestAuthenticatorError.applicationPasswordNotAvailable
throw ApplicationPasswordAuthenticatorError.applicationPasswordNotAvailable
}

return AuthenticatedRESTRequest(applicationPassword: applicationPassword, request: urlRequest).asURLRequest()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,29 +3,29 @@ import Foundation

/// Authenticates and retries requests
///
final class RequestProcessor {
final class ApplicationPasswordRequestProcessor {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe @selanthiraiyan can confirm the renaming of these classes since you created them? I didn't know they're only used in the application password context when I reviewed the previous PR on these classes.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The processor triggers generating application passwords when retrying requests, so it is specific to application password authentication only. I renamed this to avoid confusion with any other authentication method.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am afraid that using ApplicationPassword as a prefix wouldn't make sense here.

The RequestProcessor handles authentication for both WPCOM token and application password cases. RequestProcessor uses DefaultRequestAuthenticator to perform the authentication here

Extra info: Only REST requests are retried, and errors from other requests are just passed through. Due to this method in AlamofireNetwork

private var requestsToRetry = [RequestRetryCompletion]()

private var isAuthenticating = false

private let requestAuthenticator: RequestAuthenticator
private let requestAuthenticator: ApplicationPasswordAuthenticator

init(requestAuthenticator: RequestAuthenticator) {
init(requestAuthenticator: ApplicationPasswordAuthenticator) {
self.requestAuthenticator = requestAuthenticator
}
}

// MARK: Request Authentication
//
extension RequestProcessor: RequestAdapter {
extension ApplicationPasswordRequestProcessor: RequestAdapter {
func adapt(_ urlRequest: URLRequest) throws -> URLRequest {
return try requestAuthenticator.authenticate(urlRequest)
}
}

// MARK: Retrying Request
//
extension RequestProcessor: RequestRetrier {
extension ApplicationPasswordRequestProcessor: RequestRetrier {
func should(_ manager: Alamofire.SessionManager,
retry request: Alamofire.Request,
with error: Error,
Expand All @@ -48,7 +48,7 @@ extension RequestProcessor: RequestRetrier {

// MARK: Helpers
//
private extension RequestProcessor {
private extension ApplicationPasswordRequestProcessor {
func generateApplicationPassword() {
Task(priority: .medium) {
isAuthenticating = true
Expand All @@ -66,7 +66,7 @@ private extension RequestProcessor {

func shouldRetry(_ error: Error) -> Bool {
// Need to generate application password
if .applicationPasswordNotAvailable == error as? RequestAuthenticatorError {
if .applicationPasswordNotAvailable == error as? ApplicationPasswordAuthenticatorError {
return true
}

Expand Down
Loading