Skip to content

Commit 1b6a295

Browse files
feat: implement API for deleting Twitter user
1 parent 4dbd565 commit 1b6a295

File tree

2 files changed

+52
-6
lines changed

2 files changed

+52
-6
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
//
2+
// AccountService+Twitter.swift
3+
// FirebaseUI
4+
//
5+
// Created by Russell Wheatley on 10/10/2025.
6+
//
7+
8+
@preconcurrency import FirebaseAuth
9+
import FirebaseAuthSwiftUI
10+
import Observation
11+
12+
protocol GoogleOperationReauthentication {
13+
var twitterProvider: TwitterProviderSwift { get }
14+
}
15+
16+
extension GoogleOperationReauthentication {
17+
@MainActor func reauthenticate() async throws -> AuthenticationToken {
18+
guard let user = Auth.auth().currentUser else {
19+
throw AuthServiceError.reauthenticationRequired("No user currently signed-in")
20+
}
21+
22+
do {
23+
let credential = try await twitterProvider.createAuthCredential()
24+
try await user.reauthenticate(with: credential)
25+
26+
return .firebase("")
27+
} catch {
28+
throw AuthServiceError.signInFailed(underlying: error)
29+
}
30+
}
31+
}
32+
33+
@MainActor
34+
class TwitterDeleteUserOperation: AuthenticatedOperation,
35+
@preconcurrency GoogleOperationReauthentication {
36+
let twitterProvider: TwitterProviderSwift
37+
init(twitterProvider: TwitterProviderSwift) {
38+
self.twitterProvider = twitterProvider
39+
}
40+
41+
func callAsFunction(on user: User) async throws {
42+
try await callAsFunction(on: user) {
43+
try await user.delete()
44+
}
45+
}
46+
}

FirebaseSwiftUI/FirebaseTwitterSwiftUI/Sources/Services/TwitterProviderAuthUI.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,21 +44,21 @@ public class TwitterProviderSwift: AuthProviderSwift {
4444
}
4545
}
4646

47-
public class TwitterProviderAuthUI: AuthProviderUI {
47+
public class TwitterProviderAuthUI: AuthProviderUI, DeleteUserSwift {
4848
public var provider: AuthProviderSwift
4949

5050
public init(provider: AuthProviderSwift) {
5151
self.provider = provider
5252
}
5353

54-
public let id: String = "twitter"
54+
public let id: String = "twitter.com"
5555

5656
@MainActor public func authButton() -> AnyView {
5757
AnyView(SignInWithTwitterButton(provider: provider))
5858
}
5959

60-
// TODO: need to implement delete user protocol
61-
// @MainActor public func deleteUser(user _: User) async throws {
62-
// <#code#>
63-
// }
60+
public func deleteUser(user: User) async throws {
61+
let operation = TwitterDeleteUserOperation(twitterProvider: provider as! TwitterProviderSwift)
62+
try await operation(on: user)
63+
}
6464
}

0 commit comments

Comments
 (0)