mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-11-03 03:35:04 +03:00
92303094fd
Redacted secrets (SMTP password, Telegram bot token, LDAP password) are always served blank to the browser, so the update path treats a blank submission as "unchanged" and silently restores the stored value. That made a once-set secret impossible to remove without editing the database — e.g. switching to a passwordless localhost SMTP relay kept sending the old credentials forever. Blank stays "unchanged"; clearing is now its own signal. The update request carries explicit clear flags (request-scoped fields on the controller form, so they are never persisted as settings rows), and preserveRedactedSecrets skips the restore for a flagged secret. Each secret field gets a Clear/Undo button that arms the flag; typing a new value disarms it. The 2FA token keeps its existing behavior: it is already clearable by disabling 2FA. Closes #5724
46 lines
1.1 KiB
TypeScript
46 lines
1.1 KiB
TypeScript
import { Button, Input, Space } from 'antd';
|
|
import { useTranslation } from 'react-i18next';
|
|
|
|
interface SecretInputProps {
|
|
value: string;
|
|
configured: boolean;
|
|
clearArmed: boolean;
|
|
placeholder: string;
|
|
onChange: (value: string) => void;
|
|
onClearArmedChange: (armed: boolean) => void;
|
|
}
|
|
|
|
export default function SecretInput({
|
|
value,
|
|
configured,
|
|
clearArmed,
|
|
placeholder,
|
|
onChange,
|
|
onClearArmedChange,
|
|
}: SecretInputProps) {
|
|
const { t } = useTranslation();
|
|
return (
|
|
<Space.Compact style={{ width: '100%' }}>
|
|
<Input.Password
|
|
value={value}
|
|
placeholder={configured && !clearArmed ? placeholder : ''}
|
|
onChange={(e) => {
|
|
onChange(e.target.value);
|
|
if (clearArmed) onClearArmedChange(false);
|
|
}}
|
|
/>
|
|
{configured && (
|
|
<Button
|
|
danger={clearArmed}
|
|
onClick={() => {
|
|
onChange('');
|
|
onClearArmedChange(!clearArmed);
|
|
}}
|
|
>
|
|
{clearArmed ? t('pages.settings.secretClearUndo') : t('pages.settings.secretClear')}
|
|
</Button>
|
|
)}
|
|
</Space.Compact>
|
|
);
|
|
}
|