From ca427c7aacbdfc9fdf5cd8b8567634c117d1c65f Mon Sep 17 00:00:00 2001 From: admin Date: Sun, 19 Apr 2026 22:00:16 +0800 Subject: [PATCH] fix: skip MFA dialog when MFA is not enabled --- web/src/pages/assets/AssetPost.tsx | 26 +++++++++++++++++-- .../assets/components/AccountTypeForm.tsx | 10 +++---- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/web/src/pages/assets/AssetPost.tsx b/web/src/pages/assets/AssetPost.tsx index 3b080c5e9..56f0446a0 100644 --- a/web/src/pages/assets/AssetPost.tsx +++ b/web/src/pages/assets/AssetPost.tsx @@ -1,4 +1,4 @@ -import React, {useRef, useState} from 'react'; +import React, {useEffect, useRef, useState} from 'react'; import {App, Collapse, Form, Input, InputNumber, Space, theme, TreeDataNode,} from "antd"; import { ProForm, @@ -23,6 +23,7 @@ import MultiFactorAuthentication from "@/pages/account/MultiFactorAuthentication import AssetLogo from "./components/AssetLogo"; import AccountTypeForm from "./components/AccountTypeForm"; import AssetAdvancedSettings from "./components/AssetAdvancedSettings"; +import accountApi from "@/api/account-api"; const formItemLayout = { labelCol: {span: 4}, @@ -44,9 +45,30 @@ const AssetsPost = function ({assetId, groupId, copy, onClose}: AssetsInfoProps) let [logo, setLogo] = useState(); let [decrypted, setDecrypted] = useState(false); let [mfaOpen, setMfaOpen] = useState(false); + let [mfaSupported, setMfaSupported] = useState(false); let {message} = App.useApp(); + useEffect(() => { + accountApi.getSecurityTokenSupportTypes().then(types => { + setMfaSupported(types.length > 0); + }); + }, []); + + const handleViewSecret = async () => { + if (mfaSupported) { + setMfaOpen(true); + } else { + const res = await assetsApi.decrypt(assetId, ''); + formRef.current?.setFieldsValue({ + 'password': res.password, + 'privateKey': res.privateKey, + 'passphrase': res.passphrase, + }); + setDecrypted(true); + } + }; + const get = async () => { if (assetId) { let asset = await assetsApi.getById(assetId); @@ -135,7 +157,7 @@ const AssetsPost = function ({assetId, groupId, copy, onClose}: AssetsInfoProps) copy={copy} decrypted={decrypted} setDecrypted={setDecrypted} - setMfaOpen={setMfaOpen} + onViewSecret={handleViewSecret} formRef={formRef} /> )} diff --git a/web/src/pages/assets/components/AccountTypeForm.tsx b/web/src/pages/assets/components/AccountTypeForm.tsx index b25440f8c..663f0ba7f 100644 --- a/web/src/pages/assets/components/AccountTypeForm.tsx +++ b/web/src/pages/assets/components/AccountTypeForm.tsx @@ -12,7 +12,7 @@ interface AccountTypeFormProps { copy?: boolean; decrypted: boolean; setDecrypted: (value: boolean) => void; - setMfaOpen: (value: boolean) => void; + onViewSecret: () => void; formRef?: React.RefObject; } @@ -23,7 +23,7 @@ const AccountTypeForm: React.FC = ({ copy, decrypted, setDecrypted, - setMfaOpen, + onViewSecret, formRef }) => { const {t} = useTranslation(); @@ -59,7 +59,7 @@ const AccountTypeForm: React.FC = ({ visibilityToggle: { onVisibleChange: (visible) => { if (assetId && !copy && visible && !decrypted) { - setMfaOpen(true) + onViewSecret() } } }, @@ -98,9 +98,7 @@ const AccountTypeForm: React.FC = ({