import { useTranslation } from 'react-i18next'; import { HelpText } from './HelpText'; import { FieldLabel, FieldInput } from './formUtils'; import { StringArrayEditor } from './StringArrayEditor'; import type { SectionFormProps } from './types'; /** * Server TLS settings — binds to the `server.tls` config object. * * Editable fields: enabled, certFile, keyFile, httpRedirect, * httpRedirectPort, redirectHost, selfSignedHosts. * * Fields intentionally omitted from the UI (left to config.yaml): * minVersion, selfSignedDir. The onChange path mechanism in ConfigFormInner * uses setNestedValue which does a shallow-merge, so unedited fields are * preserved on save automatically. * * TODO(server-tls-info): cert source/expiry/fingerprint panel + regenerate * button need a GET /api/server/tls-info endpoint (future). */ export function ServerTlsForm({ config, onChange }: SectionFormProps) { const { t } = useTranslation('settings'); // Navigate to the server.tls sub-object; fall back to empty object if absent. const tls = (config?.server?.tls) ?? {}; return (

{t('serverTls.title')}

{/* Restart-required banner — always visible */}
{t('serverTls.restartBanner')}
{/* Enable HTTPS */}
{t('serverTls.enabledHelp')}
{/* Certificate file */}
{t('serverTls.certFile')} onChange('server.tls.certFile', v || undefined)} placeholder="/etc/ssl/certs/server.pem" />
{/* Private key file */}
{t('serverTls.keyFile')} onChange('server.tls.keyFile', v || undefined)} placeholder="/etc/ssl/private/server.key" /> {t('serverTls.certHelp')}
{/* HTTP → HTTPS redirect */}
{/* HTTP redirect port */}
{t('serverTls.httpRedirectPort')} { const n = parseInt(v, 10); onChange('server.tls.httpRedirectPort', isNaN(n) ? undefined : n); }} placeholder="9080" />
{/* Redirect host (optional) */}
{t('serverTls.redirectHost')} onChange('server.tls.redirectHost', v || undefined)} placeholder="example.com" />
{/* Additional SAN hostnames for self-signed cert */}
{t('serverTls.selfSignedHosts')} onChange('server.tls.selfSignedHosts', v)} placeholder="example.com / 10.0.0.10" />
); }