@oneblink/apps-react 11.0.0-beta.2 → 11.0.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/apps/mfa-service.d.ts +27 -2
- package/dist/apps/mfa-service.js +28 -1
- package/dist/apps/mfa-service.js.map +1 -1
- package/dist/apps/services/AWSCognitoClient.d.ts +7 -6
- package/dist/apps/services/AWSCognitoClient.js +26 -33
- package/dist/apps/services/AWSCognitoClient.js.map +1 -1
- package/dist/apps/services/cognito.d.ts +3 -22
- package/dist/apps/services/cognito.js +1 -30
- package/dist/apps/services/cognito.js.map +1 -1
- package/dist/components/mfa/MfaPhoneNumberDialog.js +10 -14
- package/dist/components/mfa/MfaPhoneNumberDialog.js.map +1 -1
- package/dist/form-elements/FormElementBarcodeScanner.js +65 -18
- package/dist/form-elements/FormElementBarcodeScanner.js.map +1 -1
- package/dist/hooks/useMfa.d.ts +0 -2
- package/dist/hooks/useMfa.js +0 -19
- package/dist/hooks/useMfa.js.map +1 -1
- package/dist/utils/mfa-requirement.js +11 -7
- package/dist/utils/mfa-requirement.js.map +1 -1
- package/package.json +1 -1
package/dist/hooks/useMfa.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMfa.js","sourceRoot":"","sources":["../../src/hooks/useMfa.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { mfaService } from '../apps'\nimport useLoadDataEffect from './useLoadDataEffect'\nimport { MiscTypes } from '@oneblink/types'\n\ntype MfaState = {\n isExternalIdentityProviderUser: boolean\n isLoading: boolean\n isMfaEnabled: boolean\n mfaSettings: mfaService.MfaSettings\n isSetupSuccessOpen: boolean\n loadingError?: Error\n isSettingUpMfa: boolean\n settingUpMfaMethod?: mfaService.MfaMethod\n isSetupMethodDialogOpen: boolean\n disablingMfaMethod?: mfaService.MfaMethod\n isSettingPreferredMfaMethod: boolean\n setupError?: Error\n mfaAuthenticatorAppSetup?: Awaited<\n ReturnType<typeof mfaService.setupMfaAuthenticatorApp>\n >\n isPhoneNumberDialogOpen: boolean\n phoneVerificationCodeSentAt?: number\n isRemovePhoneNumberDialogOpen: boolean\n}\n\nexport const MfaContext = React.createContext<\n MfaState & {\n beginMfaSetup: (mfaMethod: mfaService.MfaMethod) => Promise<void>\n openMfaSetupMethodDialog: () => void\n closeMfaSetupMethodDialog: () => void\n beginDisablingMfaMethod: (mfaMethod: mfaService.MfaMethod) => void\n setPreferredMfaMethod: (mfaMethod: mfaService.MfaMethod) => Promise<void>\n openPhoneNumberDialog: () => void\n closePhoneNumberDialog: () => void\n savePhoneNumber: (phoneNumber: string) => Promise<void>\n verifyPhoneNumber: (code: string) => Promise<void>\n resendPhoneNumberVerificationCode: () => Promise<void>\n beginRemovingPhoneNumber: () => void\n cancelRemovingPhoneNumber: () => void\n completeRemovingPhoneNumber: () => Promise<void>\n hideSetupSuccess: () => void\n cancelMfaAuthenticatorAppSetup: () => void\n completeMfaAuthenticatorAppSetup: () => Promise<void>\n cancelDisablingMfa: () => void\n completeDisablingMfa: () => Promise<void>\n clearMfaSetupError: () => void\n loadMfa: () => void\n }\n>({\n isExternalIdentityProviderUser: false,\n isLoading: true,\n isMfaEnabled: false,\n mfaSettings: mfaService.DEFAULT_MFA_SETTINGS,\n isSetupSuccessOpen: false,\n isSettingUpMfa: false,\n isSetupMethodDialogOpen: false,\n isSettingPreferredMfaMethod: false,\n isPhoneNumberDialogOpen: false,\n isRemovePhoneNumberDialogOpen: false,\n beginMfaSetup: async () => {},\n openMfaSetupMethodDialog: () => {},\n closeMfaSetupMethodDialog: () => {},\n beginDisablingMfaMethod: () => {},\n setPreferredMfaMethod: async () => {},\n openPhoneNumberDialog: () => {},\n closePhoneNumberDialog: () => {},\n savePhoneNumber: async () => {},\n verifyPhoneNumber: async () => {},\n resendPhoneNumberVerificationCode: async () => {},\n beginRemovingPhoneNumber: () => {},\n cancelRemovingPhoneNumber: () => {},\n completeRemovingPhoneNumber: async () => {},\n hideSetupSuccess: () => {},\n cancelMfaAuthenticatorAppSetup: () => {},\n completeMfaAuthenticatorAppSetup: async () => {},\n cancelDisablingMfa: () => {},\n completeDisablingMfa: async () => {},\n clearMfaSetupError: () => {},\n loadMfa: () => {},\n})\n\nfunction getIsMfaEnabled(mfaSettings: mfaService.MfaSettings) {\n return mfaSettings.authenticator.enabled || mfaSettings.sms.enabled\n}\n\nfunction hasPreferredMfaMethod(mfaSettings: mfaService.MfaSettings) {\n return (\n (mfaSettings.authenticator.enabled &&\n mfaSettings.authenticator.preferred) ||\n (mfaSettings.sms.enabled && mfaSettings.sms.preferred)\n )\n}\n\nfunction enableSmsMfaInSettings(\n mfaSettings: mfaService.MfaSettings,\n smsPreferred: boolean,\n): mfaService.MfaSettings {\n return {\n ...mfaSettings,\n sms: {\n ...mfaSettings.sms,\n enabled: true,\n preferred: smsPreferred,\n },\n }\n}\n\nfunction enableAuthenticatorMfaInSettings(\n mfaSettings: mfaService.MfaSettings,\n authenticatorPreferred: boolean,\n): mfaService.MfaSettings {\n return {\n ...mfaSettings,\n authenticator: {\n enabled: true,\n preferred: authenticatorPreferred,\n },\n sms: {\n ...mfaSettings.sms,\n preferred: authenticatorPreferred ? false : mfaSettings.sms.preferred,\n },\n }\n}\n\nfunction setPreferredMfaMethodInSettings(\n mfaSettings: mfaService.MfaSettings,\n mfaMethod: mfaService.MfaMethod,\n): mfaService.MfaSettings {\n return {\n ...mfaSettings,\n authenticator: {\n ...mfaSettings.authenticator,\n preferred: mfaMethod === 'authenticator',\n },\n sms: {\n ...mfaSettings.sms,\n preferred: mfaMethod === 'sms',\n },\n }\n}\n\n/**\n * React Component that provides the context for the\n * `useUserMeetsMfaRequirement()` hook and `<MultiFactorAuthentication />`\n * component, to be used by components further down your component tree. **It\n * should only be included in your component tree once and ideally at the root\n * of the application.**\n *\n * #### Example\n *\n * ```js\n * import * as React from 'react'\n * import {\n * MfaProvider,\n * useUserMeetsMfaRequirement,\n * } from '@oneblink/apps-react'\n *\n * function Component({ teamMemberMfaRequirement }) {\n * const { mfaSetupRequired, isLoading, loadingError, refreshMfa } =\n * useUserMeetsMfaRequirement(teamMemberMfaRequirement)\n *\n * if (isLoading) {\n * return <Loading />\n * }\n *\n * if (loadingError) {\n * return <Error onRetry={refreshMfa} />\n * }\n *\n * if (mfaSetupRequired) {\n * return <ConfigureMfa />\n * }\n *\n * return <Application />\n * }\n *\n * function App({ teamMemberMfaRequirement }) {\n * return (\n * <MfaProvider isExternalIdentityProviderUser={false}>\n * <Component teamMemberMfaRequirement={teamMemberMfaRequirement} />\n * </MfaProvider>\n * )\n * }\n *\n * const root = document.getElementById('root')\n * if (root) {\n * ReactDOM.render(<App teamMemberMfaRequirement={mfaRequirement} />, root)\n * }\n * ```\n *\n * @param props\n * @returns\n * @group Components\n */\nexport function MfaProvider({\n children,\n isExternalIdentityProviderUser,\n}: {\n children: React.ReactNode\n isExternalIdentityProviderUser: boolean\n}) {\n const [state, setState] = React.useState<MfaState>({\n isExternalIdentityProviderUser,\n isLoading: !isExternalIdentityProviderUser,\n isMfaEnabled: false,\n mfaSettings: mfaService.DEFAULT_MFA_SETTINGS,\n isSetupSuccessOpen: false,\n isSettingUpMfa: false,\n isSetupMethodDialogOpen: false,\n isSettingPreferredMfaMethod: false,\n isPhoneNumberDialogOpen: false,\n isRemovePhoneNumberDialogOpen: false,\n })\n\n const handleLoadMfa = React.useCallback(\n async (abortSignal: AbortSignal) => {\n if (isExternalIdentityProviderUser) {\n return\n }\n\n setState((currentState) => ({\n ...currentState,\n isLoading: true,\n isMfaEnabled: false,\n mfaSettings: mfaService.DEFAULT_MFA_SETTINGS,\n loadingError: undefined,\n }))\n try {\n const mfaSettings = await mfaService.getMfaSettings(abortSignal)\n if (!abortSignal.aborted) {\n setState((currentState) => ({\n ...currentState,\n isLoading: false,\n mfaSettings,\n isMfaEnabled: getIsMfaEnabled(mfaSettings),\n }))\n }\n } catch (error) {\n if (abortSignal.aborted) {\n return\n }\n\n setState((currentState) => ({\n ...currentState,\n isLoading: false,\n loadingError: error as Error,\n }))\n }\n },\n [isExternalIdentityProviderUser],\n )\n\n const loadMfa = useLoadDataEffect(handleLoadMfa)\n\n const clearMfaSetupError = React.useCallback(() => {\n setState((currentState) => ({\n ...currentState,\n setupError: undefined,\n }))\n }, [])\n\n const openMfaSetupMethodDialog = React.useCallback(() => {\n setState((currentState) => ({\n ...currentState,\n isSetupMethodDialogOpen: true,\n }))\n }, [])\n\n const closeMfaSetupMethodDialog = React.useCallback(() => {\n setState((currentState) => ({\n ...currentState,\n isSetupMethodDialogOpen: false,\n }))\n }, [])\n\n const hideSetupSuccess = React.useCallback(() => {\n setState((currentState) => ({\n ...currentState,\n isSetupSuccessOpen: false,\n }))\n }, [])\n\n const cancelMfaAuthenticatorAppSetup = React.useCallback(() => {\n setState((currentState) => ({\n ...currentState,\n mfaAuthenticatorAppSetup: undefined,\n settingUpMfaMethod: undefined,\n }))\n }, [])\n\n const completeMfaAuthenticatorAppSetup = React.useCallback(async () => {\n setState((currentState) => {\n const authenticatorPreferred = !hasPreferredMfaMethod(\n currentState.mfaSettings,\n )\n const mfaSettings = enableAuthenticatorMfaInSettings(\n currentState.mfaSettings,\n authenticatorPreferred,\n )\n\n return {\n ...currentState,\n isSetupSuccessOpen: true,\n isMfaEnabled: getIsMfaEnabled(mfaSettings),\n mfaSettings,\n mfaAuthenticatorAppSetup: undefined,\n settingUpMfaMethod: undefined,\n }\n })\n }, [])\n\n const openPhoneNumberDialog = React.useCallback(() => {\n setState((currentState) => ({\n ...currentState,\n isPhoneNumberDialogOpen: true,\n phoneVerificationCodeSentAt: undefined,\n setupError: undefined,\n }))\n }, [])\n\n const closePhoneNumberDialog = React.useCallback(() => {\n setState((currentState) => ({\n ...currentState,\n isPhoneNumberDialogOpen: false,\n phoneVerificationCodeSentAt: undefined,\n }))\n }, [])\n\n const setupSmsMfaMethod = React.useCallback(async () => {\n let smsPreferred = false\n\n setState((currentState) => {\n smsPreferred = !hasPreferredMfaMethod(currentState.mfaSettings)\n return currentState\n })\n\n await mfaService.setupSmsMfa({\n preferred: smsPreferred,\n })\n\n setState((currentState) => {\n const mfaSettings = enableSmsMfaInSettings(\n currentState.mfaSettings,\n smsPreferred,\n )\n\n return {\n ...currentState,\n isSetupSuccessOpen: true,\n isSettingUpMfa: false,\n settingUpMfaMethod: undefined,\n isMfaEnabled: getIsMfaEnabled(mfaSettings),\n mfaSettings,\n }\n })\n }, [])\n\n const savePhoneNumber = React.useCallback(\n async (phoneNumber: string) => {\n setState((currentState) => ({\n ...currentState,\n setupError: undefined,\n }))\n\n try {\n const { isPhoneNumberVerified } =\n await mfaService.updateUserPhoneNumber(phoneNumber)\n\n if (!isPhoneNumberVerified) {\n setState((currentState) => ({\n ...currentState,\n phoneVerificationCodeSentAt: Date.now(),\n mfaSettings: {\n ...currentState.mfaSettings,\n sms: {\n ...currentState.mfaSettings.sms,\n phoneNumber,\n isPhoneNumberVerified: false,\n },\n },\n }))\n return\n }\n setState((currentState) => ({\n ...currentState,\n mfaSettings: {\n ...currentState.mfaSettings,\n sms: {\n ...currentState.mfaSettings.sms,\n phoneNumber,\n isPhoneNumberVerified,\n },\n },\n isPhoneNumberDialogOpen: false,\n phoneVerificationCodeSentAt: undefined,\n }))\n await setupSmsMfaMethod()\n } catch (error) {\n setState((currentState) => ({\n ...currentState,\n setupError: error as Error,\n }))\n }\n },\n [setupSmsMfaMethod],\n )\n\n const verifyPhoneNumber = React.useCallback(\n async (code: string) => {\n setState((currentState) => ({\n ...currentState,\n setupError: undefined,\n }))\n\n try {\n await mfaService.verifyUserPhoneNumber(code)\n\n setState((currentState) => ({\n ...currentState,\n mfaSettings: {\n ...currentState.mfaSettings,\n sms: {\n ...currentState.mfaSettings.sms,\n isPhoneNumberVerified: true,\n },\n },\n isPhoneNumberDialogOpen: false,\n phoneVerificationCodeSentAt: undefined,\n }))\n await setupSmsMfaMethod()\n } catch (error) {\n setState((currentState) => ({\n ...currentState,\n setupError: error as Error,\n }))\n }\n },\n [setupSmsMfaMethod],\n )\n\n const resendPhoneNumberVerificationCode = React.useCallback(async () => {\n setState((currentState) => ({\n ...currentState,\n setupError: undefined,\n phoneVerificationCodeSentAt: Date.now(),\n }))\n\n try {\n await mfaService.sendPhoneNumberVerificationCode()\n } catch (error) {\n setState((currentState) => ({\n ...currentState,\n setupError: error as Error,\n }))\n }\n }, [])\n\n const beginRemovingPhoneNumber = React.useCallback(() => {\n setState((currentState) => ({\n ...currentState,\n isRemovePhoneNumberDialogOpen: true,\n setupError: undefined,\n }))\n }, [])\n\n const cancelRemovingPhoneNumber = React.useCallback(() => {\n setState((currentState) => ({\n ...currentState,\n isRemovePhoneNumberDialogOpen: false,\n }))\n }, [])\n\n const completeRemovingPhoneNumber = React.useCallback(async () => {\n setState((currentState) => ({\n ...currentState,\n setupError: undefined,\n }))\n\n try {\n await mfaService.removeUserPhoneNumber()\n setState((currentState) => ({\n ...currentState,\n isRemovePhoneNumberDialogOpen: false,\n mfaSettings: {\n ...currentState.mfaSettings,\n sms: {\n ...currentState.mfaSettings.sms,\n phoneNumber: undefined,\n isPhoneNumberVerified: false,\n },\n },\n }))\n } catch (error) {\n setState((currentState) => ({\n ...currentState,\n setupError: error as Error,\n }))\n }\n }, [])\n\n const beginMfaSetup = React.useCallback(\n async (mfaMethod: mfaService.MfaMethod) => {\n setState((currentState) => ({\n ...currentState,\n isSettingUpMfa: true,\n settingUpMfaMethod: mfaMethod,\n mfaAuthenticatorAppSetup: undefined,\n setupError: undefined,\n }))\n\n try {\n let mfaSettings = mfaService.DEFAULT_MFA_SETTINGS\n\n setState((currentState) => {\n mfaSettings = currentState.mfaSettings\n return currentState\n })\n\n if (mfaMethod === 'sms') {\n if (\n !mfaSettings.sms.phoneNumber ||\n !mfaSettings.sms.isPhoneNumberVerified\n ) {\n setState((currentState) => ({\n ...currentState,\n isSettingUpMfa: false,\n settingUpMfaMethod: undefined,\n isSetupMethodDialogOpen: false,\n isPhoneNumberDialogOpen: true,\n }))\n return\n }\n\n await setupSmsMfaMethod()\n setState((currentState) => ({\n ...currentState,\n isSetupMethodDialogOpen: false,\n }))\n return\n }\n\n const hasPreferredMethod = hasPreferredMfaMethod(mfaSettings)\n const newMfaAuthenticatorAppSetup =\n await mfaService.setupMfaAuthenticatorApp({\n preferred: !hasPreferredMethod,\n })\n setState((currentState) => ({\n ...currentState,\n isSettingUpMfa: false,\n isSetupMethodDialogOpen: false,\n mfaAuthenticatorAppSetup: newMfaAuthenticatorAppSetup,\n }))\n } catch (error) {\n setState((currentState) => ({\n ...currentState,\n isSettingUpMfa: false,\n settingUpMfaMethod: undefined,\n setupError: error as Error,\n }))\n }\n },\n [setupSmsMfaMethod],\n )\n\n const disablingMfaMethodRef = React.useRef<mfaService.MfaMethod | undefined>(\n undefined,\n )\n\n const beginDisablingMfaMethod = React.useCallback(\n (mfaMethod: mfaService.MfaMethod) => {\n disablingMfaMethodRef.current = mfaMethod\n setState((currentState) => ({\n ...currentState,\n disablingMfaMethod: mfaMethod,\n }))\n },\n [],\n )\n\n const cancelDisablingMfa = React.useCallback(() => {\n disablingMfaMethodRef.current = undefined\n setState((currentState) => ({\n ...currentState,\n disablingMfaMethod: undefined,\n }))\n }, [])\n\n const completeDisablingMfa = React.useCallback(async () => {\n const disablingMfaMethod = disablingMfaMethodRef.current\n if (!disablingMfaMethod) {\n return\n }\n\n await mfaService.disableMfaMethod(disablingMfaMethod)\n const mfaSettings = await mfaService.getMfaSettings()\n disablingMfaMethodRef.current = undefined\n setState((currentState) => ({\n ...currentState,\n disablingMfaMethod: undefined,\n mfaSettings,\n isMfaEnabled: getIsMfaEnabled(mfaSettings),\n }))\n }, [])\n\n const setPreferredMfaMethod = React.useCallback(\n async (mfaMethod: mfaService.MfaMethod) => {\n setState((currentState) => ({\n ...currentState,\n isSettingPreferredMfaMethod: true,\n setupError: undefined,\n }))\n\n try {\n await mfaService.setPreferredMfaMethod(mfaMethod)\n setState((currentState) => ({\n ...currentState,\n isSettingPreferredMfaMethod: false,\n mfaSettings: setPreferredMfaMethodInSettings(\n currentState.mfaSettings,\n mfaMethod,\n ),\n }))\n } catch (error) {\n setState((currentState) => ({\n ...currentState,\n isSettingPreferredMfaMethod: false,\n setupError: error as Error,\n }))\n }\n },\n [],\n )\n\n const value = React.useMemo(() => {\n return {\n ...state,\n clearMfaSetupError,\n loadMfa,\n beginMfaSetup,\n openMfaSetupMethodDialog,\n closeMfaSetupMethodDialog,\n beginDisablingMfaMethod,\n setPreferredMfaMethod,\n openPhoneNumberDialog,\n closePhoneNumberDialog,\n savePhoneNumber,\n verifyPhoneNumber,\n resendPhoneNumberVerificationCode,\n beginRemovingPhoneNumber,\n cancelRemovingPhoneNumber,\n completeRemovingPhoneNumber,\n hideSetupSuccess,\n cancelMfaAuthenticatorAppSetup,\n completeMfaAuthenticatorAppSetup,\n cancelDisablingMfa,\n completeDisablingMfa,\n }\n }, [\n state,\n clearMfaSetupError,\n loadMfa,\n beginMfaSetup,\n openMfaSetupMethodDialog,\n closeMfaSetupMethodDialog,\n beginDisablingMfaMethod,\n setPreferredMfaMethod,\n openPhoneNumberDialog,\n closePhoneNumberDialog,\n savePhoneNumber,\n verifyPhoneNumber,\n resendPhoneNumberVerificationCode,\n beginRemovingPhoneNumber,\n cancelRemovingPhoneNumber,\n completeRemovingPhoneNumber,\n hideSetupSuccess,\n cancelMfaAuthenticatorAppSetup,\n completeMfaAuthenticatorAppSetup,\n cancelDisablingMfa,\n completeDisablingMfa,\n ])\n\n return <MfaContext.Provider value={value}>{children}</MfaContext.Provider>\n}\n\nexport default function useMfa() {\n return React.useContext(MfaContext)\n}\n\n/**\n * React hook to determine whether the logged in user must set up MFA before\n * accessing your application. Reads MFA settings from the `<MfaProvider />`\n * context. Will throw an Error if used outside of `<MfaProvider />`.\n *\n * Users signed in via an external identity provider are not required to set up\n * MFA.\n *\n * #### Example\n *\n * ```js\n * import { MfaProvider, useUserMeetsMfaRequirement } from '@oneblink/apps-react'\n *\n * function Component({ teamMemberMfaRequirement }) {\n * const { mfaSetupRequired, isLoading, loadingError, refreshMfa } =\n * useUserMeetsMfaRequirement(teamMemberMfaRequirement)\n *\n * if (isLoading) {\n * return <Loading />\n * }\n *\n * if (loadingError) {\n * return <Error onRetry={refreshMfa} />\n * }\n *\n * if (mfaSetupRequired) {\n * return <ConfigureMfa />\n * }\n *\n * return <Application />\n * }\n * ```\n *\n * @param mfaRequirement - The MFA requirement to enforce, e.g. from your\n * organisation or app settings.\n * @returns Whether MFA setup is required, along with loading state from the MFA\n * provider.\n * @group Hooks\n */\nexport function useUserMeetsMfaRequirement(\n mfaRequirement: MiscTypes.MfaRequirement | undefined,\n) {\n const {\n isLoading,\n loadingError,\n mfaSettings,\n loadMfa,\n isExternalIdentityProviderUser,\n } = useMfa()\n\n return React.useMemo(() => {\n const mfaRequired = mfaService.isMfaRequired(mfaRequirement)\n const shouldCheckMfa = mfaRequired && !isExternalIdentityProviderUser\n const meetsRequirement = mfaService.userMeetsMfaRequirement(\n mfaRequirement,\n mfaSettings,\n )\n const mfaSetupRequired =\n shouldCheckMfa && !isLoading && !loadingError && !meetsRequirement\n\n return {\n mfaSetupRequired,\n isLoading: shouldCheckMfa && isLoading,\n loadingError: shouldCheckMfa ? loadingError : undefined,\n refreshMfa: loadMfa,\n }\n }, [\n mfaRequirement,\n isExternalIdentityProviderUser,\n mfaSettings,\n isLoading,\n loadingError,\n loadMfa,\n ])\n}\n"]}
|
|
1
|
+
{"version":3,"file":"useMfa.js","sourceRoot":"","sources":["../../src/hooks/useMfa.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { mfaService } from '../apps'\nimport useLoadDataEffect from './useLoadDataEffect'\nimport { MiscTypes } from '@oneblink/types'\n\ntype MfaState = {\n isExternalIdentityProviderUser: boolean\n isLoading: boolean\n isMfaEnabled: boolean\n mfaSettings: mfaService.MfaSettings\n isSetupSuccessOpen: boolean\n loadingError?: Error\n isSettingUpMfa: boolean\n settingUpMfaMethod?: mfaService.MfaMethod\n isSetupMethodDialogOpen: boolean\n disablingMfaMethod?: mfaService.MfaMethod\n isSettingPreferredMfaMethod: boolean\n setupError?: Error\n mfaAuthenticatorAppSetup?: Awaited<\n ReturnType<typeof mfaService.setupMfaAuthenticatorApp>\n >\n isPhoneNumberDialogOpen: boolean\n phoneVerificationCodeSentAt?: number\n isRemovePhoneNumberDialogOpen: boolean\n}\n\nexport const MfaContext = React.createContext<\n MfaState & {\n beginMfaSetup: (mfaMethod: mfaService.MfaMethod) => Promise<void>\n openMfaSetupMethodDialog: () => void\n closeMfaSetupMethodDialog: () => void\n beginDisablingMfaMethod: (mfaMethod: mfaService.MfaMethod) => void\n setPreferredMfaMethod: (mfaMethod: mfaService.MfaMethod) => Promise<void>\n openPhoneNumberDialog: () => void\n closePhoneNumberDialog: () => void\n savePhoneNumber: (phoneNumber: string) => Promise<void>\n verifyPhoneNumber: (code: string) => Promise<void>\n beginRemovingPhoneNumber: () => void\n cancelRemovingPhoneNumber: () => void\n completeRemovingPhoneNumber: () => Promise<void>\n hideSetupSuccess: () => void\n cancelMfaAuthenticatorAppSetup: () => void\n completeMfaAuthenticatorAppSetup: () => Promise<void>\n cancelDisablingMfa: () => void\n completeDisablingMfa: () => Promise<void>\n clearMfaSetupError: () => void\n loadMfa: () => void\n }\n>({\n isExternalIdentityProviderUser: false,\n isLoading: true,\n isMfaEnabled: false,\n mfaSettings: mfaService.DEFAULT_MFA_SETTINGS,\n isSetupSuccessOpen: false,\n isSettingUpMfa: false,\n isSetupMethodDialogOpen: false,\n isSettingPreferredMfaMethod: false,\n isPhoneNumberDialogOpen: false,\n isRemovePhoneNumberDialogOpen: false,\n beginMfaSetup: async () => {},\n openMfaSetupMethodDialog: () => {},\n closeMfaSetupMethodDialog: () => {},\n beginDisablingMfaMethod: () => {},\n setPreferredMfaMethod: async () => {},\n openPhoneNumberDialog: () => {},\n closePhoneNumberDialog: () => {},\n savePhoneNumber: async () => {},\n verifyPhoneNumber: async () => {},\n beginRemovingPhoneNumber: () => {},\n cancelRemovingPhoneNumber: () => {},\n completeRemovingPhoneNumber: async () => {},\n hideSetupSuccess: () => {},\n cancelMfaAuthenticatorAppSetup: () => {},\n completeMfaAuthenticatorAppSetup: async () => {},\n cancelDisablingMfa: () => {},\n completeDisablingMfa: async () => {},\n clearMfaSetupError: () => {},\n loadMfa: () => {},\n})\n\nfunction getIsMfaEnabled(mfaSettings: mfaService.MfaSettings) {\n return mfaSettings.authenticator.enabled || mfaSettings.sms.enabled\n}\n\nfunction hasPreferredMfaMethod(mfaSettings: mfaService.MfaSettings) {\n return (\n (mfaSettings.authenticator.enabled &&\n mfaSettings.authenticator.preferred) ||\n (mfaSettings.sms.enabled && mfaSettings.sms.preferred)\n )\n}\n\nfunction enableSmsMfaInSettings(\n mfaSettings: mfaService.MfaSettings,\n smsPreferred: boolean,\n): mfaService.MfaSettings {\n return {\n ...mfaSettings,\n sms: {\n ...mfaSettings.sms,\n enabled: true,\n preferred: smsPreferred,\n },\n }\n}\n\nfunction enableAuthenticatorMfaInSettings(\n mfaSettings: mfaService.MfaSettings,\n authenticatorPreferred: boolean,\n): mfaService.MfaSettings {\n return {\n ...mfaSettings,\n authenticator: {\n enabled: true,\n preferred: authenticatorPreferred,\n },\n sms: {\n ...mfaSettings.sms,\n preferred: authenticatorPreferred ? false : mfaSettings.sms.preferred,\n },\n }\n}\n\nfunction setPreferredMfaMethodInSettings(\n mfaSettings: mfaService.MfaSettings,\n mfaMethod: mfaService.MfaMethod,\n): mfaService.MfaSettings {\n return {\n ...mfaSettings,\n authenticator: {\n ...mfaSettings.authenticator,\n preferred: mfaMethod === 'authenticator',\n },\n sms: {\n ...mfaSettings.sms,\n preferred: mfaMethod === 'sms',\n },\n }\n}\n\n/**\n * React Component that provides the context for the\n * `useUserMeetsMfaRequirement()` hook and `<MultiFactorAuthentication />`\n * component, to be used by components further down your component tree. **It\n * should only be included in your component tree once and ideally at the root\n * of the application.**\n *\n * #### Example\n *\n * ```js\n * import * as React from 'react'\n * import {\n * MfaProvider,\n * useUserMeetsMfaRequirement,\n * } from '@oneblink/apps-react'\n *\n * function Component({ teamMemberMfaRequirement }) {\n * const { mfaSetupRequired, isLoading, loadingError, refreshMfa } =\n * useUserMeetsMfaRequirement(teamMemberMfaRequirement)\n *\n * if (isLoading) {\n * return <Loading />\n * }\n *\n * if (loadingError) {\n * return <Error onRetry={refreshMfa} />\n * }\n *\n * if (mfaSetupRequired) {\n * return <ConfigureMfa />\n * }\n *\n * return <Application />\n * }\n *\n * function App({ teamMemberMfaRequirement }) {\n * return (\n * <MfaProvider isExternalIdentityProviderUser={false}>\n * <Component teamMemberMfaRequirement={teamMemberMfaRequirement} />\n * </MfaProvider>\n * )\n * }\n *\n * const root = document.getElementById('root')\n * if (root) {\n * ReactDOM.render(<App teamMemberMfaRequirement={mfaRequirement} />, root)\n * }\n * ```\n *\n * @param props\n * @returns\n * @group Components\n */\nexport function MfaProvider({\n children,\n isExternalIdentityProviderUser,\n}: {\n children: React.ReactNode\n isExternalIdentityProviderUser: boolean\n}) {\n const [state, setState] = React.useState<MfaState>({\n isExternalIdentityProviderUser,\n isLoading: !isExternalIdentityProviderUser,\n isMfaEnabled: false,\n mfaSettings: mfaService.DEFAULT_MFA_SETTINGS,\n isSetupSuccessOpen: false,\n isSettingUpMfa: false,\n isSetupMethodDialogOpen: false,\n isSettingPreferredMfaMethod: false,\n isPhoneNumberDialogOpen: false,\n isRemovePhoneNumberDialogOpen: false,\n })\n\n const handleLoadMfa = React.useCallback(\n async (abortSignal: AbortSignal) => {\n if (isExternalIdentityProviderUser) {\n return\n }\n\n setState((currentState) => ({\n ...currentState,\n isLoading: true,\n isMfaEnabled: false,\n mfaSettings: mfaService.DEFAULT_MFA_SETTINGS,\n loadingError: undefined,\n }))\n try {\n const mfaSettings = await mfaService.getMfaSettings(abortSignal)\n if (!abortSignal.aborted) {\n setState((currentState) => ({\n ...currentState,\n isLoading: false,\n mfaSettings,\n isMfaEnabled: getIsMfaEnabled(mfaSettings),\n }))\n }\n } catch (error) {\n if (abortSignal.aborted) {\n return\n }\n\n setState((currentState) => ({\n ...currentState,\n isLoading: false,\n loadingError: error as Error,\n }))\n }\n },\n [isExternalIdentityProviderUser],\n )\n\n const loadMfa = useLoadDataEffect(handleLoadMfa)\n\n const clearMfaSetupError = React.useCallback(() => {\n setState((currentState) => ({\n ...currentState,\n setupError: undefined,\n }))\n }, [])\n\n const openMfaSetupMethodDialog = React.useCallback(() => {\n setState((currentState) => ({\n ...currentState,\n isSetupMethodDialogOpen: true,\n }))\n }, [])\n\n const closeMfaSetupMethodDialog = React.useCallback(() => {\n setState((currentState) => ({\n ...currentState,\n isSetupMethodDialogOpen: false,\n }))\n }, [])\n\n const hideSetupSuccess = React.useCallback(() => {\n setState((currentState) => ({\n ...currentState,\n isSetupSuccessOpen: false,\n }))\n }, [])\n\n const cancelMfaAuthenticatorAppSetup = React.useCallback(() => {\n setState((currentState) => ({\n ...currentState,\n mfaAuthenticatorAppSetup: undefined,\n settingUpMfaMethod: undefined,\n }))\n }, [])\n\n const completeMfaAuthenticatorAppSetup = React.useCallback(async () => {\n setState((currentState) => {\n const authenticatorPreferred = !hasPreferredMfaMethod(\n currentState.mfaSettings,\n )\n const mfaSettings = enableAuthenticatorMfaInSettings(\n currentState.mfaSettings,\n authenticatorPreferred,\n )\n\n return {\n ...currentState,\n isSetupSuccessOpen: true,\n isMfaEnabled: getIsMfaEnabled(mfaSettings),\n mfaSettings,\n mfaAuthenticatorAppSetup: undefined,\n settingUpMfaMethod: undefined,\n }\n })\n }, [])\n\n const openPhoneNumberDialog = React.useCallback(() => {\n setState((currentState) => ({\n ...currentState,\n isPhoneNumberDialogOpen: true,\n phoneVerificationCodeSentAt: undefined,\n setupError: undefined,\n }))\n }, [])\n\n const closePhoneNumberDialog = React.useCallback(() => {\n setState((currentState) => ({\n ...currentState,\n isPhoneNumberDialogOpen: false,\n phoneVerificationCodeSentAt: undefined,\n }))\n }, [])\n\n const setupSmsMfaMethod = React.useCallback(async () => {\n let smsPreferred = false\n\n setState((currentState) => {\n smsPreferred = !hasPreferredMfaMethod(currentState.mfaSettings)\n return currentState\n })\n\n await mfaService.setupSmsMfa({\n preferred: smsPreferred,\n })\n\n setState((currentState) => {\n const mfaSettings = enableSmsMfaInSettings(\n currentState.mfaSettings,\n smsPreferred,\n )\n\n return {\n ...currentState,\n isSetupSuccessOpen: true,\n isSettingUpMfa: false,\n settingUpMfaMethod: undefined,\n isMfaEnabled: getIsMfaEnabled(mfaSettings),\n mfaSettings,\n }\n })\n }, [])\n\n const savePhoneNumber = React.useCallback(\n async (phoneNumber: string) => {\n setState((currentState) => ({\n ...currentState,\n setupError: undefined,\n }))\n\n try {\n const { isPhoneNumberVerified } =\n await mfaService.updateUserPhoneNumber(phoneNumber)\n\n if (!isPhoneNumberVerified) {\n setState((currentState) => ({\n ...currentState,\n phoneVerificationCodeSentAt: Date.now(),\n mfaSettings: {\n ...currentState.mfaSettings,\n sms: {\n ...currentState.mfaSettings.sms,\n phoneNumber,\n isPhoneNumberVerified: false,\n },\n },\n }))\n return\n }\n setState((currentState) => ({\n ...currentState,\n mfaSettings: {\n ...currentState.mfaSettings,\n sms: {\n ...currentState.mfaSettings.sms,\n phoneNumber,\n isPhoneNumberVerified,\n },\n },\n isPhoneNumberDialogOpen: false,\n phoneVerificationCodeSentAt: undefined,\n }))\n await setupSmsMfaMethod()\n } catch (error) {\n setState((currentState) => ({\n ...currentState,\n setupError: error as Error,\n }))\n }\n },\n [setupSmsMfaMethod],\n )\n\n const verifyPhoneNumber = React.useCallback(\n async (code: string) => {\n setState((currentState) => ({\n ...currentState,\n setupError: undefined,\n }))\n\n try {\n await mfaService.verifyUserPhoneNumber(code)\n\n setState((currentState) => ({\n ...currentState,\n mfaSettings: {\n ...currentState.mfaSettings,\n sms: {\n ...currentState.mfaSettings.sms,\n isPhoneNumberVerified: true,\n },\n },\n isPhoneNumberDialogOpen: false,\n phoneVerificationCodeSentAt: undefined,\n }))\n await setupSmsMfaMethod()\n } catch (error) {\n setState((currentState) => ({\n ...currentState,\n setupError: error as Error,\n }))\n }\n },\n [setupSmsMfaMethod],\n )\n\n const beginRemovingPhoneNumber = React.useCallback(() => {\n setState((currentState) => ({\n ...currentState,\n isRemovePhoneNumberDialogOpen: true,\n setupError: undefined,\n }))\n }, [])\n\n const cancelRemovingPhoneNumber = React.useCallback(() => {\n setState((currentState) => ({\n ...currentState,\n isRemovePhoneNumberDialogOpen: false,\n }))\n }, [])\n\n const completeRemovingPhoneNumber = React.useCallback(async () => {\n setState((currentState) => ({\n ...currentState,\n setupError: undefined,\n }))\n\n try {\n await mfaService.removeUserPhoneNumber()\n setState((currentState) => ({\n ...currentState,\n isRemovePhoneNumberDialogOpen: false,\n mfaSettings: {\n ...currentState.mfaSettings,\n sms: {\n ...currentState.mfaSettings.sms,\n phoneNumber: undefined,\n isPhoneNumberVerified: false,\n },\n },\n }))\n } catch (error) {\n setState((currentState) => ({\n ...currentState,\n setupError: error as Error,\n }))\n }\n }, [])\n\n const beginMfaSetup = React.useCallback(\n async (mfaMethod: mfaService.MfaMethod) => {\n setState((currentState) => ({\n ...currentState,\n isSettingUpMfa: true,\n settingUpMfaMethod: mfaMethod,\n mfaAuthenticatorAppSetup: undefined,\n setupError: undefined,\n }))\n\n try {\n let mfaSettings = mfaService.DEFAULT_MFA_SETTINGS\n\n setState((currentState) => {\n mfaSettings = currentState.mfaSettings\n return currentState\n })\n\n if (mfaMethod === 'sms') {\n if (\n !mfaSettings.sms.phoneNumber ||\n !mfaSettings.sms.isPhoneNumberVerified\n ) {\n setState((currentState) => ({\n ...currentState,\n isSettingUpMfa: false,\n settingUpMfaMethod: undefined,\n isSetupMethodDialogOpen: false,\n isPhoneNumberDialogOpen: true,\n }))\n return\n }\n\n await setupSmsMfaMethod()\n setState((currentState) => ({\n ...currentState,\n isSetupMethodDialogOpen: false,\n }))\n return\n }\n\n const hasPreferredMethod = hasPreferredMfaMethod(mfaSettings)\n const newMfaAuthenticatorAppSetup =\n await mfaService.setupMfaAuthenticatorApp({\n preferred: !hasPreferredMethod,\n })\n setState((currentState) => ({\n ...currentState,\n isSettingUpMfa: false,\n isSetupMethodDialogOpen: false,\n mfaAuthenticatorAppSetup: newMfaAuthenticatorAppSetup,\n }))\n } catch (error) {\n setState((currentState) => ({\n ...currentState,\n isSettingUpMfa: false,\n settingUpMfaMethod: undefined,\n setupError: error as Error,\n }))\n }\n },\n [setupSmsMfaMethod],\n )\n\n const disablingMfaMethodRef = React.useRef<mfaService.MfaMethod | undefined>(\n undefined,\n )\n\n const beginDisablingMfaMethod = React.useCallback(\n (mfaMethod: mfaService.MfaMethod) => {\n disablingMfaMethodRef.current = mfaMethod\n setState((currentState) => ({\n ...currentState,\n disablingMfaMethod: mfaMethod,\n }))\n },\n [],\n )\n\n const cancelDisablingMfa = React.useCallback(() => {\n disablingMfaMethodRef.current = undefined\n setState((currentState) => ({\n ...currentState,\n disablingMfaMethod: undefined,\n }))\n }, [])\n\n const completeDisablingMfa = React.useCallback(async () => {\n const disablingMfaMethod = disablingMfaMethodRef.current\n if (!disablingMfaMethod) {\n return\n }\n\n await mfaService.disableMfaMethod(disablingMfaMethod)\n const mfaSettings = await mfaService.getMfaSettings()\n disablingMfaMethodRef.current = undefined\n setState((currentState) => ({\n ...currentState,\n disablingMfaMethod: undefined,\n mfaSettings,\n isMfaEnabled: getIsMfaEnabled(mfaSettings),\n }))\n }, [])\n\n const setPreferredMfaMethod = React.useCallback(\n async (mfaMethod: mfaService.MfaMethod) => {\n setState((currentState) => ({\n ...currentState,\n isSettingPreferredMfaMethod: true,\n setupError: undefined,\n }))\n\n try {\n await mfaService.setPreferredMfaMethod(mfaMethod)\n setState((currentState) => ({\n ...currentState,\n isSettingPreferredMfaMethod: false,\n mfaSettings: setPreferredMfaMethodInSettings(\n currentState.mfaSettings,\n mfaMethod,\n ),\n }))\n } catch (error) {\n setState((currentState) => ({\n ...currentState,\n isSettingPreferredMfaMethod: false,\n setupError: error as Error,\n }))\n }\n },\n [],\n )\n\n const value = React.useMemo(() => {\n return {\n ...state,\n clearMfaSetupError,\n loadMfa,\n beginMfaSetup,\n openMfaSetupMethodDialog,\n closeMfaSetupMethodDialog,\n beginDisablingMfaMethod,\n setPreferredMfaMethod,\n openPhoneNumberDialog,\n closePhoneNumberDialog,\n savePhoneNumber,\n verifyPhoneNumber,\n beginRemovingPhoneNumber,\n cancelRemovingPhoneNumber,\n completeRemovingPhoneNumber,\n hideSetupSuccess,\n cancelMfaAuthenticatorAppSetup,\n completeMfaAuthenticatorAppSetup,\n cancelDisablingMfa,\n completeDisablingMfa,\n }\n }, [\n state,\n clearMfaSetupError,\n loadMfa,\n beginMfaSetup,\n openMfaSetupMethodDialog,\n closeMfaSetupMethodDialog,\n beginDisablingMfaMethod,\n setPreferredMfaMethod,\n openPhoneNumberDialog,\n closePhoneNumberDialog,\n savePhoneNumber,\n verifyPhoneNumber,\n beginRemovingPhoneNumber,\n cancelRemovingPhoneNumber,\n completeRemovingPhoneNumber,\n hideSetupSuccess,\n cancelMfaAuthenticatorAppSetup,\n completeMfaAuthenticatorAppSetup,\n cancelDisablingMfa,\n completeDisablingMfa,\n ])\n\n return <MfaContext.Provider value={value}>{children}</MfaContext.Provider>\n}\n\nexport default function useMfa() {\n return React.useContext(MfaContext)\n}\n\n/**\n * React hook to determine whether the logged in user must set up MFA before\n * accessing your application. Reads MFA settings from the `<MfaProvider />`\n * context. Will throw an Error if used outside of `<MfaProvider />`.\n *\n * Users signed in via an external identity provider are not required to set up\n * MFA.\n *\n * #### Example\n *\n * ```js\n * import { MfaProvider, useUserMeetsMfaRequirement } from '@oneblink/apps-react'\n *\n * function Component({ teamMemberMfaRequirement }) {\n * const { mfaSetupRequired, isLoading, loadingError, refreshMfa } =\n * useUserMeetsMfaRequirement(teamMemberMfaRequirement)\n *\n * if (isLoading) {\n * return <Loading />\n * }\n *\n * if (loadingError) {\n * return <Error onRetry={refreshMfa} />\n * }\n *\n * if (mfaSetupRequired) {\n * return <ConfigureMfa />\n * }\n *\n * return <Application />\n * }\n * ```\n *\n * @param mfaRequirement - The MFA requirement to enforce, e.g. from your\n * organisation or app settings.\n * @returns Whether MFA setup is required, along with loading state from the MFA\n * provider.\n * @group Hooks\n */\nexport function useUserMeetsMfaRequirement(\n mfaRequirement: MiscTypes.MfaRequirement | undefined,\n) {\n const {\n isLoading,\n loadingError,\n mfaSettings,\n loadMfa,\n isExternalIdentityProviderUser,\n } = useMfa()\n\n return React.useMemo(() => {\n const mfaRequired = mfaService.isMfaRequired(mfaRequirement)\n const shouldCheckMfa = mfaRequired && !isExternalIdentityProviderUser\n const meetsRequirement = mfaService.userMeetsMfaRequirement(\n mfaRequirement,\n mfaSettings,\n )\n const mfaSetupRequired =\n shouldCheckMfa && !isLoading && !loadingError && !meetsRequirement\n\n return {\n mfaSetupRequired,\n isLoading: shouldCheckMfa && isLoading,\n loadingError: shouldCheckMfa ? loadingError : undefined,\n refreshMfa: loadMfa,\n }\n }, [\n mfaRequirement,\n isExternalIdentityProviderUser,\n mfaSettings,\n isLoading,\n loadingError,\n loadMfa,\n ])\n}\n"]}
|
|
@@ -50,17 +50,21 @@ export function formatMfaRequirementMethodLabel(method) {
|
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
|
-
function isMfaRequirementMethodEnabled(method, mfaSettings) {
|
|
54
|
-
if (method === 'sms') {
|
|
55
|
-
return mfaSettings.sms.preferred;
|
|
56
|
-
}
|
|
57
|
-
return mfaSettings.authenticator.preferred;
|
|
58
|
-
}
|
|
59
53
|
export function userMeetsMfaRequirement(mfaRequirement, mfaSettings) {
|
|
60
54
|
if (!isMfaRequired(mfaRequirement)) {
|
|
61
55
|
return true;
|
|
62
56
|
}
|
|
63
|
-
|
|
57
|
+
if ((mfaRequirement === null || mfaRequirement === void 0 ? void 0 : mfaRequirement.sms) &&
|
|
58
|
+
mfaSettings.sms.enabled &&
|
|
59
|
+
mfaSettings.sms.preferred) {
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
if ((mfaRequirement === null || mfaRequirement === void 0 ? void 0 : mfaRequirement.authenticatorApp) &&
|
|
63
|
+
mfaSettings.authenticator.enabled &&
|
|
64
|
+
mfaSettings.authenticator.preferred) {
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
return false;
|
|
64
68
|
}
|
|
65
69
|
export function formatMfaMethodNotAcceptedMessage(method, mfaRequirement, accessScopeLabel = 'app') {
|
|
66
70
|
if (!mfaRequirement || !isMfaRequired(mfaRequirement)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mfa-requirement.js","sourceRoot":"","sources":["../../src/utils/mfa-requirement.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAIvC,MAAM,UAAU,aAAa,CAC3B,cAAoD;IAEpD,OAAO,CACL,CAAC,CAAC,cAAc,IAAI,CAAC,cAAc,CAAC,GAAG,IAAI,cAAc,CAAC,gBAAgB,CAAC,CAC5E,CAAA;AACH,CAAC;AAID,MAAM,2BAA2B,GAAG,MAAM,CAAC,IAAI,CAAC;IAC9C,GAAG,EAAE,KAAK;IACV,gBAAgB,EAAE,KAAK;CACW,CAA2B,CAAA;AAE/D,MAAM,UAAU,+BAA+B,CAC7C,cAAoD;;IAEpD,MAAM,aAAa,GAAG;QACpB,GAAG,EAAE,MAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,GAAG,mCAAI,KAAK;QACjC,gBAAgB,EAAE,MAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,gBAAgB,mCAAI,KAAK;KAC5D,CAAA;IACD,MAAM,OAAO,GAA2B,EAAE,CAAA;IAE1C,IAAI,aAAa,CAAC,gBAAgB,EAAE,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;IAClC,CAAC;IAED,IAAI,aAAa,CAAC,GAAG,EAAE,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACrB,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,MAAM,UAAU,kCAAkC,CAChD,OAA+B;IAE/B,OAAO;QACL,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC5B,gBAAgB,EAAE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC;KACvD,CAAA;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,cAAoD;IAEpD,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC;QACnC,OAAO,cAAc,CAAA;IACvB,CAAC;IAED,MAAM,eAAe,GAAG,+BAA+B,CAAC,cAAc,CAAC,CAAA;IAEvE,IAAI,eAAe,CAAC,MAAM,KAAK,2BAA2B,CAAC,MAAM,EAAE,CAAC;QAClE,OAAO,cAAc,CAAA;IACvB,CAAC;IAED,MAAM,UAAU,GAAG,SAAS,CAC1B,eAAe,CAAC,GAAG,CAAC,+BAA+B,CAAC,EACpD,aAAa,CACd,CAAA;IAED,OAAO,iBAAiB,UAAU,QAAQ,CAAA;AAC5C,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,MAA4B;IAE5B,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,KAAK;YACR,OAAO,KAAK,CAAA;QACd,KAAK,kBAAkB;YACrB,OAAO,mBAAmB,CAAA;QAC5B,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,CAAC,GAAU,MAAM,CAAA;YACvB,OAAO,CAAC,CAAA;QACV,CAAC;IACH,CAAC;AACH,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"mfa-requirement.js","sourceRoot":"","sources":["../../src/utils/mfa-requirement.ts"],"names":[],"mappings":"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","sourcesContent":["import { MiscTypes } from '@oneblink/types'\r\nimport type { MfaSettings } from '../apps/services/AWSCognitoClient'\r\nimport { joinArray } from './joinArray'\r\n\r\nexport type { MfaSettings }\r\n\r\nexport function isMfaRequired(\r\n mfaRequirement: MiscTypes.MfaRequirement | undefined,\r\n): boolean {\r\n return (\r\n !!mfaRequirement && (mfaRequirement.sms || mfaRequirement.authenticatorApp)\r\n )\r\n}\r\n\r\nexport type MfaRequirementMethod = keyof MiscTypes.MfaRequirement\r\n\r\nconst MFA_REQUIREMENT_METHOD_KEYS = Object.keys({\r\n sms: false,\r\n authenticatorApp: false,\r\n} satisfies MiscTypes.MfaRequirement) as MfaRequirementMethod[]\r\n\r\nexport function mfaRequirementToSelectedMethods(\r\n mfaRequirement: MiscTypes.MfaRequirement | undefined,\r\n): MfaRequirementMethod[] {\r\n const checkboxState = {\r\n sms: mfaRequirement?.sms ?? false,\r\n authenticatorApp: mfaRequirement?.authenticatorApp ?? false,\r\n }\r\n const methods: MfaRequirementMethod[] = []\r\n\r\n if (checkboxState.authenticatorApp) {\r\n methods.push('authenticatorApp')\r\n }\r\n\r\n if (checkboxState.sms) {\r\n methods.push('sms')\r\n }\r\n\r\n return methods\r\n}\r\n\r\nexport function mfaSelectedMethodsToMfaRequirement(\r\n methods: MfaRequirementMethod[],\r\n): MiscTypes.MfaRequirement {\r\n return {\r\n sms: methods.includes('sms'),\r\n authenticatorApp: methods.includes('authenticatorApp'),\r\n }\r\n}\r\n\r\nexport function formatMfaRequirementLabel(\r\n mfaRequirement: MiscTypes.MfaRequirement | undefined,\r\n): string {\r\n if (!isMfaRequired(mfaRequirement)) {\r\n return 'MFA Optional'\r\n }\r\n\r\n const selectedMethods = mfaRequirementToSelectedMethods(mfaRequirement)\r\n\r\n if (selectedMethods.length === MFA_REQUIREMENT_METHOD_KEYS.length) {\r\n return 'MFA Required'\r\n }\r\n\r\n const methodList = joinArray(\r\n selectedMethods.map(formatMfaRequirementMethodLabel),\r\n 'disjunction',\r\n )\r\n\r\n return `MFA Required (${methodList} only)`\r\n}\r\n\r\nexport function formatMfaRequirementMethodLabel(\r\n method: MfaRequirementMethod,\r\n): string {\r\n switch (method) {\r\n case 'sms':\r\n return 'SMS'\r\n case 'authenticatorApp':\r\n return 'Authenticator App'\r\n default: {\r\n const n: never = method\r\n return n\r\n }\r\n }\r\n}\r\n\r\nexport function userMeetsMfaRequirement(\r\n mfaRequirement: MiscTypes.MfaRequirement | undefined,\r\n mfaSettings: MfaSettings,\r\n): boolean {\r\n if (!isMfaRequired(mfaRequirement)) {\r\n return true\r\n }\r\n\r\n if (\r\n mfaRequirement?.sms &&\r\n mfaSettings.sms.enabled &&\r\n mfaSettings.sms.preferred\r\n ) {\r\n return true\r\n }\r\n\r\n if (\r\n mfaRequirement?.authenticatorApp &&\r\n mfaSettings.authenticator.enabled &&\r\n mfaSettings.authenticator.preferred\r\n ) {\r\n return true\r\n }\r\n\r\n return false\r\n}\r\n\r\nexport function formatMfaMethodNotAcceptedMessage(\r\n method: MfaRequirementMethod,\r\n mfaRequirement: MiscTypes.MfaRequirement | undefined,\r\n accessScopeLabel = 'app',\r\n): string | undefined {\r\n if (!mfaRequirement || !isMfaRequired(mfaRequirement)) {\r\n return undefined\r\n }\r\n\r\n if (mfaRequirement[method]) {\r\n return undefined\r\n }\r\n\r\n const requiredMethods = mfaRequirementToSelectedMethods(mfaRequirement)\r\n\r\n const methodList = joinArray(\r\n requiredMethods.map(formatMfaRequirementMethodLabel),\r\n 'disjunction',\r\n )\r\n\r\n return `This MFA method is not sufficient for using this ${accessScopeLabel.toLowerCase()}. Your administrator requires ${methodList} multi factor authentication.`\r\n}\r\n\r\nexport function formatMfaSetupRequiredMessage(\r\n mfaRequirement: MiscTypes.MfaRequirement | undefined,\r\n mfaSettings: MfaSettings,\r\n accessScopeLabel = 'Account',\r\n): string | undefined {\r\n if (\r\n !isMfaRequired(mfaRequirement) ||\r\n userMeetsMfaRequirement(mfaRequirement, mfaSettings)\r\n ) {\r\n return undefined\r\n }\r\n\r\n const requiredMethods = mfaRequirementToSelectedMethods(mfaRequirement)\r\n const hasAnyMfaEnabled =\r\n mfaSettings.authenticator.enabled || mfaSettings.sms.enabled\r\n\r\n if (requiredMethods.length === 1) {\r\n const methodLabel = formatMfaRequirementMethodLabel(requiredMethods[0])\r\n\r\n if (hasAnyMfaEnabled) {\r\n return `requires ${methodLabel} multi factor authentication. You have a different MFA method configured, but that method is not accepted for this ${accessScopeLabel.toLowerCase()}.`\r\n }\r\n\r\n return `requires ${methodLabel} multi factor authentication to be configured before accessing this ${accessScopeLabel}.`\r\n }\r\n\r\n const methodList = joinArray(\r\n requiredMethods.map(formatMfaRequirementMethodLabel),\r\n 'disjunction',\r\n )\r\n\r\n if (hasAnyMfaEnabled) {\r\n return `requires ${methodList} multi factor authentication. Your current MFA method is not accepted for this ${accessScopeLabel.toLowerCase()}.`\r\n }\r\n\r\n return `requires ${methodList} multi factor authentication to be configured before accessing this ${accessScopeLabel}.`\r\n}\r\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oneblink/apps-react",
|
|
3
3
|
"description": "Helper functions for OneBlink apps in ReactJS.",
|
|
4
|
-
"version": "11.0.0-beta.
|
|
4
|
+
"version": "11.0.0-beta.4",
|
|
5
5
|
"author": "OneBlink <developers@oneblink.io> (https://oneblink.io)",
|
|
6
6
|
"bugs": {
|
|
7
7
|
"url": "https://github.com/oneblink/apps-react/issues"
|