Skip to content

Commit 0410fb8

Browse files
Merge branch 'main' into ui-tweaks
2 parents 0702988 + 0a5962f commit 0410fb8

File tree

13 files changed

+295
-105
lines changed

13 files changed

+295
-105
lines changed
Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,47 @@
11

2+
import FirebaseAuth
23
import SwiftUI
34

5+
public struct AccountMergeConflictContext: LocalizedError {
6+
public let credential: AuthCredential
7+
public let underlyingError: Error
8+
public let message: String
9+
// TODO: - should make this User type once fixed upstream in firebase-ios-sdk. See: https://github.com/firebase/FirebaseUI-iOS/pull/1247#discussion_r2085455355
10+
public let uid: String?
11+
12+
public var errorDescription: String? {
13+
return message
14+
}
15+
}
16+
417
public enum AuthServiceError: LocalizedError {
5-
case invalidEmailLink
6-
case notConfiguredProvider(String)
18+
case noCurrentUser
19+
case invalidEmailLink(String)
720
case clientIdNotFound(String)
8-
case notConfiguredActionCodeSettings
21+
case notConfiguredActionCodeSettings(String)
922
case reauthenticationRequired(String)
1023
case invalidCredentials(String)
1124
case signInFailed(underlying: Error)
25+
case accountMergeConflict(context: AccountMergeConflictContext)
1226

1327
public var errorDescription: String? {
1428
switch self {
15-
case .invalidEmailLink:
16-
return "Invalid sign in link. Most likely, the link you used has expired. Try signing in again."
17-
case let .notConfiguredProvider(description):
29+
case .noCurrentUser:
30+
return "No user is currently signed in."
31+
case let .invalidEmailLink(description):
1832
return description
1933
case let .clientIdNotFound(description):
2034
return description
21-
case .notConfiguredActionCodeSettings:
22-
return "ActionCodeSettings has not been configured for `AuthConfiguration.emailLinkSignInActionCodeSettings`"
35+
case let .notConfiguredActionCodeSettings(description):
36+
return description
2337
case let .reauthenticationRequired(description):
2438
return description
2539
case let .invalidCredentials(description):
2640
return description
2741
case let .signInFailed(underlying: error):
2842
return "Failed to sign in: \(error.localizedDescription)"
43+
case let .accountMergeConflict(context):
44+
return context.errorDescription
2945
}
3046
}
3147
}

FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Services/AccountService+Email.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ protocol EmailPasswordOperationReauthentication {
66
}
77

88
extension EmailPasswordOperationReauthentication {
9-
func reauthenticate() async throws -> AuthenticationToken {
9+
// TODO: - @MainActor because User is non-sendable. Might change this once User is sendable in firebase-ios-sdk
10+
@MainActor func reauthenticate() async throws -> AuthenticationToken {
1011
guard let user = Auth.auth().currentUser else {
1112
throw AuthServiceError.reauthenticationRequired("No user currently signed-in")
1213
}
@@ -28,6 +29,7 @@ extension EmailPasswordOperationReauthentication {
2829
}
2930
}
3031

32+
@MainActor
3133
class EmailPasswordDeleteUserOperation: AuthenticatedOperation,
3234
EmailPasswordOperationReauthentication {
3335
let passwordPrompt: PasswordPromptCoordinator

FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Services/AccountService.swift

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,18 @@ extension NSError {
1111
}
1212
}
1313

14-
enum AuthenticationToken {
14+
public enum AuthenticationToken {
1515
case apple(ASAuthorizationAppleIDCredential, String)
1616
case firebase(String)
1717
}
1818

19-
protocol AuthenticatedOperation {
19+
@MainActor
20+
public protocol AuthenticatedOperation {
2021
func callAsFunction(on user: User) async throws
2122
func reauthenticate() async throws -> AuthenticationToken
2223
}
2324

24-
extension AuthenticatedOperation {
25+
public extension AuthenticatedOperation {
2526
func callAsFunction(on _: User,
2627
_ performOperation: () async throws -> Void) async throws {
2728
do {

0 commit comments

Comments
 (0)