import React, {useRef, useState} from 'react'; import {Alert, Button, Form, Input, Modal, Typography} from "antd"; import {SettingProps} from "./SettingPage"; import {ProForm, ProFormInstance, ProFormSwitch, ProFormText, ProFormTextArea} from "@ant-design/pro-components"; import {useMutation} from "@tanstack/react-query"; import propertyApi from "../../api/property-api"; import {useTranslation} from "react-i18next"; const {Title, Paragraph} = Typography; const SshdSetting = ({get, set}: SettingProps) => { let {t} = useTranslation(); const formRef = useRef(null); let [enabled, setEnabled] = useState(false); let [portForwardEnabled, setPortForwardEnabled] = useState(false); let [privateKeyExists, setPrivateKeyExists] = useState(false); let [privateKeyModalOpen, setPrivateKeyModalOpen] = useState(false); let [privateKeySaving, setPrivateKeySaving] = useState(false); const [privateKeyForm] = Form.useForm(); const wrapSet = async (values: any) => { await formRef.current?.validateFields(); await set(values); } const wrapGet = async () => { let values = await get(); setEnabled(values['ssh-server-enabled']); setPortForwardEnabled(values['ssh-server-port-forwarding-enabled']); const existsValue = values['ssh-server-private-key-exists']; const exists = typeof existsValue === 'string' ? existsValue.toLowerCase() === 'true' : Boolean(existsValue); setPrivateKeyExists(exists); return values; } let mutation = useMutation({ mutationFn: propertyApi.genRSAPrivateKey, onSuccess: data => { privateKeyForm.setFieldsValue({ privateKey: data }); } }); const openPrivateKeyModal = () => { privateKeyForm.resetFields(); setPrivateKeyModalOpen(true); }; const handlePrivateKeySave = async () => { const values = await privateKeyForm.validateFields(); setPrivateKeySaving(true); try { const result = await set({'ssh-server-private-key': values.privateKey}); if (result !== false) { setPrivateKeyExists(true); setPrivateKeyModalOpen(false); privateKeyForm.resetFields(); } } finally { setPrivateKeySaving(false); } }; return (
{t('settings.sshd.setting')}
{t('settings.sshd.usage')}
{t('settings.sshd.mode_proxy')}
ssh username@host -p port
{t('settings.sshd.direct_proxy')}
ssh username:asset-name@host -p port
{privateKeyExists ? t('settings.sshd.private_key_status_set') : t('settings.sshd.private_key_status_empty')}
setPrivateKeyModalOpen(false)} okText={t('actions.save')} cancelText={t('actions.cancel')} confirmLoading={privateKeySaving} destroyOnClose >
{t('settings.sshd.private_key_modal_tip')}
); }; export default SshdSetting;