aboutsummaryrefslogtreecommitdiffhomepage
path: root/Firebase/Database/Login
diff options
context:
space:
mode:
authorGravatar Ryan Wilson <wilsonryan@google.com>2017-08-04 15:42:14 -0700
committerGravatar GitHub <noreply@github.com>2017-08-04 15:42:14 -0700
commit6e00706604c3452ad44fc401e4195e0462da1db1 (patch)
tree5f660ad33321c862ead8ed2ecb4da5333ca5040f /Firebase/Database/Login
parent84c21ce80db8251703966e10b12c1b39d9099f12 (diff)
Move Auth notification constant into Core. (#155)
* Move Auth notification constant into Core. SDKs that want to listen for the internal Auth notifications needed to copy the notification strings to their own SDK instead of relying on Auth's definition in order to avoid a dependency on Auth. By moving them to Core, SDKs can use the constants without taking on another dependency. * Remove Auth stub, add app instance to notification.
Diffstat (limited to 'Firebase/Database/Login')
-rw-r--r--Firebase/Database/Login/FAuthTokenProvider.h4
-rw-r--r--Firebase/Database/Login/FAuthTokenProvider.m75
2 files changed, 13 insertions, 66 deletions
diff --git a/Firebase/Database/Login/FAuthTokenProvider.h b/Firebase/Database/Login/FAuthTokenProvider.h
index dca0026..363b82f 100644
--- a/Firebase/Database/Login/FAuthTokenProvider.h
+++ b/Firebase/Database/Login/FAuthTokenProvider.h
@@ -19,6 +19,8 @@
#import "FTypedefs.h"
#import "FTypedefs_Private.h"
+@class FIRApp;
+
@protocol FAuthTokenProvider <NSObject>
- (void) fetchTokenForcingRefresh:(BOOL)forceRefresh withCallback:(fbt_void_nsstring_nserror)callback;
@@ -29,7 +31,7 @@
@interface FAuthTokenProvider : NSObject
-+ (id<FAuthTokenProvider>) authTokenProviderForApp:(id)app;
++ (id<FAuthTokenProvider>) authTokenProviderForApp:(FIRApp *)app;
- (instancetype)init NS_UNAVAILABLE;
diff --git a/Firebase/Database/Login/FAuthTokenProvider.m b/Firebase/Database/Login/FAuthTokenProvider.m
index f3c2a61..8d65609 100644
--- a/Firebase/Database/Login/FAuthTokenProvider.m
+++ b/Firebase/Database/Login/FAuthTokenProvider.m
@@ -16,65 +16,22 @@
#import "FAuthTokenProvider.h"
#import "FUtilities.h"
+#import "FIRAppInternal.h"
#import "FIRLogger.h"
#import "FIRDatabaseQuery_Private.h"
#import "FIRNoopAuthTokenProvider.h"
-static NSString *const FIRAuthStateDidChangeInternalNotification = @"FIRAuthStateDidChangeInternalNotification";
-static NSString *const FIRAuthStateDidChangeInternalNotificationTokenKey = @"FIRAuthStateDidChangeInternalNotificationTokenKey";
-
-
-/**
- * This is a hack that defines all the methods we need from FIRFirebaseApp. At runtime we use reflection to get an
- * actual instance of FIRFirebaseApp. Since protocols don't carry any runtime information and selectors are invoked
- * by name we can write code against this protocol as long as the method signatures of FIRFirebaseApp don't change.
- */
-@protocol FIRFirebaseAppLike <NSObject>
-
-- (void)getTokenForcingRefresh:(BOOL)forceRefresh withCallback:(void (^)(NSString *_Nullable token, NSError *_Nullable error))callback;
-
-@end
-
-
-/**
- * This is a hack that defines all the methods we need from FIRAuth.
- */
-@protocol FIRFirebaseAuthLike <NSObject>
-
-- (id<FIRFirebaseAppLike>) app;
-
-@end
-
-/**
- * This is a hack that copies the definitions of Firebase Auth error codes. If the error codes change in the original code, this
- * will break at runtime due to undefined behavior!
- */
-typedef NS_ENUM(NSUInteger, FIRErrorCode) {
- /*! @var FIRErrorCodeNoAuth
- @brief Represents the case where an auth-related message was sent to a @c FIRFirebaseApp
- instance which has no associated @c FIRAuth instance.
- */
- FIRErrorCodeNoAuth,
-
- /*! @var FIRErrorCodeNoSignedInUser
- @brief Represents the case where an attempt was made to fetch a token when there is no signed
- in user.
- */
- FIRErrorCodeNoSignedInUser,
-};
-
-
@interface FAuthStateListenerWrapper : NSObject
@property (nonatomic, copy) fbt_void_nsstring listener;
-@property (nonatomic, weak) id<FIRFirebaseAppLike> app;
+@property (nonatomic, weak) FIRApp *app;
@end
@implementation FAuthStateListenerWrapper
-- (instancetype) initWithListener:(fbt_void_nsstring)listener app:(id<FIRFirebaseAppLike>)app {
+- (instancetype) initWithListener:(fbt_void_nsstring)listener app:(FIRApp *)app {
self = [super init];
if (self != nil) {
self->_listener = listener;
@@ -88,9 +45,9 @@ typedef NS_ENUM(NSUInteger, FIRErrorCode) {
}
- (void) authStateDidChangeNotification:(NSNotification *)notification {
- id<FIRFirebaseAuthLike> auth = notification.object;
- if (auth.app == self->_app) {
- NSDictionary *userInfo = notification.userInfo;
+ NSDictionary *userInfo = notification.userInfo;
+ FIRApp *authApp = userInfo[FIRAuthStateDidChangeInternalNotificationAppKey];
+ if (authApp == self.app) {
NSString *token = userInfo[FIRAuthStateDidChangeInternalNotificationTokenKey];
dispatch_async([FIRDatabaseQuery sharedQueue], ^{
self.listener(token);
@@ -107,17 +64,17 @@ typedef NS_ENUM(NSUInteger, FIRErrorCode) {
@interface FIRFirebaseAuthTokenProvider : NSObject <FAuthTokenProvider>
-@property (nonatomic, strong) id<FIRFirebaseAppLike> app;
+@property (nonatomic, strong) FIRApp *app;
/** Strong references to the auth listeners as they are only weak in FIRFirebaseApp */
@property (nonatomic, strong) NSMutableArray *authListeners;
-- (instancetype) initWithFirebaseApp:(id<FIRFirebaseAppLike>)app;
+- (instancetype) initWithFirebaseApp:(FIRApp *)app;
@end
@implementation FIRFirebaseAuthTokenProvider
-- (instancetype) initWithFirebaseApp:(id<FIRFirebaseAppLike>)app {
+- (instancetype) initWithFirebaseApp:(FIRApp *)app {
self = [super init];
if (self != nil) {
self->_app = app;
@@ -130,19 +87,7 @@ typedef NS_ENUM(NSUInteger, FIRErrorCode) {
// TODO: Don't fetch token if there is no current user
[self.app getTokenForcingRefresh:forceRefresh withCallback:^(NSString * _Nullable token, NSError * _Nullable error) {
dispatch_async([FIRDatabaseQuery sharedQueue], ^{
- if (error != nil) {
- if (error.code == FIRErrorCodeNoAuth) {
- FFLog(@"I-RDB073001", @"Firebase Auth is not configured, not going to use authentication.");
- callback(nil, nil);
- } else if (error.code == FIRErrorCodeNoSignedInUser) {
- // No signed in user is an expected case, callback as success with no token
- callback(nil, nil);
- } else {
- callback(nil, error);
- }
- } else {
- callback(token, nil);
- }
+ callback(token, error);
});
}];
}