Skip to content

Commit

Permalink
stream totp enabled/disabled event
Browse files Browse the repository at this point in the history
  • Loading branch information
yash-rajpal committed Feb 12, 2025
1 parent e0f092e commit 777f399
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 6 deletions.
13 changes: 11 additions & 2 deletions apps/meteor/app/2fa/server/methods/disable.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import type { ServerMethods } from '@rocket.chat/ddp-client';
import { Users } from '@rocket.chat/models';
import { Meteor } from 'meteor/meteor';

import { notifyOnUserChange } from '../../../lib/server/lib/notifyListener';
import { TOTP } from '../lib/totp';

declare module '@rocket.chat/ddp-client' {
Expand All @@ -26,7 +27,7 @@ Meteor.methods<ServerMethods>({
});
}

if (!user.services?.totp) {
if (!user.services?.totp?.enabled) {
return false;
}

Expand All @@ -41,6 +42,14 @@ Meteor.methods<ServerMethods>({
return false;
}

return (await Users.disable2FAByUserId(userId)).modifiedCount > 0;
const { modifiedCount } = await Users.disable2FAByUserId(userId);

if (!modifiedCount) {
return false;
}

void notifyOnUserChange({ clientAction: 'updated', id: user._id, diff: { 'services.totp.enabled': false } });

return true;
},
});
11 changes: 8 additions & 3 deletions apps/meteor/app/2fa/server/methods/validateTempToken.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import type { ServerMethods } from '@rocket.chat/ddp-client';
import { Users } from '@rocket.chat/models';
import { Meteor } from 'meteor/meteor';

import { notifyOnUserChangeAsync } from '../../../lib/server/lib/notifyListener';
import { notifyOnUserChange, notifyOnUserChangeAsync } from '../../../lib/server/lib/notifyListener';
import { TOTP } from '../lib/totp';

declare module '@rocket.chat/ddp-client' {
Expand Down Expand Up @@ -56,13 +56,18 @@ Meteor.methods<ServerMethods>({
if (!this.userId) {
return;
}
const userTokens = await Users.findOneById(this.userId, { projection: { 'services.resume.loginTokens': 1 } });
const user = await Users.findOneById(this.userId, { projection: { 'services.resume.loginTokens': 1, 'services.totp': 1 } });
return {
clientAction: 'updated',
id: this.userId,
diff: { 'services.resume.loginTokens': userTokens?.services?.resume?.loginTokens },
diff: {
'services.resume.loginTokens': user?.services?.resume?.loginTokens,
...(user?.services?.totp && { 'services.totp.enabled': user.services.totp.enabled }),
},
};
});
} else {
void notifyOnUserChange({ clientAction: 'updated', id: user._id, diff: { 'services.totp.enabled': true } });
}
}

Expand Down
5 changes: 4 additions & 1 deletion apps/meteor/client/views/account/security/TwoFactorTOTP.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -92,12 +92,13 @@ const TwoFactorTOTP = (props: TwoFactorTOTPProps): ReactElement => {
return dispatchToastMessage({ type: 'error', message: t('Invalid_two_factor_code') });
}

setRegisteringTotp(false);
setModal(<BackupCodesModal codes={result.codes} onClose={closeModal} />);
} catch (error) {
dispatchToastMessage({ type: 'error', message: error });
}
},
[closeModal, dispatchToastMessage, setModal, t, verifyCodeFn],
[closeModal, dispatchToastMessage, setModal, t, verifyCodeFn, setRegisteringTotp],
);

const handleRegenerateCodes = useCallback(() => {
Expand All @@ -117,6 +118,8 @@ const TwoFactorTOTP = (props: TwoFactorTOTPProps): ReactElement => {
setModal(<TwoFactorTotpModal onConfirm={onRegenerate} onClose={closeModal} />);
}, [closeModal, dispatchToastMessage, regenerateCodesFn, setModal, t]);

console.log({ user });

return (
<Box display='flex' flexDirection='column' alignItems='flex-start' {...props}>
<Margins blockEnd={8}>
Expand Down

0 comments on commit 777f399

Please sign in to comment.