@@ -134,10 +134,14 @@ export class UsersRouter extends ClassesRouter {
134
134
}
135
135
}
136
136
const mfaEnabled = req . config . multiFactorAuth || { } ;
137
- if ( mfaEnabled . enableMfa && recoveryKeys && user . _mfa ) {
137
+ if ( mfaEnabled . enableMfa && recoveryKeys && user . mfaEnabled ) {
138
138
const mfaRecTokens = user . _mfa_recovery ;
139
139
let firstAllowed = false ;
140
140
let secondAllowed = false ;
141
+ const recoveryKeysStr = `${ recoveryKeys } ` ;
142
+ if ( recoveryKeysStr . length < 41 ) {
143
+ throw new Parse . Error ( 210 , 'Invalid MFA recovery tokens' ) ;
144
+ }
141
145
for ( const recToken of mfaRecTokens ) {
142
146
const setAllowedFromMatch = async ( recoveryKey , first ) => {
143
147
const doesMatch = await passwordCrypto . compare ( recoveryKey , recToken ) ;
@@ -150,8 +154,8 @@ export class UsersRouter extends ClassesRouter {
150
154
secondAllowed = true ;
151
155
}
152
156
} ;
153
- await setAllowedFromMatch ( recoveryKeys . substring ( 0 , 20 ) , true ) ;
154
- await setAllowedFromMatch ( recoveryKeys . substring ( 21 , 41 ) ) ;
157
+ await setAllowedFromMatch ( recoveryKeysStr . substring ( 0 , 20 ) , true ) ;
158
+ await setAllowedFromMatch ( recoveryKeysStr . substring ( 21 , 41 ) ) ;
155
159
}
156
160
if ( ! firstAllowed || ! secondAllowed ) {
157
161
throw new Parse . Error ( 210 , 'Invalid MFA recovery tokens' ) ;
0 commit comments