Skip to content

Commit 82b4df5

Browse files
committed
Rename LoginClient to SelfHostedSiteAuthenticator
1 parent 0a723f0 commit 82b4df5

File tree

4 files changed

+42
-35
lines changed

4 files changed

+42
-35
lines changed

WordPress/Classes/Login/LoginWithUrlView.swift

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import DesignSystem
66

77
struct LoginWithUrlView: View {
88

9-
private let client: LoginClient
9+
private let client: SelfHostedSiteAuthenticator
1010
private let loginCompleted: (WordPressOrgCredentials) -> Void
1111

1212
// Since the anchor is a window that typically is the window this view is presented in,
@@ -22,7 +22,7 @@ struct LoginWithUrlView: View {
2222
}
2323

2424
init(
25-
client: LoginClient,
25+
client: SelfHostedSiteAuthenticator,
2626
anchor: ASPresentationAnchor,
2727
loginCompleted: @escaping (WordPressOrgCredentials) -> Void
2828
) {
@@ -84,17 +84,22 @@ struct LoginWithUrlView: View {
8484
errorMessage = nil
8585
isLoading = true
8686

87-
Task { @MainActor in
88-
let credentials = await client.login(site: urlField, from: anchor)
89-
switch credentials {
90-
case let .success(credentials):
87+
// The Swift compiler isn't happy about placing this do-catch function body inside a Task.
88+
// https://github.com/swiftlang/swift/issues/76807
89+
func login() async {
90+
do {
91+
let credentials = try await client.signIn(site: urlField, from: anchor)
9192
self.loginCompleted(credentials)
92-
case let .failure(error):
93+
} catch {
9394
errorMessage = error.errorMessage
9495
}
9596

9697
isLoading = false
9798
}
99+
100+
Task { @MainActor in
101+
await login()
102+
}
98103
}
99104
}
100105

@@ -103,7 +108,7 @@ private extension LoginWithUrlView {
103108
static var enterSiteAddress: String { NSLocalizedString("addSite.selfHosted.enterSiteAddress", value: "Enter the address of the WordPress site you'd like to connect.", comment: "A message to inform users to type the site address in the text field.") }
104109
}
105110

106-
private extension LoginClient.LoginClientError {
111+
private extension SelfHostedSiteAuthenticator.SignInError {
107112

108113
var errorMessage: String? {
109114
switch self {

WordPress/Classes/Networking/LoginClient.swift renamed to WordPress/Classes/Login/SelfHostedSiteAuthenticator.swift

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ import AuthenticationServices
66
import WordPressKit
77
import WordPressAuthenticator
88

9-
final actor LoginClient {
9+
final actor SelfHostedSiteAuthenticator {
1010

11-
enum LoginClientError: Error {
11+
enum SignInError: Error {
1212
case authentication(WordPressLoginClient.Error)
1313
case loadingSiteInfoFailure
1414
case savingSiteFailure
@@ -27,7 +27,7 @@ final actor LoginClient {
2727
])
2828
}
2929

30-
private func trackTypedError(_ error: LoginClient.LoginClientError, url: String) {
30+
private func trackTypedError(_ error: SelfHostedSiteAuthenticator.SignInError, url: String) {
3131
DDLogError("Unable to login to \(url): \(error.localizedDescription)")
3232

3333
WPAnalytics.track(.applicationPasswordLogin, properties: [
@@ -38,7 +38,19 @@ final actor LoginClient {
3838
}
3939

4040
@MainActor
41-
func login(site: String, from anchor: ASPresentationAnchor?) async -> Result<WordPressOrgCredentials, LoginClientError> {
41+
func signIn(site: String, from anchor: ASPresentationAnchor?) async throws(SignInError) -> WordPressOrgCredentials {
42+
do {
43+
let result = try await _signIn(site: site, from: anchor)
44+
await trackSuccess(url: site)
45+
return result
46+
} catch {
47+
await trackTypedError(error, url: site)
48+
throw error
49+
}
50+
}
51+
52+
@MainActor
53+
private func _signIn(site: String, from anchor: ASPresentationAnchor?) async throws(SignInError) -> WordPressOrgCredentials {
4254
let appId: WpUuid
4355
let appName: String
4456

@@ -61,39 +73,29 @@ final actor LoginClient {
6173
contextProvider: WebAuthenticationPresentationAnchorProvider(anchor: anchor ?? ASPresentationAnchor())
6274
)
6375

64-
let returnValue: Result<WordPressOrgCredentials, LoginClientError>
6576
switch result {
6677
case let .failure(error):
67-
returnValue = .failure(.authentication(error))
78+
throw .authentication(error)
6879
case let .success(success):
69-
returnValue = await handleSuccess(success)
80+
return try await handleSuccess(success)
7081
}
71-
72-
switch returnValue {
73-
case .success:
74-
await trackSuccess(url: site)
75-
case let .failure(error):
76-
await trackTypedError(error, url: site)
77-
}
78-
79-
return returnValue
8082
}
8183

82-
func handleSuccess(_ success: WpApiApplicationPasswordDetails) async -> Result<WordPressOrgCredentials, LoginClientError> {
84+
func handleSuccess(_ success: WpApiApplicationPasswordDetails) async throws(SignInError) -> WordPressOrgCredentials {
8385
let xmlrpc: String
8486
let blogOptions: [AnyHashable: Any]
8587
do {
8688
xmlrpc = try success.derivedXMLRPCRoot.absoluteString
8789
blogOptions = try await loadSiteOptions(details: success)
8890
} catch {
89-
return .failure(.loadingSiteInfoFailure)
91+
throw .loadingSiteInfoFailure
9092
}
9193

9294
// Only store the new site after credentials are validated.
9395
do {
9496
let _ = try await Blog.createRestApiBlog(with: success, in: ContextManager.shared)
9597
} catch {
96-
return .failure(.savingSiteFailure)
98+
throw .savingSiteFailure
9799
}
98100

99101
let wporg = WordPressOrgCredentials(
@@ -102,7 +104,7 @@ final actor LoginClient {
102104
xmlrpc: xmlrpc,
103105
options: blogOptions
104106
)
105-
return .success(wporg)
107+
return wporg
106108
}
107109

108110
private func loadSiteOptions(details: WpApiApplicationPasswordDetails) async throws -> [AnyHashable: Any] {

WordPress/Classes/ViewRelated/Blog/Site Picker/AddSiteController.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ struct AddSiteController {
4242
guard let window = viewController.view.window else {
4343
return wpAssertionFailure("window missing")
4444
}
45-
let client = LoginClient(session: URLSession(configuration: .ephemeral))
45+
let client = SelfHostedSiteAuthenticator(session: URLSession(configuration: .ephemeral))
4646
let view = LoginWithUrlView(client: client, anchor: window) { [weak viewController] credentials in
4747
viewController?.dismiss(animated: true)
4848
WordPressAuthenticator.shared.delegate!.sync(credentials: .init(wporg: credentials)) {

WordPress/WordPress.xcodeproj/project.pbxproj

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -996,8 +996,8 @@
996996
24CED4032C73E267005A1E1D /* ExperimentalFeaturesDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24CED4022C73E266005A1E1D /* ExperimentalFeaturesDataProvider.swift */; };
997997
24CED4042C73E267005A1E1D /* ExperimentalFeaturesDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24CED4022C73E266005A1E1D /* ExperimentalFeaturesDataProvider.swift */; };
998998
24D0854C2C87B0D7006A215C /* AppStyleGuide.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD2538E26116A1600EDAF88 /* AppStyleGuide.swift */; };
999-
24DB7C132C5AEF0600A0FE92 /* LoginClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24DB7C122C5AEF0500A0FE92 /* LoginClient.swift */; };
1000-
24DB7C142C5AEF0600A0FE92 /* LoginClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24DB7C122C5AEF0500A0FE92 /* LoginClient.swift */; };
999+
24DB7C132C5AEF0600A0FE92 /* SelfHostedSiteAuthenticator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24DB7C122C5AEF0500A0FE92 /* SelfHostedSiteAuthenticator.swift */; };
1000+
24DB7C142C5AEF0600A0FE92 /* SelfHostedSiteAuthenticator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24DB7C122C5AEF0500A0FE92 /* SelfHostedSiteAuthenticator.swift */; };
10011001
24DB7C162C5AFA7200A0FE92 /* WordPressClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24DB7C152C5AFA7200A0FE92 /* WordPressClient.swift */; };
10021002
24DB7C172C5AFA7200A0FE92 /* WordPressClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24DB7C152C5AFA7200A0FE92 /* WordPressClient.swift */; };
10031003
24DB7C192C5AFC0700A0FE92 /* ApplicationPasswordService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24DB7C182C5AFC0600A0FE92 /* ApplicationPasswordService.swift */; };
@@ -6855,7 +6855,7 @@
68556855
24C69AC12612467C00312D9A /* UserSettingsTestsObjc.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UserSettingsTestsObjc.m; sourceTree = "<group>"; };
68566856
24CDE3402C5863A1005E5E43 /* TestKeychain.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestKeychain.swift; sourceTree = "<group>"; };
68576857
24CED4022C73E266005A1E1D /* ExperimentalFeaturesDataProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExperimentalFeaturesDataProvider.swift; sourceTree = "<group>"; };
6858-
24DB7C122C5AEF0500A0FE92 /* LoginClient.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoginClient.swift; sourceTree = "<group>"; };
6858+
24DB7C122C5AEF0500A0FE92 /* SelfHostedSiteAuthenticator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelfHostedSiteAuthenticator.swift; sourceTree = "<group>"; };
68596859
24DB7C152C5AFA7200A0FE92 /* WordPressClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WordPressClient.swift; sourceTree = "<group>"; };
68606860
24DB7C182C5AFC0600A0FE92 /* ApplicationPasswordService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ApplicationPasswordService.swift; sourceTree = "<group>"; };
68616861
24F3789725E6E62100A27BB7 /* NSManagedObject+Lookup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSManagedObject+Lookup.swift"; sourceTree = "<group>"; };
@@ -13186,6 +13186,7 @@
1318613186
isa = PBXGroup;
1318713187
children = (
1318813188
4ADE3F802C619E8A0046EC8A /* LoginWithUrlView.swift */,
13189+
24DB7C122C5AEF0500A0FE92 /* SelfHostedSiteAuthenticator.swift */,
1318913190
4A9672AE2C7E84B200337176 /* WordPressDotComAuthenticator.swift */,
1319013191
);
1319113192
path = Login;
@@ -14487,7 +14488,6 @@
1448714488
850BD4531922F95C0032F3AD /* Networking */ = {
1448814489
isa = PBXGroup;
1448914490
children = (
14490-
24DB7C122C5AEF0500A0FE92 /* LoginClient.swift */,
1449114491
F1450CF42437E1A600A28BFE /* MediaHost.swift */,
1449214492
F11C9F75243B3C5E00921DDC /* MediaHost+AbstractPost.swift */,
1449314493
F11C9F73243B3C3E00921DDC /* MediaHost+Blog.swift */,
@@ -21476,7 +21476,7 @@
2147621476
7E4123CC20F418A500DF8486 /* ActivityActionsParser.swift in Sources */,
2147721477
FAB37D4627ED84BC00CA993C /* DashboardStatsNudgeView.swift in Sources */,
2147821478
17F0E1DA20EBDC0A001E9514 /* Routes+Me.swift in Sources */,
21479-
24DB7C132C5AEF0600A0FE92 /* LoginClient.swift in Sources */,
21479+
24DB7C132C5AEF0600A0FE92 /* SelfHostedSiteAuthenticator.swift in Sources */,
2148021480
D83CA3AB20842E5F0060E310 /* StockPhotosResultsPage.swift in Sources */,
2148121481
80EF928A280D28140064A971 /* Atomic.swift in Sources */,
2148221482
8BA77BCF2483415400E1EBBF /* ReaderDetailToolbar.swift in Sources */,
@@ -26209,7 +26209,7 @@
2620926209
FABB25F52602FC2C00C8785C /* FilterableCategoriesViewController.swift in Sources */,
2621026210
0C14F9752C8A48C90084E5C0 /* ReaderSubscriptionsView.swift in Sources */,
2621126211
FABB25F62602FC2C00C8785C /* Post+CoreDataProperties.swift in Sources */,
26212-
24DB7C142C5AEF0600A0FE92 /* LoginClient.swift in Sources */,
26212+
24DB7C142C5AEF0600A0FE92 /* SelfHostedSiteAuthenticator.swift in Sources */,
2621326213
FABB25F72602FC2C00C8785C /* BasePost.swift in Sources */,
2621426214
FABB25F82602FC2C00C8785C /* NotificationContentRange.swift in Sources */,
2621526215
FABB25FA2602FC2C00C8785C /* ImmuTable.swift in Sources */,

0 commit comments

Comments
 (0)