import React, { useContext, useEffect, useState } from 'react'; import constants from 'utils/strings/constants'; import { getData, LS_KEYS } from 'utils/storage/localStorage'; import { useRouter } from 'next/router'; import { KeyAttributes } from 'types'; import CryptoWorker, { setSessionKeys } from 'utils/crypto'; import SingleInputForm from 'components/SingleInputForm'; import MessageDialog from 'components/MessageDialog'; import Container from 'components/Container'; import { Card, Button } from 'react-bootstrap'; import { AppContext } from 'pages/_app'; import LogoImg from 'components/LogoImg'; import { logError } from 'utils/sentry'; export default function Recover() { const router = useRouter(); const [keyAttributes, setKeyAttributes] = useState(); const [messageDialogView, SetMessageDialogView] = useState(false); const appContext = useContext(AppContext); useEffect(() => { router.prefetch('/gallery'); const user = getData(LS_KEYS.USER); const keyAttributes = getData(LS_KEYS.KEY_ATTRIBUTES); if (!user?.token) { router.push('/'); } else if (!keyAttributes) { router.push('/generate'); } else { setKeyAttributes(keyAttributes); } appContext.showNavBar(false); }, []); const recover = async (recoveryKey: string, setFieldError) => { try { const cryptoWorker = await new CryptoWorker(); const masterKey: string = await cryptoWorker.decryptB64( keyAttributes.masterKeyEncryptedWithRecoveryKey, keyAttributes.masterKeyDecryptionNonce, await cryptoWorker.fromHex(recoveryKey), ); setSessionKeys(masterKey); router.push('/changePassword'); } catch (e) { logError(e); setFieldError('passphrase', constants.INCORRECT_RECOVERY_KEY); } }; return ( <> {constants.RECOVER_ACCOUNT}
SetMessageDialogView(false)} attributes={{ title: constants.SORRY, close: {}, content: constants.NO_RECOVERY_KEY_MESSAGE, }} /> ); }