Skip to content

Commit 537e28b

Browse files
committed
Swapped out kFirebaseAuthProvider* string for FAuthProvider* enum, as it's more readable and promotes better language support.
Note, this is technically a backwards incompatible change, so we might want to put it in a separate version (or get it out before people start using 0.3.0).
1 parent e1fdafd commit 537e28b

13 files changed

+156
-121
lines changed

FirebaseUI/Auth/API/FirebaseAuthConstants.h

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,20 +36,12 @@
3636
#ifndef FirebaseAuthConstants_h
3737
#define FirebaseAuthConstants_h
3838

39-
FOUNDATION_EXPORT NSString *const kFWPRequestType;
40-
41-
FOUNDATION_EXPORT NSString *const kTwitterAuthProvider;
4239
FOUNDATION_EXPORT NSString *const kTwitterApiKey;
4340

44-
FOUNDATION_EXPORT NSString *const kFacebookAuthProvider;
4541
FOUNDATION_EXPORT NSString *const kFacebookAppId;
4642
FOUNDATION_EXPORT NSString *const kFacebookDisplayName;
4743
FOUNDATION_EXPORT NSString *const kFacebookEmailScope;
4844

49-
FOUNDATION_EXPORT NSString *const kGoogleAuthProvider;
50-
51-
FOUNDATION_EXPORT NSString *const kPasswordAuthProvider;
52-
5345
FOUNDATION_EXPORT CGFloat const kHeaderWidth;
5446
FOUNDATION_EXPORT CGFloat const kHeaderHeight;
5547
FOUNDATION_EXPORT CGFloat const kHeaderSpace;
@@ -66,4 +58,11 @@ FOUNDATION_EXPORT CGFloat const kSeparatorWidth;
6658
FOUNDATION_EXPORT CGFloat const kSeparatorHeight;
6759
FOUNDATION_EXPORT CGFloat const kSeparatorSpace;
6860

61+
typedef NS_ENUM(NSInteger, FAuthProvider) {
62+
FAuthProviderFacebook,
63+
FAuthProviderGoogle,
64+
FAuthProviderTwitter,
65+
FAuthProviderPassword
66+
};
67+
6968
#endif /* FirebaseAuthConstants_h */

FirebaseUI/Auth/API/FirebaseAuthProvider.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,10 @@
5454
@property(strong, nonatomic) FAuthData *authData;
5555

5656
/**
57-
* A string which represents the chosen authentication provider.
57+
* An enum which represents the chosen authentication provider.
5858
* See FAuthenticationConstants.h for a full list.
5959
*/
60-
@property(strong, nonatomic) NSString *provider;
60+
@property(nonatomic) FAuthProvider provider;
6161

6262
/**
6363
* FirebaseAuthDelegate delegate to handle all login, logout, and error events

FirebaseUI/Auth/API/FirebaseLoginButton.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,15 +42,15 @@
4242
@interface FirebaseLoginButton : UIButton
4343

4444
/**
45-
* A string representing a valid identity provider (see FirebaseAuthConstants.h for a full list).
45+
* An enum representing a valid identity provider (see FirebaseAuthConstants.h for a full list).
4646
*/
47-
@property(strong, nonatomic) NSString *provider;
47+
@property(nonatomic) FAuthProvider provider;
4848

4949
/**
5050
* Creates a button styled for the appropriate provider.
5151
* @param provider A string representing the desired identity provider to log in with
5252
* @return FirebaseLoginButton
5353
*/
54-
- (instancetype)initWithProvider:(NSString *)provider;
54+
- (instancetype)initWithProvider:(FAuthProvider)provider;
5555

5656
@end

FirebaseUI/Auth/API/FirebaseLoginViewController.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,10 +162,10 @@
162162

163163
/**
164164
* Enables a given identity provider and allows for login and logout actions against it.
165-
* @param provider A string representing the desired identity provider to log in with
165+
* @param provider An enum representing the desired identity provider to log in with
166166
* @return FirebaseLoginViewController
167167
*/
168-
- (instancetype)enableProvider:(NSString *)provider;
168+
- (instancetype)enableProvider:(FAuthProvider)provider;
169169

170170
/**
171171
* Callback that fires when after the controller is dismissed (either on success or on failure).

FirebaseUI/Auth/Implementation/FirebaseAuthConstants.m

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,18 +32,12 @@
3232

3333
#import "FirebaseAuthConstants.h"
3434

35-
NSString *const kTwitterAuthProvider = @"twitter";
3635
NSString *const kTwitterApiKey = @"TwitterApiKey";
3736

38-
NSString *const kFacebookAuthProvider = @"facebook";
3937
NSString *const kFacebookAppId = @"FacebookAppID";
4038
NSString *const kFacebookDisplayName = @"FacebookDisplayName";
4139
NSString *const kFacebookEmailScope = @"email";
4240

43-
NSString *const kGoogleAuthProvider = @"google";
44-
45-
NSString *const kPasswordAuthProvider = @"password";
46-
4741
CGFloat const kHeaderWidth = 258.0f;
4842
CGFloat const kHeaderHeight = 60.0f;
4943
CGFloat const kHeaderSpace = 10.0f;

FirebaseUI/Auth/Implementation/FirebaseFacebookAuthProvider.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ @implementation FirebaseFacebookAuthProvider {
3939
- (instancetype)initWithRef:(Firebase *)ref authDelegate:(id<FirebaseAuthDelegate>)authDelegate {
4040
self = [super initWithRef:ref authDelegate:authDelegate];
4141
if (self) {
42-
self.provider = kFacebookAuthProvider;
42+
self.provider = FAuthProviderFacebook;
4343
[self configureProvider];
4444
}
4545
return self;
@@ -77,7 +77,7 @@ - (void)login {
7777
NSString *accessToken =
7878
[[FBSDKAccessToken currentAccessToken] tokenString];
7979

80-
[self.ref authWithOAuthProvider:kFacebookAuthProvider
80+
[self.ref authWithOAuthProvider:@"facebook"
8181
token:accessToken
8282
withCompletionBlock:^(NSError *error, FAuthData *authData) {
8383
if (error) {

FirebaseUI/Auth/Implementation/FirebaseGoogleAuthProvider.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ - (instancetype)initWithRef:(Firebase *)ref
3939
uiDelegate:(UIViewController<GIDSignInUIDelegate> *)uiDelegate {
4040
self = [super initWithRef:ref authDelegate:authDelegate];
4141
if (self) {
42-
self.provider = kGoogleAuthProvider;
42+
self.provider = FAuthProviderGoogle;
4343
[self configureProvider];
4444
[GIDSignIn sharedInstance].delegate = self;
4545
[GIDSignIn sharedInstance].uiDelegate = uiDelegate;
@@ -79,7 +79,7 @@ - (void)logout {
7979
- (void)signIn:(GIDSignIn *)signIn
8080
didSignInForUser:(GIDGoogleUser *)user
8181
withError:(NSError *)error {
82-
[self.ref authWithOAuthProvider:kGoogleAuthProvider
82+
[self.ref authWithOAuthProvider:@"google"
8383
token:user.authentication.accessToken
8484
withCompletionBlock:^(NSError *error, FAuthData *authData) {
8585
if (error) {

FirebaseUI/Auth/Implementation/FirebaseLoginButton.m

Lines changed: 55 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434

3535
@implementation FirebaseLoginButton
3636

37-
- (instancetype)initWithProvider:(NSString *)provider {
37+
- (instancetype)initWithProvider:(FAuthProvider)provider {
3838
self = [super initWithFrame:CGRectZero];
3939
if (self) {
4040
self.provider = provider;
@@ -45,43 +45,63 @@ - (instancetype)initWithProvider:(NSString *)provider {
4545
return self;
4646
}
4747

48-
- (UIColor *)backgroundColorForProvider:(NSString *)provider {
49-
if ([provider isEqualToString:kGoogleAuthProvider]) {
50-
return [UIColor colorWithRed:221.0f / 255.0f
51-
green:75.0f / 255.0f
52-
blue:57.0f / 255.0f
53-
alpha:255.0f / 255.0f];
54-
} else if ([provider isEqualToString:kFacebookAuthProvider]) {
55-
return [UIColor colorWithRed:59.0f / 255.0f
56-
green:89.0f / 255.0f
57-
blue:152.0f / 255.0f
58-
alpha:255.0f / 255.0f];
59-
} else if ([provider isEqualToString:kTwitterAuthProvider]) {
60-
return [UIColor colorWithRed:0.0f / 255.0f
61-
green:172.0f / 255.0f
62-
blue:237.0f / 255.0f
63-
alpha:255.0f / 255.0f];
64-
} else if ([provider isEqualToString:kPasswordAuthProvider]) {
65-
return [UIColor colorWithRed:22.0f / 255.0f
66-
green:150.0f / 255.0f
67-
blue:243.0f / 255.0f
68-
alpha:255.0f / 255.0f];
69-
} else {
70-
return [UIColor blackColor];
48+
- (UIColor *)backgroundColorForProvider:(FAuthProvider)provider {
49+
switch (provider) {
50+
case FAuthProviderFacebook:
51+
return [UIColor colorWithRed:59.0f / 255.0f
52+
green:89.0f / 255.0f
53+
blue:152.0f / 255.0f
54+
alpha:255.0f / 255.0f];
55+
break;
56+
57+
case FAuthProviderGoogle:
58+
return [UIColor colorWithRed:221.0f / 255.0f
59+
green:75.0f / 255.0f
60+
blue:57.0f / 255.0f
61+
alpha:255.0f / 255.0f];
62+
break;
63+
64+
case FAuthProviderTwitter:
65+
return [UIColor colorWithRed:0.0f / 255.0f
66+
green:172.0f / 255.0f
67+
blue:237.0f / 255.0f
68+
alpha:255.0f / 255.0f];
69+
break;
70+
71+
case FAuthProviderPassword:
72+
return [UIColor colorWithRed:22.0f / 255.0f
73+
green:150.0f / 255.0f
74+
blue:243.0f / 255.0f
75+
alpha:255.0f / 255.0f];
76+
break;
77+
78+
default:
79+
return [UIColor blackColor];
80+
break;
7181
}
7282
}
7383

74-
- (NSString *)titleForProvider:(NSString *)provider {
75-
if ([provider isEqualToString:kGoogleAuthProvider]) {
76-
return @"Google";
77-
} else if ([provider isEqualToString:kFacebookAuthProvider]) {
78-
return @"Facebook";
79-
} else if ([provider isEqualToString:kTwitterAuthProvider]) {
80-
return @"Twitter";
81-
} else if ([provider isEqualToString:kPasswordAuthProvider]) {
82-
return @"Login";
83-
} else {
84-
return @"Unknown Provider";
84+
- (NSString *)titleForProvider:(FAuthProvider)provider {
85+
switch (provider) {
86+
case FAuthProviderFacebook:
87+
return @"Facebook";
88+
break;
89+
90+
case FAuthProviderGoogle:
91+
return @"Google";
92+
break;
93+
94+
case FAuthProviderTwitter:
95+
return @"Twitter";
96+
break;
97+
98+
case FAuthProviderPassword:
99+
return @"Log In";
100+
break;
101+
102+
default:
103+
return @"Unknown Provider";
104+
break;
85105
}
86106
}
87107

FirebaseUI/Auth/Implementation/FirebaseLoginViewController.m

Lines changed: 68 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,12 @@ - (instancetype)initWithRef:(Firebase *)ref;
5151
- (void)viewDidLoad {
5252
[super viewDidLoad];
5353

54+
// Throw an exception if no IDPs are enabled
55+
if (self.passwordAuthProvider == nil && [_socialProviders count] == 0) {
56+
[NSException raise:NSInternalInconsistencyException
57+
format:@"Please enable at least one authentication provider in your FirebaseLoginViewController"];
58+
}
59+
5460
// Add cancel button
5561
UIImage *image = [[UIImage imageNamed:@"ic_clear_18pt"]
5662
imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
@@ -61,22 +67,15 @@ - (void)viewDidLoad {
6167
action:@selector(cancelButtonPressed)
6268
forControlEvents:UIControlEventTouchUpInside];
6369

64-
// If we're already logged in, cancel this
70+
// If we're already logged in, dismiss the view controller and return the currently logged in user
6571
if (_selectedAuthProvider) {
6672
[self dismissViewControllerWithUser:self.currentUser andError:nil];
6773
}
6874

69-
if (self.passwordAuthProvider == nil && [_socialProviders count] == 0) {
70-
NSError *error = [[NSError alloc] initWithDomain:NSStringFromClass(self.class)
71-
code:FAuthenticationErrorInvalidConfiguration
72-
userInfo:nil];
73-
[self dismissViewControllerWithUser:nil andError:error];
74-
}
75-
7675
// Populate email/password view
7776
if (self.passwordAuthProvider != nil) {
7877
FirebaseLoginButton *emailLoginButton =
79-
[[FirebaseLoginButton alloc] initWithProvider:kPasswordAuthProvider];
78+
[[FirebaseLoginButton alloc] initWithProvider:FAuthProviderPassword];
8079
CGRect buttonFrame =
8180
CGRectMake(0, 2 * kTextFieldHeight + 2 * kTextFieldSpace, kButtonWidth, kButtonHeight);
8281
emailLoginButton.frame = buttonFrame;
@@ -98,7 +97,7 @@ - (void)viewDidLoad {
9897
NSUInteger numProviders = [_socialProviders count];
9998
if (numProviders == 0) {
10099
[self.socialView removeFromSuperview];
101-
self.totalHeightConstraint.constant -= (3 * kButtonHeight + 2 * kButtonSpace);
100+
self.totalHeightConstraint.constant -= (3 * kButtonHeight + 3 * kButtonSpace);
102101
} else {
103102
// Add buttons to social view
104103
CGRect buttonFrame = CGRectMake(0, 0, kButtonWidth, kButtonHeight);
@@ -129,31 +128,44 @@ - (void)viewDidLoad {
129128
[self.view layoutIfNeeded];
130129
}
131130

132-
- (instancetype)enableProvider:(NSString *)provider {
133-
if ([provider isEqualToString:kGoogleAuthProvider]) {
134-
if (!self.googleAuthProvider) {
135-
self.googleAuthProvider =
136-
[[FirebaseGoogleAuthProvider alloc] initWithRef:self.ref authDelegate:self uiDelegate:self];
137-
[_socialProviders addObject:self.googleAuthProvider];
138-
}
139-
} else if ([provider isEqualToString:kFacebookAuthProvider]) {
140-
if (!self.facebookAuthProvider) {
141-
self.facebookAuthProvider =
142-
[[FirebaseFacebookAuthProvider alloc] initWithRef:self.ref authDelegate:self];
143-
[_socialProviders addObject:self.facebookAuthProvider];
144-
}
145-
} else if ([provider isEqualToString:kTwitterAuthProvider]) {
146-
if (!self.twitterAuthProvider) {
147-
self.twitterAuthProvider = [[FirebaseTwitterAuthProvider alloc] initWithRef:self.ref
148-
authDelegate:self
149-
twitterDelegate:self];
150-
[_socialProviders addObject:self.twitterAuthProvider];
151-
}
152-
} else if ([provider isEqualToString:kPasswordAuthProvider]) {
153-
if (!self.passwordAuthProvider) {
154-
self.passwordAuthProvider =
155-
[[FirebasePasswordAuthProvider alloc] initWithRef:self.ref authDelegate:self];
156-
}
131+
- (instancetype)enableProvider:(FAuthProvider)provider {
132+
switch (provider) {
133+
case FAuthProviderFacebook:
134+
if (!self.facebookAuthProvider) {
135+
self.facebookAuthProvider =
136+
[[FirebaseFacebookAuthProvider alloc] initWithRef:self.ref authDelegate:self];
137+
[_socialProviders addObject:self.facebookAuthProvider];
138+
}
139+
break;
140+
141+
case FAuthProviderGoogle:
142+
if (!self.googleAuthProvider) {
143+
self.googleAuthProvider =
144+
[[FirebaseGoogleAuthProvider alloc] initWithRef:self.ref authDelegate:self uiDelegate:self];
145+
[_socialProviders addObject:self.googleAuthProvider];
146+
}
147+
break;
148+
149+
case FAuthProviderTwitter:
150+
if (!self.twitterAuthProvider) {
151+
self.twitterAuthProvider = [[FirebaseTwitterAuthProvider alloc] initWithRef:self.ref
152+
authDelegate:self
153+
twitterDelegate:self];
154+
[_socialProviders addObject:self.twitterAuthProvider];
155+
}
156+
break;
157+
158+
case FAuthProviderPassword:
159+
if (!self.passwordAuthProvider) {
160+
self.passwordAuthProvider =
161+
[[FirebasePasswordAuthProvider alloc] initWithRef:self.ref authDelegate:self];
162+
}
163+
break;
164+
165+
default:
166+
[NSException raise:NSInternalInconsistencyException
167+
format:@"Cannot enable non-existent provider!"];
168+
break;
157169
}
158170
return self;
159171
}
@@ -165,17 +177,27 @@ - (void)didDismissWithBlock:(void (^)(FAuthData *user, NSError *error))callback
165177
- (void)loginButtonPressed:(id)button {
166178
if ([button isKindOfClass:[FirebaseLoginButton class]]) {
167179
FirebaseLoginButton *loginButton = (FirebaseLoginButton *)button;
168-
if ([loginButton.provider isEqualToString:kGoogleAuthProvider]) {
169-
[self.googleAuthProvider login];
170-
} else if ([loginButton.provider isEqualToString:kFacebookAuthProvider]) {
171-
[self.facebookAuthProvider login];
172-
} else if ([loginButton.provider isEqualToString:kTwitterAuthProvider]) {
173-
[self.twitterAuthProvider login];
174-
} else if ([loginButton.provider isEqualToString:kPasswordAuthProvider]) {
175-
// We assume that if it wasn't a social provider, it was for email/password
176-
NSString *email = self.emailTextField.text;
177-
NSString *password = self.passwordTextField.text;
178-
[self.passwordAuthProvider loginWithEmail:email andPassword:password];
180+
switch (loginButton.provider) {
181+
case FAuthProviderFacebook:
182+
[self.facebookAuthProvider login];
183+
break;
184+
185+
case FAuthProviderGoogle:
186+
[self.googleAuthProvider login];
187+
break;
188+
189+
case FAuthProviderTwitter:
190+
[self.twitterAuthProvider login];
191+
break;
192+
193+
case FAuthProviderPassword:
194+
[self.passwordAuthProvider loginWithEmail:self.emailTextField.text andPassword:self.passwordTextField.text];
195+
break;
196+
197+
default:
198+
[NSException raise:NSInternalInconsistencyException
199+
format:@"Cannot log in using non-existent provider!"];
200+
break;
179201
}
180202
}
181203
}

0 commit comments

Comments
 (0)