mirror of
https://github.com/usual2970/certimate.git
synced 2025-06-08 13:39:53 +00:00
feat: preset script for backup files on deployment to local and ssh
This commit is contained in:
parent
da6526d5fa
commit
02f806ab99
@ -134,7 +134,24 @@ const DeployNodeConfigFormLocalConfig = ({ form: formInst, formName, disabled, i
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const handlePresetScriptClick = (key: string) => {
|
const handlePresetPreScriptClick = (key: string) => {
|
||||||
|
switch (key) {
|
||||||
|
case "backup_files":
|
||||||
|
{
|
||||||
|
formInst.setFieldValue("shellEnv", SHELLENV_SH);
|
||||||
|
formInst.setFieldValue(
|
||||||
|
"preCommand",
|
||||||
|
`# 请将以下路径替换为实际值
|
||||||
|
cp "${formInst.getFieldValue("certPath")}" "${formInst.getFieldValue("certPath")}.bak" 2>/dev/null || :
|
||||||
|
cp "${formInst.getFieldValue("keyPath")}" "${formInst.getFieldValue("keyPath")}.bak" 2>/dev/null || :
|
||||||
|
`.trim()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const handlePresetPostScriptClick = (key: string) => {
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case "reload_nginx":
|
case "reload_nginx":
|
||||||
{
|
{
|
||||||
@ -149,8 +166,8 @@ const DeployNodeConfigFormLocalConfig = ({ form: formInst, formName, disabled, i
|
|||||||
formInst.setFieldValue(
|
formInst.setFieldValue(
|
||||||
"postCommand",
|
"postCommand",
|
||||||
`# 请将以下变量替换为实际值
|
`# 请将以下变量替换为实际值
|
||||||
$pfxPath = "<your-pfx-path>" # PFX 文件路径
|
$pfxPath = "${formInst.getFieldValue("certPath")}" # PFX 文件路径
|
||||||
$pfxPassword = "<your-pfx-password>" # PFX 密码
|
$pfxPassword = "${formInst.getFieldValue("pfxPassword")}" # PFX 密码
|
||||||
$siteName = "<your-site-name>" # IIS 网站名称
|
$siteName = "<your-site-name>" # IIS 网站名称
|
||||||
$domain = "<your-domain-name>" # 域名
|
$domain = "<your-domain-name>" # 域名
|
||||||
$ipaddr = "<your-binding-ip>" # 绑定 IP,“*”表示所有 IP 绑定
|
$ipaddr = "<your-binding-ip>" # 绑定 IP,“*”表示所有 IP 绑定
|
||||||
@ -186,8 +203,8 @@ Remove-Item -Path "$pfxPath" -Force
|
|||||||
formInst.setFieldValue(
|
formInst.setFieldValue(
|
||||||
"postCommand",
|
"postCommand",
|
||||||
`# 请将以下变量替换为实际值
|
`# 请将以下变量替换为实际值
|
||||||
$pfxPath = "<your-pfx-path>" # PFX 文件路径
|
$pfxPath = "${formInst.getFieldValue("certPath")}" # PFX 文件路径
|
||||||
$pfxPassword = "<your-pfx-password>" # PFX 密码
|
$pfxPassword = "${formInst.getFieldValue("pfxPassword")}" # PFX 密码
|
||||||
$ipaddr = "<your-binding-ip>" # 绑定 IP,“0.0.0.0”表示所有 IP 绑定,可填入域名。
|
$ipaddr = "<your-binding-ip>" # 绑定 IP,“0.0.0.0”表示所有 IP 绑定,可填入域名。
|
||||||
$port = "<your-binding-port>" # 绑定端口
|
$port = "<your-binding-port>" # 绑定端口
|
||||||
|
|
||||||
@ -208,14 +225,15 @@ Remove-Item -Path "$pfxPath" -Force
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "binding_rdp":
|
case "binding_rdp":
|
||||||
{
|
{
|
||||||
formInst.setFieldValue("shellEnv", SHELLENV_POWERSHELL);
|
formInst.setFieldValue("shellEnv", SHELLENV_POWERSHELL);
|
||||||
formInst.setFieldValue(
|
formInst.setFieldValue(
|
||||||
"postCommand",
|
"postCommand",
|
||||||
`# 请将以下变量替换为实际值
|
`# 请将以下变量替换为实际值
|
||||||
$pfxPath = "<your-pfx-path>" # PFX 文件路径
|
$pfxPath = "${formInst.getFieldValue("certPath")}" # PFX 文件路径
|
||||||
$pfxPassword = "<your-pfx-password>" # PFX 密码
|
$pfxPassword = "${formInst.getFieldValue("pfxPassword")}" # PFX 密码
|
||||||
|
|
||||||
# 导入证书到本地计算机的个人存储区
|
# 导入证书到本地计算机的个人存储区
|
||||||
$cert = Import-PfxCertificate -FilePath "$pfxPath" -CertStoreLocation Cert:\\LocalMachine\\My -Password (ConvertTo-SecureString -String "$pfxPassword" -AsPlainText -Force) -Exportable
|
$cert = Import-PfxCertificate -FilePath "$pfxPath" -CertStoreLocation Cert:\\LocalMachine\\My -Password (ConvertTo-SecureString -String "$pfxPassword" -AsPlainText -Force) -Exportable
|
||||||
@ -332,9 +350,37 @@ Set-ItemProperty -Path $rdpCertPath -Name "SSLCertificateSHA1Hash" -Value "$thum
|
|||||||
</Select>
|
</Select>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
<Form.Item name="preCommand" label={t("workflow_node.deploy.form.local_pre_command.label")} rules={[formRule]}>
|
<Form.Item className="mb-0">
|
||||||
|
<label className="mb-1 block">
|
||||||
|
<div className="flex w-full items-center justify-between gap-4">
|
||||||
|
<div className="max-w-full grow truncate">
|
||||||
|
<span>{t("workflow_node.deploy.form.local_pre_command.label")}</span>
|
||||||
|
</div>
|
||||||
|
<div className="text-right">
|
||||||
|
<Dropdown
|
||||||
|
menu={{
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
key: "backup_files",
|
||||||
|
label: t("workflow_node.deploy.form.local_preset_scripts.option.backup_files.label"),
|
||||||
|
onClick: () => handlePresetPreScriptClick("backup_files"),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}}
|
||||||
|
trigger={["click"]}
|
||||||
|
>
|
||||||
|
<Button size="small" type="link">
|
||||||
|
{t("workflow_node.deploy.form.local_preset_scripts.button")}
|
||||||
|
<DownOutlinedIcon />
|
||||||
|
</Button>
|
||||||
|
</Dropdown>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</label>
|
||||||
|
<Form.Item name="preCommand" rules={[formRule]}>
|
||||||
<Input.TextArea autoSize={{ minRows: 1, maxRows: 5 }} placeholder={t("workflow_node.deploy.form.local_pre_command.placeholder")} />
|
<Input.TextArea autoSize={{ minRows: 1, maxRows: 5 }} placeholder={t("workflow_node.deploy.form.local_pre_command.placeholder")} />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
</Form.Item>
|
||||||
|
|
||||||
<Form.Item className="mb-0">
|
<Form.Item className="mb-0">
|
||||||
<label className="mb-1 block">
|
<label className="mb-1 block">
|
||||||
@ -349,22 +395,22 @@ Set-ItemProperty -Path $rdpCertPath -Name "SSLCertificateSHA1Hash" -Value "$thum
|
|||||||
{
|
{
|
||||||
key: "reload_nginx",
|
key: "reload_nginx",
|
||||||
label: t("workflow_node.deploy.form.local_preset_scripts.option.reload_nginx.label"),
|
label: t("workflow_node.deploy.form.local_preset_scripts.option.reload_nginx.label"),
|
||||||
onClick: () => handlePresetScriptClick("reload_nginx"),
|
onClick: () => handlePresetPostScriptClick("reload_nginx"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: "binding_iis",
|
key: "binding_iis",
|
||||||
label: t("workflow_node.deploy.form.local_preset_scripts.option.binding_iis.label"),
|
label: t("workflow_node.deploy.form.local_preset_scripts.option.binding_iis.label"),
|
||||||
onClick: () => handlePresetScriptClick("binding_iis"),
|
onClick: () => handlePresetPostScriptClick("binding_iis"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: "binding_netsh",
|
key: "binding_netsh",
|
||||||
label: t("workflow_node.deploy.form.local_preset_scripts.option.binding_netsh.label"),
|
label: t("workflow_node.deploy.form.local_preset_scripts.option.binding_netsh.label"),
|
||||||
onClick: () => handlePresetScriptClick("binding_netsh"),
|
onClick: () => handlePresetPostScriptClick("binding_netsh"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: "binding_rdp",
|
key: "binding_rdp",
|
||||||
label: t("workflow_node.deploy.form.local_preset_scripts.option.binding_rdp.label"),
|
label: t("workflow_node.deploy.form.local_preset_scripts.option.binding_rdp.label"),
|
||||||
onClick: () => handlePresetScriptClick("binding_rdp"),
|
onClick: () => handlePresetPostScriptClick("binding_rdp"),
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
}}
|
}}
|
||||||
|
@ -127,7 +127,23 @@ const DeployNodeConfigFormSSHConfig = ({ form: formInst, formName, disabled, ini
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const handlePresetScriptClick = (key: string) => {
|
const handlePresetPreScriptClick = (key: string) => {
|
||||||
|
switch (key) {
|
||||||
|
case "backup_files":
|
||||||
|
{
|
||||||
|
formInst.setFieldValue(
|
||||||
|
"preCommand",
|
||||||
|
`# 请将以下路径替换为实际值
|
||||||
|
cp "${formInst.getFieldValue("certPath")}" "${formInst.getFieldValue("certPath")}.bak" 2>/dev/null || :
|
||||||
|
cp "${formInst.getFieldValue("keyPath")}" "${formInst.getFieldValue("keyPath")}.bak" 2>/dev/null || :
|
||||||
|
`.trim()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const handlePresetPostScriptClick = (key: string) => {
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case "reload_nginx":
|
case "reload_nginx":
|
||||||
{
|
{
|
||||||
@ -228,9 +244,37 @@ const DeployNodeConfigFormSSHConfig = ({ form: formInst, formName, disabled, ini
|
|||||||
<Select options={[{ value: t("workflow_node.deploy.form.ssh_shell_env.value") }]} value={t("workflow_node.deploy.form.ssh_shell_env.value")} />
|
<Select options={[{ value: t("workflow_node.deploy.form.ssh_shell_env.value") }]} value={t("workflow_node.deploy.form.ssh_shell_env.value")} />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
<Form.Item name="preCommand" label={t("workflow_node.deploy.form.ssh_pre_command.label")} rules={[formRule]}>
|
<Form.Item className="mb-0">
|
||||||
|
<label className="mb-1 block">
|
||||||
|
<div className="flex w-full items-center justify-between gap-4">
|
||||||
|
<div className="max-w-full grow truncate">
|
||||||
|
<span>{t("workflow_node.deploy.form.ssh_pre_command.label")}</span>
|
||||||
|
</div>
|
||||||
|
<div className="text-right">
|
||||||
|
<Dropdown
|
||||||
|
menu={{
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
key: "backup_files",
|
||||||
|
label: t("workflow_node.deploy.form.ssh_preset_scripts.option.backup_files.label"),
|
||||||
|
onClick: () => handlePresetPreScriptClick("backup_files"),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}}
|
||||||
|
trigger={["click"]}
|
||||||
|
>
|
||||||
|
<Button size="small" type="link">
|
||||||
|
{t("workflow_node.deploy.form.ssh_preset_scripts.button")}
|
||||||
|
<DownOutlinedIcon />
|
||||||
|
</Button>
|
||||||
|
</Dropdown>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</label>
|
||||||
|
<Form.Item name="preCommand" rules={[formRule]}>
|
||||||
<Input.TextArea autoSize={{ minRows: 1, maxRows: 5 }} placeholder={t("workflow_node.deploy.form.ssh_pre_command.placeholder")} />
|
<Input.TextArea autoSize={{ minRows: 1, maxRows: 5 }} placeholder={t("workflow_node.deploy.form.ssh_pre_command.placeholder")} />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
</Form.Item>
|
||||||
|
|
||||||
<Form.Item className="mb-0">
|
<Form.Item className="mb-0">
|
||||||
<label className="mb-1 block">
|
<label className="mb-1 block">
|
||||||
@ -245,7 +289,7 @@ const DeployNodeConfigFormSSHConfig = ({ form: formInst, formName, disabled, ini
|
|||||||
{
|
{
|
||||||
key: "reload_nginx",
|
key: "reload_nginx",
|
||||||
label: t("workflow_node.deploy.form.ssh_preset_scripts.option.reload_nginx.label"),
|
label: t("workflow_node.deploy.form.ssh_preset_scripts.option.reload_nginx.label"),
|
||||||
onClick: () => handlePresetScriptClick("reload_nginx"),
|
onClick: () => handlePresetPostScriptClick("reload_nginx"),
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
}}
|
}}
|
||||||
|
@ -372,6 +372,7 @@
|
|||||||
"workflow_node.deploy.form.local_post_command.label": "Post-command (Optional)",
|
"workflow_node.deploy.form.local_post_command.label": "Post-command (Optional)",
|
||||||
"workflow_node.deploy.form.local_post_command.placeholder": "Please enter command to be executed after saving files",
|
"workflow_node.deploy.form.local_post_command.placeholder": "Please enter command to be executed after saving files",
|
||||||
"workflow_node.deploy.form.local_preset_scripts.button": "Use preset scripts",
|
"workflow_node.deploy.form.local_preset_scripts.button": "Use preset scripts",
|
||||||
|
"workflow_node.deploy.form.local_preset_scripts.option.backup_files.label": "POSIX Bash - Backup certificate files",
|
||||||
"workflow_node.deploy.form.local_preset_scripts.option.reload_nginx.label": "POSIX Bash - Reload nginx",
|
"workflow_node.deploy.form.local_preset_scripts.option.reload_nginx.label": "POSIX Bash - Reload nginx",
|
||||||
"workflow_node.deploy.form.local_preset_scripts.option.binding_iis.label": "PowerShell - Binding IIS",
|
"workflow_node.deploy.form.local_preset_scripts.option.binding_iis.label": "PowerShell - Binding IIS",
|
||||||
"workflow_node.deploy.form.local_preset_scripts.option.binding_netsh.label": "PowerShell - Binding netsh",
|
"workflow_node.deploy.form.local_preset_scripts.option.binding_netsh.label": "PowerShell - Binding netsh",
|
||||||
@ -423,6 +424,7 @@
|
|||||||
"workflow_node.deploy.form.ssh_post_command.label": "Post-command (Optional)",
|
"workflow_node.deploy.form.ssh_post_command.label": "Post-command (Optional)",
|
||||||
"workflow_node.deploy.form.ssh_post_command.placeholder": "Please enter command to be executed after uploading files",
|
"workflow_node.deploy.form.ssh_post_command.placeholder": "Please enter command to be executed after uploading files",
|
||||||
"workflow_node.deploy.form.ssh_preset_scripts.button": "Use preset scripts",
|
"workflow_node.deploy.form.ssh_preset_scripts.button": "Use preset scripts",
|
||||||
|
"workflow_node.deploy.form.ssh_preset_scripts.option.backup_files.label": "POSIX Bash - Backup certificate files",
|
||||||
"workflow_node.deploy.form.ssh_preset_scripts.option.reload_nginx.label": "POSIX Bash - Reload nginx",
|
"workflow_node.deploy.form.ssh_preset_scripts.option.reload_nginx.label": "POSIX Bash - Reload nginx",
|
||||||
"workflow_node.deploy.form.ssh_use_scp.label": "Fallback to use SCP",
|
"workflow_node.deploy.form.ssh_use_scp.label": "Fallback to use SCP",
|
||||||
"workflow_node.deploy.form.ssh_use_scp.tooltip": "If the remote server does not support SFTP, please enable this option to fallback to SCP.",
|
"workflow_node.deploy.form.ssh_use_scp.tooltip": "If the remote server does not support SFTP, please enable this option to fallback to SCP.",
|
||||||
|
@ -372,6 +372,7 @@
|
|||||||
"workflow_node.deploy.form.local_post_command.label": "后置命令(可选)",
|
"workflow_node.deploy.form.local_post_command.label": "后置命令(可选)",
|
||||||
"workflow_node.deploy.form.local_post_command.placeholder": "请输入保存文件后执行的命令",
|
"workflow_node.deploy.form.local_post_command.placeholder": "请输入保存文件后执行的命令",
|
||||||
"workflow_node.deploy.form.local_preset_scripts.button": "使用预设脚本",
|
"workflow_node.deploy.form.local_preset_scripts.button": "使用预设脚本",
|
||||||
|
"workflow_node.deploy.form.local_preset_scripts.option.backup_files.label": "POSIX Bash - 备份原证书文件",
|
||||||
"workflow_node.deploy.form.local_preset_scripts.option.reload_nginx.label": "POSIX Bash - 重启 nginx 进程",
|
"workflow_node.deploy.form.local_preset_scripts.option.reload_nginx.label": "POSIX Bash - 重启 nginx 进程",
|
||||||
"workflow_node.deploy.form.local_preset_scripts.option.binding_iis.label": "PowerShell - 导入并绑定到 IIS(需管理员权限)",
|
"workflow_node.deploy.form.local_preset_scripts.option.binding_iis.label": "PowerShell - 导入并绑定到 IIS(需管理员权限)",
|
||||||
"workflow_node.deploy.form.local_preset_scripts.option.binding_netsh.label": "PowerShell - 导入并绑定到 netsh(需管理员权限)",
|
"workflow_node.deploy.form.local_preset_scripts.option.binding_netsh.label": "PowerShell - 导入并绑定到 netsh(需管理员权限)",
|
||||||
@ -423,6 +424,7 @@
|
|||||||
"workflow_node.deploy.form.ssh_post_command.label": "后置命令(可选)",
|
"workflow_node.deploy.form.ssh_post_command.label": "后置命令(可选)",
|
||||||
"workflow_node.deploy.form.ssh_post_command.placeholder": "请输入保存文件后执行的命令",
|
"workflow_node.deploy.form.ssh_post_command.placeholder": "请输入保存文件后执行的命令",
|
||||||
"workflow_node.deploy.form.ssh_preset_scripts.button": "使用预设脚本",
|
"workflow_node.deploy.form.ssh_preset_scripts.button": "使用预设脚本",
|
||||||
|
"workflow_node.deploy.form.ssh_preset_scripts.option.backup_files.label": "POSIX Bash - 备份原证书文件",
|
||||||
"workflow_node.deploy.form.ssh_preset_scripts.option.reload_nginx.label": "POSIX Bash - 重启 nginx 进程",
|
"workflow_node.deploy.form.ssh_preset_scripts.option.reload_nginx.label": "POSIX Bash - 重启 nginx 进程",
|
||||||
"workflow_node.deploy.form.ssh_use_scp.label": "回退使用 SCP",
|
"workflow_node.deploy.form.ssh_use_scp.label": "回退使用 SCP",
|
||||||
"workflow_node.deploy.form.ssh_use_scp.tooltip": "如果你的远程服务器不支持 SFTP,请开启此选项回退为 SCP。",
|
"workflow_node.deploy.form.ssh_use_scp.tooltip": "如果你的远程服务器不支持 SFTP,请开启此选项回退为 SCP。",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user