diff --git a/frontend/src/pages/inbounds/InboundFormModal.tsx b/frontend/src/pages/inbounds/InboundFormModal.tsx index 538d6da1..ad6f86b9 100644 --- a/frontend/src/pages/inbounds/InboundFormModal.tsx +++ b/frontend/src/pages/inbounds/InboundFormModal.tsx @@ -572,6 +572,41 @@ export default function InboundFormModal({ form.setFieldValue(['streamSettings', 'tlsSettings', 'settings', 'echConfigList'], ''); }; + const setCertFromPanel = async (certName: number) => { + setSaving(true); + try { + const msg = await HttpUtil.post('/panel/setting/all', undefined, { silent: true }); + if (msg?.success) { + const obj = msg.obj as { webCertFile?: string; webKeyFile?: string }; + if (!obj.webCertFile && !obj.webKeyFile) { + messageApi.warning(t('pages.inbounds.setDefaultCertEmpty')); + return; + } + form.setFieldValue( + ['streamSettings', 'tlsSettings', 'certificates', certName, 'certificateFile'], + obj.webCertFile ?? '', + ); + form.setFieldValue( + ['streamSettings', 'tlsSettings', 'certificates', certName, 'keyFile'], + obj.webKeyFile ?? '', + ); + } + } finally { + setSaving(false); + } + }; + + const clearCertFiles = (certName: number) => { + form.setFieldValue( + ['streamSettings', 'tlsSettings', 'certificates', certName, 'certificateFile'], + '', + ); + form.setFieldValue( + ['streamSettings', 'tlsSettings', 'certificates', certName, 'keyFile'], + '', + ); + }; + const onSecurityChange = async (next: string) => { const current = (form.getFieldValue('streamSettings') as Record) ?? {}; const cleaned: Record = { ...current, security: next }; @@ -2649,6 +2684,20 @@ export default function InboundFormModal({ > + + + + + + ) : ( <> diff --git a/web/translation/en-US.json b/web/translation/en-US.json index 384f20bc..6830f867 100644 --- a/web/translation/en-US.json +++ b/web/translation/en-US.json @@ -355,6 +355,7 @@ "IPLimitlogDesc": "The IP history log. (to re-enable the inbound after disabling, clear the log)", "IPLimitlogclear": "Clear the Log", "setDefaultCert": "Set Cert from Panel", + "setDefaultCertEmpty": "No certificate is configured for the panel. Set one under Settings first.", "streamTab": "Stream", "securityTab": "Security", "sniffingTab": "Sniffing",