Skip to content

Commit 1703386

Browse files
authored
Support login custom parameter for github. (#607)
1 parent ca06200 commit 1703386

File tree

5 files changed

+74
-19
lines changed

5 files changed

+74
-19
lines changed

javascript/widgets/config.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -551,11 +551,14 @@ firebaseui.auth.widget.Config.prototype.getProviderCustomParameters =
551551
if (goog.isObject(customParameters)) {
552552
// Clone original custom parameters.
553553
var clonedCustomParameters = goog.object.clone(customParameters);
554-
// Delete login_hint from provider (only Google supports it) as it could
555-
// break the flow.
554+
// Delete login_hint from Google provider as it could break the flow.
556555
if (providerId === firebase.auth.GoogleAuthProvider.PROVIDER_ID) {
557556
delete clonedCustomParameters['login_hint'];
558557
}
558+
// Delete login from GitHub provider as it could break the flow.
559+
if (providerId === firebase.auth.GithubAuthProvider.PROVIDER_ID) {
560+
delete clonedCustomParameters['login'];
561+
}
559562
return clonedCustomParameters;
560563
}
561564
return null;

javascript/widgets/config_test.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ function setUp() {
5050
});
5151
firebase.auth = {
5252
GoogleAuthProvider: {PROVIDER_ID: 'google.com'},
53+
GithubAuthProvider: {PROVIDER_ID: 'github.com'},
5354
FacebookAuthProvider: {PROVIDER_ID: 'facebook.com'},
5455
EmailAuthProvider: {
5556
EMAIL_LINK_SIGN_IN_METHOD: 'emailLink',
@@ -574,6 +575,25 @@ function testGetProviderCustomParameters_multipleIdp() {
574575
}
575576

576577

578+
function testGetProviderCustomParameters_github() {
579+
config.update('signInOptions', [
580+
{
581+
'provider': 'github.com',
582+
'customParameters': {
583+
'allow_signup': 'false',
584+
'login': '[email protected]'
585+
}
586+
}
587+
]);
588+
// login custom parameter should be deleted.
589+
assertObjectEquals(
590+
{
591+
'allow_signup': 'false'
592+
},
593+
config.getProviderCustomParameters('github.com'));
594+
}
595+
596+
577597
function testIsAccountSelectionPromptEnabled_googleLoginHint() {
578598
config.update('signInOptions', [
579599
{

javascript/widgets/handler/common.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -811,11 +811,13 @@ firebaseui.auth.widget.handler.common.getAuthProvider_ = function(
811811
// set and if the provider supports it, add it to the custom paramaters.
812812
if (opt_email) {
813813
var loginHintKey;
814+
// Since the name of the parameter is known for Google and GitHub, set this
815+
// automatically. Google and GitHub are the only default providers which
816+
// support a login hint.
814817
if (providerId == firebase.auth.GoogleAuthProvider.PROVIDER_ID) {
815-
// Since the name of the parameter is known for Google, set this
816-
// automatically. Google is the only default provider which supports a
817-
// login hint.
818818
loginHintKey = 'login_hint';
819+
} else if (providerId == firebase.auth.GithubAuthProvider.PROVIDER_ID) {
820+
loginHintKey = 'login';
819821
} else {
820822
// For other providers, check if the name is set in the configuration.
821823
var providerConfig = app.getConfig().getConfigForProvider(providerId);

javascript/widgets/handler/federatedlinking_test.js

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,22 @@ function testHandleFederatedLinking() {
7171
}
7272

7373

74+
function testHandleFederatedLinking_githubLoginHint() {
75+
// The login custom parameter should automatically be passed to the
76+
// github.com provider.
77+
var expectedProvider =
78+
getExpectedProviderWithCustomParameters(
79+
'github.com', {'login': federatedAccount.getEmail()});
80+
setPendingEmailCredentials();
81+
firebaseui.auth.widget.handler.handleFederatedLinking(
82+
app, container, federatedAccount.getEmail(), 'github.com');
83+
assertFederatedLinkingPage(federatedAccount.getEmail());
84+
submitForm();
85+
testAuth.assertSignInWithRedirect([expectedProvider]);
86+
return testAuth.process();
87+
}
88+
89+
7490
function testHandleFederatedLinking_genericLoginHint() {
7591
// Since Microsoft's signInOptions include a loginHintKey definition,
7692
// a login_hint should be set in the customParameters.
@@ -88,13 +104,13 @@ function testHandleFederatedLinking_genericLoginHint() {
88104

89105

90106
function testHandleFederatedLinking_noLoginHint() {
91-
// Since GitHub doesn't support sending a login_hint,
107+
// Since Facebook doesn't support sending a login_hint,
92108
// it should not be set in the customParameters.
93109
var expectedProvider =
94-
getExpectedProviderWithCustomParameters('github.com');
110+
getExpectedProviderWithCustomParameters('facebook.com');
95111
setPendingEmailCredentials();
96112
firebaseui.auth.widget.handler.handleFederatedLinking(
97-
app, container, federatedAccount.getEmail(), 'github.com');
113+
app, container, federatedAccount.getEmail(), 'facebook.com');
98114
assertFederatedLinkingPage(federatedAccount.getEmail());
99115
submitForm();
100116
testAuth.assertSignInWithRedirect([expectedProvider]);
@@ -128,18 +144,18 @@ function testHandleFederatedLinking_genericLoginHint_upgradeAnonymous() {
128144

129145

130146
function testHandleFederatedLinking_noLoginHint_upgradeAnonymous() {
131-
// Since GitHub doesn't support sending a login_hint,
147+
// Since Facebook doesn't support sending a login_hint,
132148
// it should not be set in the customParameters.
133149
var expectedProvider =
134-
getExpectedProviderWithCustomParameters('github.com');
150+
getExpectedProviderWithCustomParameters('facebook.com');
135151
// Simulate pending email credentials.
136152
setPendingEmailCredentials();
137153
// Enable anonymous user upgrade.
138154
app.updateConfig('autoUpgradeAnonymousUsers', true);
139155
// Simulate anonymous user signed in.
140156
externalAuth.setUser(anonymousUser);
141157
firebaseui.auth.widget.handler.handleFederatedLinking(
142-
app, container, federatedAccount.getEmail(), 'github.com');
158+
app, container, federatedAccount.getEmail(), 'facebook.com');
143159
assertFederatedLinkingPage(federatedAccount.getEmail());
144160
submitForm();
145161
// Trigger initial onAuthStateChanged listener.
@@ -221,16 +237,16 @@ function testHandleFederatedLinking_noLoginHint_cordova() {
221237
// Simulate a Cordova environment.
222238
simulateCordovaEnvironment();
223239
var githubCred = createMockCredential({
224-
'providerId': 'github.com',
240+
'providerId': 'facebook.com',
225241
'accessToken': 'ACCESS_TOKEN'
226242
});
227-
// Since GitHub doesn't support sending a login_hint,
243+
// Since Facebook doesn't support sending a login_hint,
228244
// it should not be set in the customParameters.
229245
var expectedProvider =
230-
getExpectedProviderWithCustomParameters('github.com');
246+
getExpectedProviderWithCustomParameters('facebook.com');
231247
setPendingEmailCredentials();
232248
firebaseui.auth.widget.handler.handleFederatedLinking(
233-
app, container, federatedAccount.getEmail(), 'github.com');
249+
app, container, federatedAccount.getEmail(), 'facebook.com');
234250
assertFederatedLinkingPage(federatedAccount.getEmail());
235251
submitForm();
236252
testAuth.assertSignInWithRedirect([expectedProvider]);
@@ -253,7 +269,7 @@ function testHandleFederatedLinking_noLoginHint_cordova() {
253269
'user': testAuth.currentUser,
254270
'credential': credential,
255271
'operationType': 'link',
256-
'additionalUserInfo': {'providerId': 'facebook.com', 'isNewUser': false}
272+
'additionalUserInfo': {'providerId': 'github.com', 'isNewUser': false}
257273
};
258274
// Saved pending credential loaded from storage and linked to current user.
259275
testAuth.currentUser.assertLinkWithCredential(
@@ -284,13 +300,13 @@ function testHandleFederatedLinking_noLoginHint_error_cordova() {
284300
// Test federated linking error flow in a Cordova environment.
285301
// Simulate a Cordova environment.
286302
simulateCordovaEnvironment();
287-
// Since GitHub doesn't support sending a login_hint,
303+
// Since Facebook doesn't support sending a login_hint,
288304
// it should not be set in the customParameters.
289305
var expectedProvider =
290-
getExpectedProviderWithCustomParameters('github.com');
306+
getExpectedProviderWithCustomParameters('facebook.com');
291307
setPendingEmailCredentials();
292308
firebaseui.auth.widget.handler.handleFederatedLinking(
293-
app, container, federatedAccount.getEmail(), 'github.com');
309+
app, container, federatedAccount.getEmail(), 'facebook.com');
294310
assertFederatedLinkingPage(federatedAccount.getEmail());
295311
submitForm();
296312
testAuth.assertSignInWithRedirect([expectedProvider]);

javascript/widgets/handler/federatedsignin_test.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,20 @@ function testHandleFederatedSignIn() {
5050
}
5151

5252

53+
function testHandleFederatedSignIn_githubLoginHint() {
54+
// login custom parameter should be passed to the GitHub provider.
55+
var expectedProvider = getExpectedProviderWithCustomParameters(
56+
'github.com', {'login': '[email protected]'});
57+
firebaseui.auth.widget.handler.handleFederatedSignIn(
58+
app, container, '[email protected]', 'github.com');
59+
assertFederatedLinkingPage();
60+
submitForm();
61+
testAuth.assertSignInWithRedirect(
62+
[expectedProvider]);
63+
return testAuth.process();
64+
}
65+
66+
5367
function testHandleFederatedSignIn_cordova() {
5468
// Test federated sign-in success from a Cordova environment.
5569
// Add additional scopes to test they are properly passed to sign-in method.

0 commit comments

Comments
 (0)