From bf49ad346e7751ea3302bc70d52a9c6d312eb254 Mon Sep 17 00:00:00 2001 From: Sharma Elanthiraiyan Date: Mon, 12 Dec 2022 14:03:51 +0530 Subject: [PATCH 1/4] Create `ApplicationPasswordUseCase` protocol. --- .../ApplicationPasswordUseCase.swift | 30 +++++++++++++++++++ .../WooCommerce.xcodeproj/project.pbxproj | 12 ++++++++ 2 files changed, 42 insertions(+) create mode 100644 WooCommerce/Classes/Authentication/Application password/ApplicationPasswordUseCase.swift diff --git a/WooCommerce/Classes/Authentication/Application password/ApplicationPasswordUseCase.swift b/WooCommerce/Classes/Authentication/Application password/ApplicationPasswordUseCase.swift new file mode 100644 index 00000000000..93855fd9790 --- /dev/null +++ b/WooCommerce/Classes/Authentication/Application password/ApplicationPasswordUseCase.swift @@ -0,0 +1,30 @@ +import Foundation +import WordPressShared + +struct ApplicationPassword { + /// WordPress org username that the application password belongs to + /// + let wpOrgUername: String + + /// Application password + /// + let password: Secret +} + +protocol ApplicationPasswordUseCase { + /// Returns the locally saved ApplicationPassword if available + /// + var applicationPassword: ApplicationPassword? { get } + + /// Generates new ApplicationPassword + /// + /// - Returns: Generated `ApplicationPassword` instance + /// + func generateNewPassword() async throws -> ApplicationPassword + + /// Deletes the application password + /// + /// Deletes locally and also send a API request to delete it from the site + /// + func deletePassword() async throws +} diff --git a/WooCommerce/WooCommerce.xcodeproj/project.pbxproj b/WooCommerce/WooCommerce.xcodeproj/project.pbxproj index 23d2d86475c..f0b01511420 100644 --- a/WooCommerce/WooCommerce.xcodeproj/project.pbxproj +++ b/WooCommerce/WooCommerce.xcodeproj/project.pbxproj @@ -1914,6 +1914,7 @@ E1F52DC62668E03B00349D75 /* CardPresentModalBluetoothRequired.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1F52DC52668E03B00349D75 /* CardPresentModalBluetoothRequired.swift */; }; EE0EE7A628B7415200F6061E /* CustomHelpCenterContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE0EE7A528B7415200F6061E /* CustomHelpCenterContent.swift */; }; EE0EE7A828B74EF300F6061E /* CustomHelpCenterContentTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE0EE7A728B74EF300F6061E /* CustomHelpCenterContentTests.swift */; }; + EE54C8912946F14B00A9BF61 /* ApplicationPasswordUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE54C8902946F14B00A9BF61 /* ApplicationPasswordUseCase.swift */; }; EE81B1382865BB0B0032E0D4 /* ProductImagesProductIDUpdaterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE81B1372865BB0B0032E0D4 /* ProductImagesProductIDUpdaterTests.swift */; }; EE8DCA8028BF964700F23B23 /* MockAuthentication.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE8DCA7F28BF964700F23B23 /* MockAuthentication.swift */; }; EEAA45FD293073FE0047D125 /* JetpackInstallStepTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEAA45FC293073FE0047D125 /* JetpackInstallStepTests.swift */; }; @@ -3955,6 +3956,7 @@ E1F52DC52668E03B00349D75 /* CardPresentModalBluetoothRequired.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardPresentModalBluetoothRequired.swift; sourceTree = ""; }; EE0EE7A528B7415200F6061E /* CustomHelpCenterContent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomHelpCenterContent.swift; sourceTree = ""; }; EE0EE7A728B74EF300F6061E /* CustomHelpCenterContentTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomHelpCenterContentTests.swift; sourceTree = ""; }; + EE54C8902946F14B00A9BF61 /* ApplicationPasswordUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationPasswordUseCase.swift; sourceTree = ""; }; EE81B1372865BB0B0032E0D4 /* ProductImagesProductIDUpdaterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProductImagesProductIDUpdaterTests.swift; sourceTree = ""; }; EE8DCA7F28BF964700F23B23 /* MockAuthentication.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockAuthentication.swift; sourceTree = ""; }; EEAA45FC293073FE0047D125 /* JetpackInstallStepTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JetpackInstallStepTests.swift; sourceTree = ""; }; @@ -7018,6 +7020,7 @@ B55D4C0420B6026700D7A50F /* Authentication */ = { isa = PBXGroup; children = ( + EE54C88F2946F12600A9BF61 /* Application password */, DE2FE5842925D9040018040A /* Jetpack Setup */, AEB4DB95290AE72D00AE4340 /* WebAuth */, D881A318256B5C9C00FE5605 /* Navigation Exceptions */, @@ -9036,6 +9039,14 @@ path = "In-Person Payments"; sourceTree = ""; }; + EE54C88F2946F12600A9BF61 /* Application password */ = { + isa = PBXGroup; + children = ( + EE54C8902946F14B00A9BF61 /* ApplicationPasswordUseCase.swift */, + ); + path = "Application password"; + sourceTree = ""; + }; EE6BAAB428EF093D0099288E /* me */ = { isa = PBXGroup; children = ( @@ -10486,6 +10497,7 @@ 0386CFEB2852108B00134466 /* PaymentMethodsHostingController.swift in Sources */, B56DB3CA2049BFAA00D4AA8E /* AppDelegate.swift in Sources */, 451750B224470CD5004FDA65 /* EnhancedTextView.swift in Sources */, + EE54C8912946F14B00A9BF61 /* ApplicationPasswordUseCase.swift in Sources */, 02279586237A50C900787C63 /* AztecUnorderedListFormatBarCommand.swift in Sources */, E1E125B226EB8EE80068A9B0 /* UpdateProgressImage.swift in Sources */, B5A82EE7210263460053ADC8 /* UIViewController+Helpers.swift in Sources */, From 20a1ad5abe653fa4c57cdf255d65225a5bbc4c9c Mon Sep 17 00:00:00 2001 From: Sharma Elanthiraiyan Date: Mon, 12 Dec 2022 14:17:14 +0530 Subject: [PATCH 2/4] Fix typo. --- .../Application password/ApplicationPasswordUseCase.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WooCommerce/Classes/Authentication/Application password/ApplicationPasswordUseCase.swift b/WooCommerce/Classes/Authentication/Application password/ApplicationPasswordUseCase.swift index 93855fd9790..81a3f02d521 100644 --- a/WooCommerce/Classes/Authentication/Application password/ApplicationPasswordUseCase.swift +++ b/WooCommerce/Classes/Authentication/Application password/ApplicationPasswordUseCase.swift @@ -4,7 +4,7 @@ import WordPressShared struct ApplicationPassword { /// WordPress org username that the application password belongs to /// - let wpOrgUername: String + let wpOrgUsername: String /// Application password /// From 22280d343ea8951382bd9ae6cbc3d03c0563f961 Mon Sep 17 00:00:00 2001 From: Sharma Elanthiraiyan Date: Mon, 12 Dec 2022 14:20:17 +0530 Subject: [PATCH 3/4] Move ApplicationPasswordUseCase to Networking layer. --- Networking/Networking.xcodeproj/project.pbxproj | 12 ++++++++++++ .../ApplicationPasswordUseCase.swift | 0 WooCommerce/WooCommerce.xcodeproj/project.pbxproj | 12 ------------ 3 files changed, 12 insertions(+), 12 deletions(-) rename {WooCommerce/Classes/Authentication/Application password => Networking/Networking/ApplicationPassword}/ApplicationPasswordUseCase.swift (100%) diff --git a/Networking/Networking.xcodeproj/project.pbxproj b/Networking/Networking.xcodeproj/project.pbxproj index abf2223914a..653598d359e 100644 --- a/Networking/Networking.xcodeproj/project.pbxproj +++ b/Networking/Networking.xcodeproj/project.pbxproj @@ -725,6 +725,7 @@ E1BAB2C32913FA6400C3982B /* ResponseDataValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1BAB2C22913FA6400C3982B /* ResponseDataValidator.swift */; }; E1BAB2C52913FB1800C3982B /* WordPressApiValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1BAB2C42913FB1800C3982B /* WordPressApiValidator.swift */; }; E1BAB2C72913FB5800C3982B /* WordPressApiError.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1BAB2C62913FB5800C3982B /* WordPressApiError.swift */; }; + EE54C8942947229800A9BF61 /* ApplicationPasswordUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE54C8932947229800A9BF61 /* ApplicationPasswordUseCase.swift */; }; EE8A86F1286C5226003E8AA4 /* media-update-product-id-in-wordpress-site.json in Resources */ = {isa = PBXBuildFile; fileRef = EE8A86F0286C5226003E8AA4 /* media-update-product-id-in-wordpress-site.json */; }; EECB7EE8286555180028C888 /* media-update-product-id.json in Resources */ = {isa = PBXBuildFile; fileRef = EECB7EE7286555180028C888 /* media-update-product-id.json */; }; FE28F6E226840DED004465C7 /* User.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE28F6E126840DED004465C7 /* User.swift */; }; @@ -1482,6 +1483,7 @@ E1BAB2C22913FA6400C3982B /* ResponseDataValidator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResponseDataValidator.swift; sourceTree = ""; }; E1BAB2C42913FB1800C3982B /* WordPressApiValidator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WordPressApiValidator.swift; sourceTree = ""; }; E1BAB2C62913FB5800C3982B /* WordPressApiError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WordPressApiError.swift; sourceTree = ""; }; + EE54C8932947229800A9BF61 /* ApplicationPasswordUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationPasswordUseCase.swift; sourceTree = ""; }; 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 = ""; }; EECB7EE7286555180028C888 /* media-update-product-id.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "media-update-product-id.json"; sourceTree = ""; }; F3F25DC15EC1D7C631169CB5 /* Pods_Networking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Networking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -1805,6 +1807,7 @@ B557D9E5209753AA005962F4 /* Networking */ = { isa = PBXGroup; children = ( + EE54C8922947227900A9BF61 /* ApplicationPassword */, B5A0369F214C0F4C00774E2C /* Internal */, B5BB1D0A20A204F400112D92 /* Extensions */, B567AF2720A0FA0A00AB6C62 /* Mapper */, @@ -2563,6 +2566,14 @@ path = SystemStatusDetails; sourceTree = ""; }; + EE54C8922947227900A9BF61 /* ApplicationPassword */ = { + isa = PBXGroup; + children = ( + EE54C8932947229800A9BF61 /* ApplicationPasswordUseCase.swift */, + ); + path = ApplicationPassword; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -3048,6 +3059,7 @@ 743E84EE2217244C00FAC9D7 /* ShipmentTrackingListMapper.swift in Sources */, 451A97E5260B631E0059D135 /* ShippingLabelPredefinedPackage.swift in Sources */, BAB373722795A1FB00837B4A /* OrderTaxLine.swift in Sources */, + EE54C8942947229800A9BF61 /* ApplicationPasswordUseCase.swift in Sources */, B567AF2520A0CCA300AB6C62 /* AuthenticatedRequest.swift in Sources */, 453305E92459DF2100264E50 /* PostMapper.swift in Sources */, E12552C526385B05001CEE70 /* ShippingLabelAddressValidationSuccess.swift in Sources */, diff --git a/WooCommerce/Classes/Authentication/Application password/ApplicationPasswordUseCase.swift b/Networking/Networking/ApplicationPassword/ApplicationPasswordUseCase.swift similarity index 100% rename from WooCommerce/Classes/Authentication/Application password/ApplicationPasswordUseCase.swift rename to Networking/Networking/ApplicationPassword/ApplicationPasswordUseCase.swift diff --git a/WooCommerce/WooCommerce.xcodeproj/project.pbxproj b/WooCommerce/WooCommerce.xcodeproj/project.pbxproj index f0b01511420..23d2d86475c 100644 --- a/WooCommerce/WooCommerce.xcodeproj/project.pbxproj +++ b/WooCommerce/WooCommerce.xcodeproj/project.pbxproj @@ -1914,7 +1914,6 @@ E1F52DC62668E03B00349D75 /* CardPresentModalBluetoothRequired.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1F52DC52668E03B00349D75 /* CardPresentModalBluetoothRequired.swift */; }; EE0EE7A628B7415200F6061E /* CustomHelpCenterContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE0EE7A528B7415200F6061E /* CustomHelpCenterContent.swift */; }; EE0EE7A828B74EF300F6061E /* CustomHelpCenterContentTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE0EE7A728B74EF300F6061E /* CustomHelpCenterContentTests.swift */; }; - EE54C8912946F14B00A9BF61 /* ApplicationPasswordUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE54C8902946F14B00A9BF61 /* ApplicationPasswordUseCase.swift */; }; EE81B1382865BB0B0032E0D4 /* ProductImagesProductIDUpdaterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE81B1372865BB0B0032E0D4 /* ProductImagesProductIDUpdaterTests.swift */; }; EE8DCA8028BF964700F23B23 /* MockAuthentication.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE8DCA7F28BF964700F23B23 /* MockAuthentication.swift */; }; EEAA45FD293073FE0047D125 /* JetpackInstallStepTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEAA45FC293073FE0047D125 /* JetpackInstallStepTests.swift */; }; @@ -3956,7 +3955,6 @@ E1F52DC52668E03B00349D75 /* CardPresentModalBluetoothRequired.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardPresentModalBluetoothRequired.swift; sourceTree = ""; }; EE0EE7A528B7415200F6061E /* CustomHelpCenterContent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomHelpCenterContent.swift; sourceTree = ""; }; EE0EE7A728B74EF300F6061E /* CustomHelpCenterContentTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomHelpCenterContentTests.swift; sourceTree = ""; }; - EE54C8902946F14B00A9BF61 /* ApplicationPasswordUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationPasswordUseCase.swift; sourceTree = ""; }; EE81B1372865BB0B0032E0D4 /* ProductImagesProductIDUpdaterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProductImagesProductIDUpdaterTests.swift; sourceTree = ""; }; EE8DCA7F28BF964700F23B23 /* MockAuthentication.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockAuthentication.swift; sourceTree = ""; }; EEAA45FC293073FE0047D125 /* JetpackInstallStepTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JetpackInstallStepTests.swift; sourceTree = ""; }; @@ -7020,7 +7018,6 @@ B55D4C0420B6026700D7A50F /* Authentication */ = { isa = PBXGroup; children = ( - EE54C88F2946F12600A9BF61 /* Application password */, DE2FE5842925D9040018040A /* Jetpack Setup */, AEB4DB95290AE72D00AE4340 /* WebAuth */, D881A318256B5C9C00FE5605 /* Navigation Exceptions */, @@ -9039,14 +9036,6 @@ path = "In-Person Payments"; sourceTree = ""; }; - EE54C88F2946F12600A9BF61 /* Application password */ = { - isa = PBXGroup; - children = ( - EE54C8902946F14B00A9BF61 /* ApplicationPasswordUseCase.swift */, - ); - path = "Application password"; - sourceTree = ""; - }; EE6BAAB428EF093D0099288E /* me */ = { isa = PBXGroup; children = ( @@ -10497,7 +10486,6 @@ 0386CFEB2852108B00134466 /* PaymentMethodsHostingController.swift in Sources */, B56DB3CA2049BFAA00D4AA8E /* AppDelegate.swift in Sources */, 451750B224470CD5004FDA65 /* EnhancedTextView.swift in Sources */, - EE54C8912946F14B00A9BF61 /* ApplicationPasswordUseCase.swift in Sources */, 02279586237A50C900787C63 /* AztecUnorderedListFormatBarCommand.swift in Sources */, E1E125B226EB8EE80068A9B0 /* UpdateProgressImage.swift in Sources */, B5A82EE7210263460053ADC8 /* UIViewController+Helpers.swift in Sources */, From 9a3fc9e87f5f4443bcceaf62dfd2d017f50fa92b Mon Sep 17 00:00:00 2001 From: Sharma Elanthiraiyan Date: Mon, 12 Dec 2022 14:31:35 +0530 Subject: [PATCH 4/4] Update comments to fix grammar. --- .../ApplicationPassword/ApplicationPasswordUseCase.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Networking/Networking/ApplicationPassword/ApplicationPasswordUseCase.swift b/Networking/Networking/ApplicationPassword/ApplicationPasswordUseCase.swift index 81a3f02d521..908146c5ed2 100644 --- a/Networking/Networking/ApplicationPassword/ApplicationPasswordUseCase.swift +++ b/Networking/Networking/ApplicationPassword/ApplicationPasswordUseCase.swift @@ -24,7 +24,7 @@ protocol ApplicationPasswordUseCase { /// Deletes the application password /// - /// Deletes locally and also send a API request to delete it from the site + /// Deletes locally and also sends an API request to delete it from the site /// func deletePassword() async throws }