三方系统密码加密
This commit is contained in:
parent
10e75b9769
commit
3d454a0802
@ -50,12 +50,8 @@ const DeleteDialog: React.FC<DeleteDialogProps> = ({
|
||||
onSuccess();
|
||||
onOpenChange(false);
|
||||
} catch (error) {
|
||||
// 错误已经在 request 拦截器中显示了,这里只需要记录日志
|
||||
console.error('删除失败:', error);
|
||||
toast({
|
||||
title: '删除失败',
|
||||
description: error instanceof Error ? error.message : '未知错误',
|
||||
variant: 'destructive'
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@ -40,22 +40,32 @@ const EditDialog: React.FC<EditDialogProps> = ({
|
||||
authType: 'BASIC' as AuthType,
|
||||
});
|
||||
|
||||
// 保存原始密码和Token(用于判断是否被修改)
|
||||
const [originalPassword, setOriginalPassword] = useState<string | undefined>(undefined);
|
||||
const [originalToken, setOriginalToken] = useState<string | undefined>(undefined);
|
||||
|
||||
useEffect(() => {
|
||||
if (open) {
|
||||
if (record) {
|
||||
// 保存原始掩码值
|
||||
setOriginalPassword(record.password);
|
||||
setOriginalToken(record.token);
|
||||
|
||||
setFormData({
|
||||
name: record.name,
|
||||
type: record.type,
|
||||
url: record.url,
|
||||
authType: record.authType,
|
||||
username: record.username,
|
||||
password: undefined, // 不显示密码
|
||||
token: undefined,
|
||||
password: record.password || '', // 显示掩码或空
|
||||
token: record.token || '', // 显示掩码或空
|
||||
sort: record.sort,
|
||||
remark: record.remark,
|
||||
enabled: record.enabled,
|
||||
});
|
||||
} else {
|
||||
setOriginalPassword(undefined);
|
||||
setOriginalToken(undefined);
|
||||
setFormData({ enabled: true, sort: 1, authType: 'BASIC' as AuthType });
|
||||
}
|
||||
}
|
||||
@ -89,36 +99,71 @@ const EditDialog: React.FC<EditDialogProps> = ({
|
||||
toast({ title: '提示', description: '请输入用户名', variant: 'destructive' });
|
||||
return;
|
||||
}
|
||||
// 新建时必须输入密码
|
||||
if (!record && !formData.password) {
|
||||
toast({ title: '提示', description: '请输入密码', variant: 'destructive' });
|
||||
return;
|
||||
}
|
||||
// 编辑时,如果清空了原有密码(掩码),也需要输入新密码
|
||||
if (record && originalPassword === '********' && !formData.password?.trim()) {
|
||||
toast({ title: '提示', description: '请输入新密码或保持原密码不变', variant: 'destructive' });
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (formData.authType === 'TOKEN') {
|
||||
// 新建时必须输入Token
|
||||
if (!record && !formData.token) {
|
||||
toast({ title: '提示', description: '请输入访问令牌', variant: 'destructive' });
|
||||
return;
|
||||
}
|
||||
// 编辑时,如果清空了原有Token(掩码),也需要输入新Token
|
||||
if (record && originalToken === '********' && !formData.token?.trim()) {
|
||||
toast({ title: '提示', description: '请输入新令牌或保持原令牌不变', variant: 'destructive' });
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// 准备提交数据
|
||||
const submitData: ExternalSystemRequest = {
|
||||
...formData as ExternalSystemRequest,
|
||||
};
|
||||
|
||||
// 处理密码:如果用户没有修改,保持掩码;如果修改了,提交新值
|
||||
if (formData.authType === 'BASIC') {
|
||||
if (record && formData.password === originalPassword) {
|
||||
// 没有修改,保持掩码
|
||||
submitData.password = originalPassword;
|
||||
} else {
|
||||
// 修改了或新建,提交新密码
|
||||
submitData.password = formData.password;
|
||||
}
|
||||
}
|
||||
|
||||
// 处理Token:如果用户没有修改,保持掩码;如果修改了,提交新值
|
||||
if (formData.authType === 'TOKEN') {
|
||||
if (record && formData.token === originalToken) {
|
||||
// 没有修改,保持掩码
|
||||
submitData.token = originalToken;
|
||||
} else {
|
||||
// 修改了或新建,提交新Token
|
||||
submitData.token = formData.token;
|
||||
}
|
||||
}
|
||||
|
||||
if (record) {
|
||||
await updateExternalSystem(record.id, formData as ExternalSystemRequest);
|
||||
await updateExternalSystem(record.id, submitData);
|
||||
toast({ title: '更新成功', description: `系统 "${formData.name}" 已更新` });
|
||||
} else {
|
||||
await createExternalSystem(formData as ExternalSystemRequest);
|
||||
await createExternalSystem(submitData);
|
||||
toast({ title: '创建成功', description: `系统 "${formData.name}" 已创建` });
|
||||
}
|
||||
|
||||
onSuccess();
|
||||
onOpenChange(false);
|
||||
} catch (error) {
|
||||
// 错误已经在 request 拦截器中显示了,这里只需要记录日志
|
||||
console.error('保存失败:', error);
|
||||
toast({
|
||||
title: '保存失败',
|
||||
description: error instanceof Error ? error.message : '未知错误',
|
||||
variant: 'destructive'
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
@ -196,13 +241,20 @@ const EditDialog: React.FC<EditDialogProps> = ({
|
||||
/>
|
||||
</div>
|
||||
<div className="grid gap-2">
|
||||
<Label htmlFor="password">密码 {!record && '*'}</Label>
|
||||
<Label htmlFor="password">
|
||||
密码 {!record && '*'}
|
||||
{record && originalPassword === '********' && (
|
||||
<span className="ml-2 text-xs text-muted-foreground">
|
||||
(已配置,修改请输入新密码)
|
||||
</span>
|
||||
)}
|
||||
</Label>
|
||||
<Input
|
||||
id="password"
|
||||
type="password"
|
||||
value={formData.password || ''}
|
||||
onChange={(e) => setFormData({ ...formData, password: e.target.value })}
|
||||
placeholder={record ? '不修改请留空' : '请输入密码'}
|
||||
placeholder={record ? (originalPassword === '********' ? '保持不变或输入新密码' : '请输入密码') : '请输入密码'}
|
||||
/>
|
||||
</div>
|
||||
</>
|
||||
@ -210,13 +262,20 @@ const EditDialog: React.FC<EditDialogProps> = ({
|
||||
|
||||
{formData.authType === 'TOKEN' && (
|
||||
<div className="grid gap-2">
|
||||
<Label htmlFor="token">访问令牌 {!record && '*'}</Label>
|
||||
<Label htmlFor="token">
|
||||
访问令牌 {!record && '*'}
|
||||
{record && originalToken === '********' && (
|
||||
<span className="ml-2 text-xs text-muted-foreground">
|
||||
(已配置,修改请输入新令牌)
|
||||
</span>
|
||||
)}
|
||||
</Label>
|
||||
<Input
|
||||
id="token"
|
||||
type="password"
|
||||
value={formData.token || ''}
|
||||
onChange={(e) => setFormData({ ...formData, token: e.target.value })}
|
||||
placeholder={record ? '不修改请留空' : '请输入访问令牌'}
|
||||
placeholder={record ? (originalToken === '********' ? '保持不变或输入新令牌' : '请输入访问令牌') : '请输入访问令牌'}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user