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/methods/regenerateCodes.js

32 lines
759 B

import { Meteor } from 'meteor/meteor';
import { Users } from '../../../models';
import { TOTP } from '../lib/totp';
Meteor.methods({
'2fa:regenerateCodes'(userToken) {
if (!Meteor.userId()) {
throw new Meteor.Error('not-authorized');
}
const user = Meteor.user();
if (!user.services || !user.services.totp || !user.services.totp.enabled) {
throw new Meteor.Error('invalid-totp');
}
const verified = TOTP.verify({
secret: user.services.totp.secret,
token: userToken,
userId: Meteor.userId(),
backupTokens: user.services.totp.hashedBackup,
});
if (verified) {
const { codes, hashedCodes } = TOTP.generateCodes();
Users.update2FABackupCodesByUserId(Meteor.userId(), hashedCodes);
return { codes };
}
},
});