remove problem causing dupliactes
This commit is contained in:
parent
e4ea1d9f18
commit
ed40bd6bfa
6 changed files with 0 additions and 240 deletions
|
@ -1,18 +0,0 @@
|
|||
import React from 'react';
|
||||
import { TypographyProps, Typography } from '@mui/material';
|
||||
import { FC } from 'react';
|
||||
|
||||
const InvalidInputMessage: FC<TypographyProps> = (props) => {
|
||||
return (
|
||||
<Typography
|
||||
variant="mini"
|
||||
sx={{
|
||||
color: (theme) => theme.colors.danger.A700,
|
||||
}}
|
||||
{...props}>
|
||||
{props.children}
|
||||
</Typography>
|
||||
);
|
||||
};
|
||||
|
||||
export default InvalidInputMessage;
|
|
@ -1,33 +0,0 @@
|
|||
import { VerticallyCentered } from 'components/Container';
|
||||
import { SetupMode } from 'pages/two-factor/setup';
|
||||
import SetupManualMode from 'pages/two-factor/setup/ManualMode';
|
||||
import SetupQRMode from 'pages/two-factor/setup/QRMode';
|
||||
import React, { useState } from 'react';
|
||||
import { TwoFactorSecret } from 'types/user';
|
||||
|
||||
interface Iprops {
|
||||
twoFactorSecret: TwoFactorSecret;
|
||||
}
|
||||
export function TwoFactorSetup({ twoFactorSecret }: Iprops) {
|
||||
const [setupMode, setSetupMode] = useState<SetupMode>(SetupMode.QR_CODE);
|
||||
|
||||
const changeToManualMode = () => setSetupMode(SetupMode.MANUAL_CODE);
|
||||
|
||||
const changeToQRMode = () => setSetupMode(SetupMode.QR_CODE);
|
||||
|
||||
return (
|
||||
<VerticallyCentered sx={{ mb: 3 }}>
|
||||
{setupMode === SetupMode.QR_CODE ? (
|
||||
<SetupQRMode
|
||||
twoFactorSecret={twoFactorSecret}
|
||||
changeToManualMode={changeToManualMode}
|
||||
/>
|
||||
) : (
|
||||
<SetupManualMode
|
||||
twoFactorSecret={twoFactorSecret}
|
||||
changeToQRMode={changeToQRMode}
|
||||
/>
|
||||
)}
|
||||
</VerticallyCentered>
|
||||
);
|
||||
}
|
|
@ -1,106 +0,0 @@
|
|||
/* eslint-disable @typescript-eslint/no-unused-vars */
|
||||
import { Formik, FormikHelpers } from 'formik';
|
||||
import React, { FC, useRef, useState } from 'react';
|
||||
import OtpInput from 'react-otp-input';
|
||||
import { t } from 'i18next';
|
||||
|
||||
import SubmitButton from 'components/SubmitButton';
|
||||
import { VerticallyCentered, CenteredFlex } from 'components/Container';
|
||||
import { Box, Typography, TypographyProps } from '@mui/material';
|
||||
import InvalidInputMessage from './InvalidInputMessage';
|
||||
import { sleep } from 'utils/common';
|
||||
|
||||
interface formValues {
|
||||
otp: string;
|
||||
}
|
||||
interface Props {
|
||||
onSubmit: VerifyTwoFactorCallback;
|
||||
buttonText: string;
|
||||
}
|
||||
|
||||
export type VerifyTwoFactorCallback = (
|
||||
otp: string,
|
||||
markSuccessful: () => Promise<void>
|
||||
) => Promise<void>;
|
||||
|
||||
export default function VerifyTwoFactor(props: Props) {
|
||||
const [waiting, setWaiting] = useState(false);
|
||||
const otpInputRef = useRef(null);
|
||||
const [success, setSuccess] = useState(false);
|
||||
|
||||
const markSuccessful = async () => {
|
||||
setWaiting(false);
|
||||
setSuccess(true);
|
||||
await sleep(1000);
|
||||
};
|
||||
|
||||
const submitForm = async (
|
||||
{ otp }: formValues,
|
||||
{ setFieldError, resetForm }: FormikHelpers<formValues>
|
||||
) => {
|
||||
try {
|
||||
setWaiting(true);
|
||||
await props.onSubmit(otp, markSuccessful);
|
||||
} catch (e) {
|
||||
resetForm();
|
||||
for (let i = 0; i < 6; i++) {
|
||||
otpInputRef.current?.focusPrevInput();
|
||||
}
|
||||
setFieldError('otp', `${t('UNKNOWN_ERROR')} ${e.message}`);
|
||||
}
|
||||
setWaiting(false);
|
||||
};
|
||||
|
||||
const onChange =
|
||||
(callback: Function, triggerSubmit: Function) => (otp: string) => {
|
||||
callback(otp);
|
||||
if (otp.length === 6) {
|
||||
triggerSubmit(otp);
|
||||
}
|
||||
};
|
||||
return (
|
||||
<Formik<formValues>
|
||||
initialValues={{ otp: '' }}
|
||||
validateOnChange={false}
|
||||
validateOnBlur={false}
|
||||
onSubmit={submitForm}>
|
||||
{({ values, errors, handleChange, handleSubmit, submitForm }) => (
|
||||
<VerticallyCentered>
|
||||
<form noValidate onSubmit={handleSubmit}>
|
||||
<Typography mb={2} variant="small" color="text.muted">
|
||||
{t('ENTER_TWO_FACTOR_OTP')}
|
||||
</Typography>
|
||||
<Box my={2}>
|
||||
<OtpInput
|
||||
ref={otpInputRef}
|
||||
shouldAutoFocus
|
||||
value={values.otp}
|
||||
onChange={onChange(
|
||||
handleChange('otp'),
|
||||
submitForm
|
||||
)}
|
||||
numInputs={6}
|
||||
separator={'-'}
|
||||
isInputNum
|
||||
className={'otp-input'}
|
||||
/>
|
||||
{errors.otp && (
|
||||
<CenteredFlex sx={{ mt: 1 }}>
|
||||
<InvalidInputMessage>
|
||||
{t('INCORRECT_CODE')}
|
||||
</InvalidInputMessage>
|
||||
</CenteredFlex>
|
||||
)}
|
||||
</Box>
|
||||
<SubmitButton
|
||||
buttonText={props.buttonText}
|
||||
loading={waiting}
|
||||
success={success}
|
||||
disabled={values.otp.length < 6}
|
||||
/>
|
||||
</form>
|
||||
</VerticallyCentered>
|
||||
)}
|
||||
</Formik>
|
||||
);
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
import { VerticallyCentered } from 'components/Container';
|
||||
import { styled } from '@mui/material';
|
||||
export const QRCode = styled('img')(
|
||||
({ theme }) => `
|
||||
height: 200px;
|
||||
width: 200px;
|
||||
margin: ${theme.spacing(2)};
|
||||
`
|
||||
);
|
||||
|
||||
export const LoadingQRCode = styled(VerticallyCentered)(
|
||||
({ theme }) => `
|
||||
width:200px;
|
||||
aspect-ratio:1;
|
||||
border: 1px solid ${theme.palette.grey.A200};
|
||||
margin: ${theme.spacing(2)};
|
||||
`
|
||||
);
|
|
@ -1,26 +0,0 @@
|
|||
import React from 'react';
|
||||
import { Typography } from '@mui/material';
|
||||
import CodeBlock from 'components/CodeBlock';
|
||||
import { TwoFactorSecret } from 'types/user';
|
||||
import { t } from 'i18next';
|
||||
|
||||
import LinkButton from 'components/pages/gallery/LinkButton';
|
||||
|
||||
interface Iprops {
|
||||
twoFactorSecret: TwoFactorSecret;
|
||||
changeToQRMode: () => void;
|
||||
}
|
||||
export default function SetupManualMode({
|
||||
twoFactorSecret,
|
||||
changeToQRMode,
|
||||
}: Iprops) {
|
||||
return (
|
||||
<>
|
||||
<Typography>{t('TWO_FACTOR_MANUAL_CODE_INSTRUCTION')}</Typography>
|
||||
<CodeBlock code={twoFactorSecret?.secretCode} my={2} />
|
||||
<LinkButton onClick={changeToQRMode}>
|
||||
{t('SCAN_QR_CODE')}
|
||||
</LinkButton>
|
||||
</>
|
||||
);
|
||||
}
|
|
@ -1,39 +0,0 @@
|
|||
import React from 'react';
|
||||
import EnteSpinner from 'components/EnteSpinner';
|
||||
import { TwoFactorSecret } from 'types/user';
|
||||
import { t } from 'i18next';
|
||||
|
||||
import {
|
||||
LoadingQRCode,
|
||||
QRCode,
|
||||
} from '../../../components/TwoFactor/styledComponents';
|
||||
import { Typography } from '@mui/material';
|
||||
import LinkButton from 'components/pages/gallery/LinkButton';
|
||||
|
||||
interface Iprops {
|
||||
twoFactorSecret: TwoFactorSecret;
|
||||
changeToManualMode: () => void;
|
||||
}
|
||||
|
||||
export default function SetupQRMode({
|
||||
twoFactorSecret,
|
||||
changeToManualMode,
|
||||
}: Iprops) {
|
||||
return (
|
||||
<>
|
||||
<Typography>{t('TWO_FACTOR_QR_INSTRUCTION')}</Typography>
|
||||
{!twoFactorSecret ? (
|
||||
<LoadingQRCode>
|
||||
<EnteSpinner />
|
||||
</LoadingQRCode>
|
||||
) : (
|
||||
<QRCode
|
||||
src={`data:image/png;base64,${twoFactorSecret?.qrCode}`}
|
||||
/>
|
||||
)}
|
||||
<LinkButton onClick={changeToManualMode}>
|
||||
{t('ENTER_CODE_MANUALLY')}
|
||||
</LinkButton>
|
||||
</>
|
||||
);
|
||||
}
|
Loading…
Add table
Reference in a new issue