import React, { useState, useEffect, useContext } from 'react'; import Container from 'components/Container'; import Card from 'react-bootstrap/Card'; import Form from 'react-bootstrap/Form'; import constants from 'utils/strings/constants'; import { LS_KEYS, getData, setData } from 'utils/storage/localStorage'; import { useRouter } from 'next/router'; import { Formik, FormikHelpers } from 'formik'; import * as Yup from 'yup'; import { verifyOtt, getOtt, logoutUser, clearFiles, isTokenValid, } from 'services/userService'; import { setIsFirstLogin } from 'utils/storage'; import SubmitButton from 'components/SubmitButton'; import { clearKeys } from 'utils/storage/sessionStorage'; import { AppContext } from 'pages/_app'; import LogoImg from 'components/LogoImg'; interface formValues { ott: string; } export default function Verify() { const [email, setEmail] = useState(''); const [loading, setLoading] = useState(false); const [resend, setResend] = useState(0); const router = useRouter(); const appContext = useContext(AppContext); useEffect(() => { const main = async () => { router.prefetch('/credentials'); router.prefetch('/generate'); const user = getData(LS_KEYS.USER); if (!user?.email) { router.push('/'); } else if (user.token) { if (await isTokenValid()) { router.push('/credentials'); } else { logoutUser(); } } else { setEmail(user.email); } }; main(); appContext.showNavBar(false); }, []); const onSubmit = async ( { ott }: formValues, { setFieldError }: FormikHelpers, ) => { try { setLoading(true); const resp = await verifyOtt(email, ott); setData(LS_KEYS.USER, { ...getData(LS_KEYS.USER), email, token: resp.data.token, id: resp.data.id, }); const { subscription, keyAttributes } = resp.data; keyAttributes && setData(LS_KEYS.KEY_ATTRIBUTES, keyAttributes); subscription && setData(LS_KEYS.SUBSCRIPTION, subscription); clearFiles(); setIsFirstLogin(true); if (resp.data.keyAttributes?.encryptedKey) { clearKeys(); router.push('/credentials'); } else { router.push('/generate'); } } catch (e) { if (e?.status === 401) { setFieldError('ott', constants.INVALID_CODE); } else { setFieldError('ott', `${constants.UNKNOWN_ERROR} ${e.message}`); } } setLoading(false); }; const resendEmail = async () => { setResend(1); await getOtt(email); setResend(2); setTimeout(() => setResend(0), 3000); }; if (!email) { return null; } return ( {constants.VERIFY_EMAIL} {constants.EMAIL_SENT({ email })} {constants.CHECK_INBOX}

initialValues={{ ott: '' }} validationSchema={Yup.object().shape({ ott: Yup.string().required(constants.REQUIRED), })} validateOnChange={false} validateOnBlur={false} onSubmit={onSubmit} > {({ values, touched, errors, handleChange, handleSubmit, }) => (
{errors.ott}
{resend === 0 && ( {constants.RESEND_MAIL} )} {resend === 1 && ( {constants.SENDING} )} {resend === 2 && ( {constants.SENT} )}
)}
); }