import { useTranslation } from 'react-i18next';
import { HelpText } from './HelpText';
import { FieldLabel, FieldInput } from './formUtils';
import type { SectionFormProps } from './types';
/**
* SSH global config editor (`ssh.*` + nested `ssh.console.*`).
*
* Edits the `ssh.*` block of config.yaml via the same draft / save-bar flow as
* other ConfigFormInner sections. Admin sub-tools (global connections /
* grants / rotation / audit) hit their own per-row endpoints and live in
* sibling subtabs of `SshForm`.
*/
export function SshConfigForm({ config, onChange, overriddenByEnv: _overriddenByEnv }: SectionFormProps) {
const { t } = useTranslation('settings');
const ssh = config.ssh ?? {};
const console_ = ssh.console ?? {};
return (
{t('ssh.config.enableHelp')}
{t('ssh.config.allowPrivateHelp')}
{t('ssh.config.adminBypassHelp')}
Limits / Timeouts
{t('ssh.config.callTimeout')}
onChange('ssh.callTimeoutSeconds', Number(v))}
/>
{t('ssh.config.callTimeoutHelp')}
Max output bytes
onChange('ssh.maxOutputBytes', Number(v))}
/>
{t('ssh.config.maxOutputHelp')}
Max upload size (MB)
onChange('ssh.maxUploadSizeMb', Number(v))}
/>
Max download size (MB)
onChange('ssh.maxDownloadSizeMb', Number(v))}
/>
{t('ssh.config.transferSizeHelp')}
{t('ssh.config.auditRetention')}
onChange('ssh.auditRetentionDays', Number(v))}
/>
{t('ssh.config.auditRetentionHelp')}
Abuse detection
{t('ssh.config.abuseHelp')}
{t('ssh.config.abuseWindow')}
onChange('ssh.abuseWindowMinutes', Number(v))}
/>
Failure threshold
onChange('ssh.abuseFailureThreshold', Number(v))}
/>
{t('ssh.config.abuseLock')}
onChange('ssh.abuseLockMinutes', Number(v))}
/>
{t('ssh.config.consoleSectionTitle')}
{t('ssh.config.consoleEnableHelp')}
{t('ssh.config.idleTimeout')}
onChange('ssh.console.idleTimeoutSeconds', Number(v))}
/>
{t('ssh.config.idleTimeoutHelp')}
{t('ssh.config.maxSessionDuration')}
onChange('ssh.console.maxSessionDurationSeconds', Number(v))}
/>
{t('ssh.config.maxDurationHelp')}
Scrollback bytes
onChange('ssh.console.scrollbackBytes', Number(v))}
/>
{t('ssh.config.scrollbackHelp')}
Max sessions per connection
onChange('ssh.console.maxSessionsPerConnection', Number(v))}
/>
{t('ssh.config.maxSessionsHelp')}
Max input bytes per Send
onChange('ssh.console.maxInputBytesPerSend', Number(v))}
/>
{t('ssh.config.maxInputHelp')}
Auto-inject screen lines
onChange('ssh.console.autoInjectScreenLines', Number(v))}
/>
{t('ssh.config.autoInjectHelp')}
Default cols
onChange('ssh.console.defaultCols', Number(v))}
/>
Default rows
onChange('ssh.console.defaultRows', Number(v))}
/>
{t('ssh.config.ptySizeHelp')}
);
}