Skip to content

Commit ae603e5

Browse files
committed
Simplify approach
1 parent 1a591ed commit ae603e5

File tree

3 files changed

+20
-54
lines changed

3 files changed

+20
-54
lines changed

FirebaseAuth/Sources/ObjC/FIRRecaptchaBridge.m

Lines changed: 11 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -18,43 +18,23 @@
1818
#import "FirebaseAuth/Sources/Public/FirebaseAuth/FIRRecaptchaBridge.h"
1919
#import "RecaptchaInterop/RecaptchaInterop.h"
2020

21-
void __objc_getClientWithSiteKey(
22-
NSString *siteKey,
23-
Class recaptchaClass,
24-
void (^completionHandler)(id<RCARecaptchaClientProtocol> _Nullable result,
25-
NSError *_Nullable error)) {
26-
SEL selector = NSSelectorFromString(@"getClientWithSiteKey:completion:");
27-
if (recaptchaClass && [recaptchaClass respondsToSelector:selector]) {
28-
void (*funcWithoutTimeout)(id, SEL, NSString *,
29-
void (^)(id<RCARecaptchaClientProtocol> _Nullable recaptchaClient,
30-
NSError *_Nullable error)) =
31-
(void *)[recaptchaClass methodForSelector:selector];
32-
funcWithoutTimeout(recaptchaClass, selector, siteKey,
33-
^(id<RCARecaptchaClientProtocol> _Nonnull client, NSError *_Nullable error) {
34-
if (error) {
35-
completionHandler(nil, error);
36-
} else {
37-
completionHandler(client, nil);
38-
}
39-
});
21+
Class<RCARecaptchaProtocol> _Nonnull __fir_castToRecaptchaProtocolFromClass(Class _Nonnull klass) {
22+
if ([klass conformsToProtocol:@protocol(RCARecaptchaProtocol)]) {
23+
NSLog(@"RCARecaptchaProtocol - true");
4024
} else {
41-
completionHandler(nil, nil); // TODO(ncooke3): Add error just in case.
25+
NSLog(@"RCARecaptchaProtocol - false");
4226
}
27+
return (Class<RCARecaptchaProtocol>)klass;
4328
}
4429

45-
id<RCAActionProtocol> _Nullable __fir_initActionFromClass(Class _Nonnull klass,
46-
NSString *_Nonnull actionString) {
47-
SEL customActionSelector = NSSelectorFromString(@"initWithCustomAction:");
48-
if (klass && [klass instancesRespondToSelector:customActionSelector]) {
49-
id (*funcWithCustomAction)(id, SEL, NSString *) =
50-
(id(*)(id, SEL, NSString *))[klass instanceMethodForSelector:customActionSelector];
51-
52-
id<RCAActionProtocol> customAction =
53-
funcWithCustomAction([klass alloc], customActionSelector, actionString);
54-
return customAction;
30+
Class<RCAActionProtocol> _Nonnull __fir_castToRecaptchaActionProtocolFromClass(
31+
Class _Nonnull klass) {
32+
if ([klass conformsToProtocol:@protocol(RCAActionProtocol)]) {
33+
NSLog(@"RCAActionProtocol - true");
5534
} else {
56-
return nil;
35+
NSLog(@"RCAActionProtocol - false");
5736
}
37+
return (Class<RCAActionProtocol>)klass;
5838
}
5939

6040
#endif

FirebaseAuth/Sources/Public/FirebaseAuth/FIRRecaptchaBridge.h

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,12 @@
1717

1818
#if TARGET_OS_IOS
1919

20-
@protocol RCARecaptchaClientProtocol;
20+
@protocol RCARecaptchaProtocol;
2121
@protocol RCAActionProtocol;
2222

23-
void __objc_getClientWithSiteKey(
24-
NSString *_Nonnull siteKey,
25-
Class _Nonnull recaptchaClass,
26-
void (^_Nonnull completionHandler)(id<RCARecaptchaClientProtocol> _Nullable result,
27-
NSError *_Nullable error));
23+
Class<RCARecaptchaProtocol> _Nonnull __fir_castToRecaptchaProtocolFromClass(Class _Nonnull klass);
2824

29-
id<RCAActionProtocol> _Nullable __fir_initActionFromClass(Class _Nonnull klass,
30-
NSString *_Nonnull actionString);
25+
Class<RCAActionProtocol> _Nonnull __fir_castToRecaptchaActionProtocolFromClass(
26+
Class _Nonnull klass);
3127

3228
#endif

FirebaseAuth/Sources/Swift/Utilities/AuthRecaptchaVerifier.swift

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -177,18 +177,8 @@
177177
} else if let recaptcha = NSClassFromString("Recaptcha") {
178178
// Fall back to attempting to connect with pre-18.7.0 RecaptchaEnterprise.
179179
do {
180-
let client: any RCARecaptchaClientProtocol =
181-
try await withCheckedThrowingContinuation { continuation in
182-
__objc_getClientWithSiteKey(siteKey, recaptcha) { client, error in
183-
if let error {
184-
continuation.resume(throwing: error)
185-
}
186-
if let client {
187-
continuation.resume(returning: client)
188-
}
189-
// TODO(ncooke3): Handle other case.
190-
}
191-
}
180+
let recaptcha = __fir_castToRecaptchaProtocolFromClass(recaptcha)
181+
let client = try await recaptcha.getClient(withSiteKey: siteKey)
192182
recaptchaClient = client
193183
return await retrieveToken(actionString: actionString, fakeToken: fakeToken)
194184
} catch {
@@ -208,10 +198,10 @@
208198
let action = recaptchaAction.init(customAction: actionString)
209199
let token = try? await recaptchaClient!.execute(withAction: action)
210200
return (token ?? "NO_RECAPTCHA", nil, true, true)
211-
} else if
212-
let recaptchaAction = NSClassFromString("RecaptchaAction"),
213-
let action = __fir_initActionFromClass(recaptchaAction, actionString) {
201+
} else if let recaptchaAction = NSClassFromString("RecaptchaAction") {
214202
// Fall back to attempting to connect with pre-18.7.0 RecaptchaEnterprise.
203+
let recaptchaAction = __fir_castToRecaptchaActionProtocolFromClass(recaptchaAction)
204+
let action = recaptchaAction.init(customAction: actionString)
215205
let token = try? await recaptchaClient!.execute(withAction: action)
216206
return (token ?? "NO_RECAPTCHA", nil, true, true)
217207
} else {

0 commit comments

Comments
 (0)