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/packages/rocketchat-2fa/client/TOTPPassword.js

74 lines
1.6 KiB

import { Meteor } from 'meteor/meteor';
import { Accounts } from 'meteor/accounts-base';
import toastr from 'toastr';
function reportError(error, callback) {
if (callback) {
callback(error);
} else {
throw error;
}
}
Meteor.loginWithPasswordAndTOTP = function(selector, password, code, callback) {
if (typeof selector === 'string') {
if (selector.indexOf('@') === -1) {
selector = { username: selector };
} else {
selector = { email: selector };
}
}
Accounts.callLoginMethod({
methodArguments: [{
totp: {
login: {
user: selector,
password: Accounts._hashPassword(password),
},
code,
},
}],
userCallback(error) {
if (error) {
reportError(error, callback);
} else {
callback && callback();
}
},
});
};
const { loginWithPassword } = Meteor;
Meteor.loginWithPassword = function(email, password, cb) {
loginWithPassword(email, password, (error) => {
if (!error || error.error !== 'totp-required') {
return cb(error);
}
modal.open({
title: t('Two-factor_authentication'),
text: t('Open_your_authentication_app_and_enter_the_code'),
type: 'input',
inputType: 'text',
showCancelButton: true,
closeOnConfirm: true,
confirmButtonText: t('Verify'),
cancelButtonText: t('Cancel'),
}, (code) => {
if (code === false) {
return cb();
}
Meteor.loginWithPasswordAndTOTP(email, password, code, (error) => {
if (error && error.error === 'totp-invalid') {
toastr.error(t('Invalid_two_factor_code'));
cb();
} else {
cb(error);
}
});
});
});
};