The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Rocket.Chat/app/2fa/server/code/PasswordCheckFallback.ts

42 lines
1.0 KiB

import { Accounts } from 'meteor/accounts-base';
import { settings } from '../../../settings/server';
import { ICodeCheck, IProcessInvalidCodeResult } from './ICodeCheck';
import { IUser } from '../../../../definition/IUser';
export class PasswordCheckFallback implements ICodeCheck {
public readonly name = 'password';
public isEnabled(user: IUser): boolean {
// TODO: Remove this setting for version 4.0 forcing the
// password fallback for who has password set.
if (settings.get('Accounts_TwoFactorAuthentication_Enforce_Password_Fallback')) {
return user.services?.password?.bcrypt != null;
}
return false;
}
public verify(user: IUser, code: string): boolean {
if (!this.isEnabled(user)) {
return false;
}
const passCheck = Accounts._checkPassword(user, {
digest: code.toLowerCase(),
algorithm: 'sha-256',
});
if (passCheck.error) {
return false;
}
return true;
}
public processInvalidCode(): IProcessInvalidCodeResult {
return {
codeGenerated: false,
};
}
}