import { Box, Checkbox, FormControlLabel, Typography } from '@mui/material'; import { Spacer } from '../../common/Spacer'; import { Return } from '../../assets/Icons/Return'; import { CustomButton, CustomLabel, TextP } from '../../styles/App-styles'; import { PasswordField } from '../PasswordField/PasswordField'; import { ErrorText } from '../ErrorText/ErrorText'; import Logo1Dark from '../../assets/svgs/Logo1Dark.svg'; import { useTranslation } from 'react-i18next'; import { saveFileToDisk } from '../../utils/generateWallet/generateWallet'; import { useState } from 'react'; import { decryptStoredWallet } from '../../utils/decryptWallet'; import PhraseWallet from '../../utils/generateWallet/phrase-wallet'; import { crypto, walletVersion } from '../../constants/decryptWallet'; export const DownloadWallet = ({ returnToMain, setIsLoading, showInfo, rawWallet, setWalletToBeDownloaded, walletToBeDownloaded, }) => { const [walletToBeDownloadedPassword, setWalletToBeDownloadedPassword] = useState(''); const [newPassword, setNewPassword] = useState(''); const [keepCurrentPassword, setKeepCurrentPassword] = useState(true); const [walletToBeDownloadedError, setWalletToBeDownloadedError] = useState(''); const { t } = useTranslation(['auth']); const saveFileToDiskFunc = async () => { try { await saveFileToDisk( walletToBeDownloaded.wallet, walletToBeDownloaded.qortAddress ); } catch (error: any) { setWalletToBeDownloadedError(error?.message); } }; const saveWalletFunc = async (password: string, newPassword) => { let wallet = structuredClone(rawWallet); const res = await decryptStoredWallet(password, wallet); const wallet2 = new PhraseWallet(res, wallet?.version || walletVersion); const passwordToUse = newPassword || password; wallet = await wallet2.generateSaveWalletData( passwordToUse, crypto.kdfThreads, () => {} ); setWalletToBeDownloaded({ wallet, qortAddress: rawWallet.address0, }); return { wallet, qortAddress: rawWallet.address0, }; }; const confirmPasswordToDownload = async () => { try { setWalletToBeDownloadedError(''); if (!keepCurrentPassword && !newPassword) { setWalletToBeDownloadedError( t('auth:wallet.error.missing_new_password', { postProcess: 'capitalize', }) ); return; } if (!walletToBeDownloadedPassword) { setWalletToBeDownloadedError( t('auth:wallet.error.missing_password', { postProcess: 'capitalize' }) ); return; } setIsLoading(true); await new Promise((res) => { setTimeout(() => { res(); }, 250); }); const newPasswordForWallet = !keepCurrentPassword ? newPassword : null; const res = await saveWalletFunc( walletToBeDownloadedPassword, newPasswordForWallet ); } catch (error: any) { setWalletToBeDownloadedError(error?.message); } finally { setIsLoading(false); } }; return ( <>
{t('auth:download_account', { postProcess: 'capitalize' })} {!walletToBeDownloaded && ( <> {t('auth:wallet.password_confirmation', { postProcess: 'capitalize', })} setWalletToBeDownloadedPassword(e.target.value)} /> setKeepCurrentPassword(e.target.checked)} checked={keepCurrentPassword} edge="start" tabIndex={-1} disableRipple /> } label={ {t('auth:wallet.keep_password', { postProcess: 'capitalize', })} } /> {!keepCurrentPassword && ( <> {t('auth:wallet.new_password', { postProcess: 'capitalize', })} setNewPassword(e.target.value)} /> )} {t('auth:password_confirmation', { postProcess: 'capitalize', })} {walletToBeDownloadedError} )} {walletToBeDownloaded && ( <> { await saveFileToDiskFunc(); await showInfo({ message: t('auth:keep_secure', { postProcess: 'capitalize', }), }); }} > {t('auth:download_account', { postProcess: 'capitalize', })} )} ); };