import React, { lazy, ReactElement, ReactNode, useCallback } from 'react'; import { Roles } from '../../../../app/models/client'; import { IUser } from '../../../../definition/IUser'; import { useLayout } from '../../../contexts/LayoutContext'; import { useSetting } from '../../../contexts/SettingsContext'; import { useUser } from '../../../contexts/UserContext'; import { useReactiveValue } from '../../../hooks/useReactiveValue'; import LayoutWithSidebar from './LayoutWithSidebar'; const AccountSecurityPage = lazy(() => import('../../account/security/AccountSecurityPage')); const TwoFactorAuthSetupCheck = ({ children }: { children: ReactNode }): ReactElement => { const { isEmbedded: embeddedLayout } = useLayout(); const user = useUser() as IUser | null; const tfaEnabled = useSetting('Accounts_TwoFactorAuthentication_Enabled'); const require2faSetup = useReactiveValue( useCallback(() => { // User is already using 2fa if (!user || user?.services?.totp?.enabled || user?.services?.email2fa?.enabled) { return false; } const mandatoryRole = Roles.findOne({ _id: { $in: user.roles }, mandatory2fa: true }); return mandatoryRole !== undefined && tfaEnabled; }, [tfaEnabled, user]), ); if (require2faSetup) { return (
); } return {children}; }; export default TwoFactorAuthSetupCheck;