@@ -1068,6 +1068,7 @@ function handleMultiFactorSignIn(resolver) {
1068
1068
) ;
1069
1069
// Hide phone form (other second factor types could be supported).
1070
1070
$ ( '#multi-factor-phone' ) . addClass ( 'hidden' ) ;
1071
+ $ ( '#multi-factor-totp' ) . addClass ( 'hidden' ) ;
1071
1072
// Show second factor recovery dialog.
1072
1073
$ ( '#multiFactorModal' ) . modal ( ) ;
1073
1074
}
@@ -1086,6 +1087,7 @@ function handleMultiFactorSignIn(resolver) {
1086
1087
function showMultiFactors ( $listGroup , multiFactorInfo , onClick , onDelete ) {
1087
1088
// Append entry to list.
1088
1089
$listGroup . empty ( ) ;
1090
+ console . log ( "showMultiFactors" ) ;
1089
1091
$ . each ( multiFactorInfo , i => {
1090
1092
// Append entry to list.
1091
1093
const info = multiFactorInfo [ i ] ;
@@ -1133,7 +1135,9 @@ function showMultiFactors($listGroup, multiFactorInfo, onClick, onDelete) {
1133
1135
function onSelectMultiFactorHint ( index ) {
1134
1136
// Hide all forms for handling each type of second factors.
1135
1137
// Currently only phone is supported.
1138
+ console . log ( "onSelectMultiFactorHint called" , multiFactorErrorResolver . hints [ index ] . factorId ) ;
1136
1139
$ ( '#multi-factor-phone' ) . addClass ( 'hidden' ) ;
1140
+ $ ( '#multi-factor-totp' ) . addClass ( 'hidden' ) ;
1137
1141
if (
1138
1142
! multiFactorErrorResolver ||
1139
1143
typeof multiFactorErrorResolver . hints [ index ] === 'undefined'
@@ -1154,7 +1158,14 @@ function onSelectMultiFactorHint(index) {
1154
1158
$ ( '#multi-factor-sign-in-verification-id' ) . val ( '' ) ;
1155
1159
$ ( '#multi-factor-sign-in-verification-code' ) . val ( '' ) ;
1156
1160
} else if ( multiFactorErrorResolver . hints [ index ] . factorId === 'totp' ) {
1157
- alertError ( 'Working on Totp' ) ;
1161
+ // Save selected second factor.
1162
+ selectedMultiFactorHint = multiFactorErrorResolver . hints [ index ] ;
1163
+
1164
+ // Show sign-in with totp second factor menu.
1165
+ $ ( '#multi-factor-totp' ) . removeClass ( 'hidden' ) ;
1166
+ // Clear all input.
1167
+ $ ( '#multi-factor-totp-sign-in-verification-code' ) . val ( '' ) ;
1168
+ console . log ( "code" , $ ( '#multi-factor-totp-sign-in-verification-code' ) . val ( ) ) ;
1158
1169
}
1159
1170
else {
1160
1171
// 2nd factor not found or not supported by app.
@@ -1210,6 +1221,28 @@ function onFinalizeSignInWithPhoneMultiFactor(event) {
1210
1221
} , onAuthError ) ;
1211
1222
}
1212
1223
1224
+ /**
1225
+ * Completes sign-in with the 2nd factor totp assertion.
1226
+ * @param {!jQuery.Event } event The jQuery event object.
1227
+ */
1228
+ function onFinalizeSignInWithTotpMultiFactor ( event ) {
1229
+ event . preventDefault ( ) ;
1230
+ // Make sure a second factor is selected.
1231
+ console . log ( selectedMultiFactorHint , multiFactorErrorResolver ) ;
1232
+ const otp = $ ( '#multi-factor-totp-sign-in-verification-code' ) . val ( ) ;
1233
+ console . log ( "otp " , otp ) ;
1234
+ console . log ( $ ( '#multiFactorModal :input' ) ) ;
1235
+ if ( ! otp || ! selectedMultiFactorHint || ! multiFactorErrorResolver ) {
1236
+ return ;
1237
+ }
1238
+
1239
+ const assertion = TotpMultiFactorGenerator . assertionForSignIn ( selectedMultiFactorHint . uid , otp )
1240
+ multiFactorErrorResolver . resolveSignIn ( assertion ) . then ( userCredential => {
1241
+ onAuthUserCredentialSuccess ( userCredential ) ;
1242
+ $ ( '#multiFactorModal' ) . modal ( 'hide' ) ;
1243
+ } , onAuthError )
1244
+ }
1245
+
1213
1246
/**
1214
1247
* Adds a new row to insert an OAuth custom parameter key/value pair.
1215
1248
* @param {!jQuery.Event } _event The jQuery event object.
@@ -1988,6 +2021,14 @@ function initApp() {
1988
2021
$ ( '#sign-in-with-phone-multi-factor' ) . click (
1989
2022
onFinalizeSignInWithPhoneMultiFactor
1990
2023
) ;
2024
+
2025
+
2026
+ // Completes multi-factor sign-in with supplied SMS code.
2027
+ $ ( '#sign-in-with-totp-multi-factor' ) . click (
2028
+ onFinalizeSignInWithTotpMultiFactor
2029
+ ) ;
2030
+
2031
+
1991
2032
// Starts multi-factor enrollment with phone number.
1992
2033
$ ( '#enroll-mfa-verify-phone-number' ) . click ( onStartEnrollWithPhoneMultiFactor ) ;
1993
2034
// Completes multi-factor enrollment with supplied SMS code.
0 commit comments