diff --git a/pkg/core/deployer/providers/webhook/webhook.go b/pkg/core/deployer/providers/webhook/webhook.go
index 2bfb3bb2..8361f542 100644
--- a/pkg/core/deployer/providers/webhook/webhook.go
+++ b/pkg/core/deployer/providers/webhook/webhook.go
@@ -143,6 +143,14 @@ func (d *Deployer) Deploy(ctx context.Context, certPEM, privkeyPEM string) (*dep
return nil, fmt.Errorf("failed to unmarshal webhook data: %w", err)
}
+ replaceJsonValueRecursively(webhookData, "${CERTIMATE_DEPLOYER_COMMONNAME}", certX509.Subject.CommonName)
+ replaceJsonValueRecursively(webhookData, "${CERTIMATE_DEPLOYER_SUBJECTALTNAMES}", strings.Join(certX509.DNSNames, ";"))
+ replaceJsonValueRecursively(webhookData, "${CERTIMATE_DEPLOYER_CERTIFICATE}", certPEM)
+ replaceJsonValueRecursively(webhookData, "${CERTIMATE_DEPLOYER_CERTIFICATE_SERVER}", serverCertPEM)
+ replaceJsonValueRecursively(webhookData, "${CERTIMATE_DEPLOYER_CERTIFICATE_INTERMEDIA}", intermediaCertPEM)
+ replaceJsonValueRecursively(webhookData, "${CERTIMATE_DEPLOYER_PRIVATEKEY}", privkeyPEM)
+
+ // 兼容旧版变量
replaceJsonValueRecursively(webhookData, "${DOMAIN}", certX509.Subject.CommonName)
replaceJsonValueRecursively(webhookData, "${DOMAINS}", strings.Join(certX509.DNSNames, ";"))
replaceJsonValueRecursively(webhookData, "${CERTIFICATE}", certPEM)
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderWebhook.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderWebhook.tsx
index de3c671a..93e29191 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderWebhook.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderWebhook.tsx
@@ -231,7 +231,7 @@ const AccessConfigFormFieldsProviderWebhook = ({ usage = "none" }: AccessConfigF
items: [
{
key: "certimate",
- label: "Certimate",
+ label: t("access.form.webhook_preset_data.common"),
onClick: handlePresetDataForDeploymentClick,
},
],
@@ -239,7 +239,7 @@ const AccessConfigFormFieldsProviderWebhook = ({ usage = "none" }: AccessConfigF
trigger={["click"]}
>
- {t("access.form.webhook_preset_data.button")}
+ {t("access.form.webhook_preset_data")}
@@ -268,14 +268,14 @@ const AccessConfigFormFieldsProviderWebhook = ({ usage = "none" }: AccessConfigF
menu={{
items: ["bark", "ntfy", "gotify", "pushover", "pushplus", "serverchan3", "serverchanturbo", "common"].map((key) => ({
key,
- label: ,
+ label: ,
onClick: () => handlePresetDataForNotificationClick(key),
})),
}}
trigger={["click"]}
>
- {t("access.form.webhook_preset_data.button")}
+ {t("access.form.webhook_preset_data")}
@@ -318,9 +318,9 @@ const getInitialValues = ({ usage = "none" }: { usage?: "deployment" | "notifica
data: JSON.stringify(
usage === "deployment"
? {
- name: "${DOMAINS}",
- cert: "${CERTIFICATE}",
- privkey: "${PRIVATE_KEY}",
+ name: "${CERTIMATE_DEPLOYER_COMMONNAME}",
+ cert: "${CERTIMATE_DEPLOYER_CERTIFICATE}",
+ privkey: "${CERTIMATE_DEPLOYER_PRIVATEKEY}",
}
: usage === "notification"
? {
diff --git a/ui/src/components/preset/PresetScriptTemplatesPopselect.tsx b/ui/src/components/preset/PresetScriptTemplatesPopselect.tsx
new file mode 100644
index 00000000..cbefe2f0
--- /dev/null
+++ b/ui/src/components/preset/PresetScriptTemplatesPopselect.tsx
@@ -0,0 +1,82 @@
+import { useMemo } from "react";
+import { useTranslation } from "react-i18next";
+import { IconMoodEmpty } from "@tabler/icons-react";
+import { useMount } from "ahooks";
+import { Dropdown, type DropdownProps } from "antd";
+
+import { useZustandShallowSelector } from "@/hooks";
+import { useScriptTemplatesStore } from "@/stores/settings";
+
+type PresetTemplate = {
+ command: string;
+};
+
+export interface PresetScriptTemplatesPopselectProps extends Omit {
+ options?: NonNullable["items"];
+ onSelect?: (value: string, template?: PresetTemplate | undefined) => void;
+}
+
+const PresetScriptTemplatesPopselect = ({ className, options, onSelect, ...props }: PresetScriptTemplatesPopselectProps) => {
+ const { t } = useTranslation();
+
+ const { templates, fetchTemplates } = useScriptTemplatesStore(useZustandShallowSelector(["templates", "fetchTemplates"]));
+ useMount(() => {
+ fetchTemplates(false);
+ });
+
+ const menuItems = useMemo(() => {
+ type MenuItem = NonNullable["items"]>[number];
+ const temp: MenuItem[] = [];
+
+ if (!options?.length && !templates?.length) {
+ temp.push({
+ key: "nodata",
+ label: t("common.text.nodata"),
+ icon: (
+
+
+
+ ),
+ disabled: true,
+ });
+ return temp;
+ }
+
+ if (options?.length) {
+ temp.push(
+ ...options.map((option) => {
+ return {
+ ...option!,
+ onClick: (e: any) => {
+ if ("onClick" in option!) {
+ option.onClick?.(e);
+ }
+
+ onSelect?.(String(option!.key!));
+ },
+ };
+ })
+ );
+ }
+
+ if (templates?.length) {
+ temp.push({
+ key: "custom",
+ label: t("preset.dropdown.option_group.custom"),
+ children: templates.map((template) => ({
+ key: `custom/${template.name}`,
+ label: template.name,
+ onClick: () => {
+ onSelect?.(template.name, template);
+ },
+ })),
+ });
+ }
+
+ return temp;
+ }, [options, templates, onSelect]);
+
+ return ;
+};
+
+export default PresetScriptTemplatesPopselect;
diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFieldsProviderLocal.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFieldsProviderLocal.tsx
index 20ce8049..25240e6e 100644
--- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFieldsProviderLocal.tsx
+++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFieldsProviderLocal.tsx
@@ -1,10 +1,11 @@
import { getI18n, useTranslation } from "react-i18next";
import { IconChevronDown } from "@tabler/icons-react";
-import { Button, Dropdown, Form, Input, Select } from "antd";
+import { Button, Form, Input, Select } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import CodeInput from "@/components/CodeInput";
+import PresetScriptTemplatesPopselect from "@/components/preset/PresetScriptTemplatesPopselect";
import Show from "@/components/Show";
import Tips from "@/components/Tips";
import { CERTIFICATE_FORMATS } from "@/domain/certificate";
@@ -339,21 +340,25 @@ const BizDeployNodeConfigFieldsProviderLocal = () => {
-
({
- key,
- label: t(`workflow_node.deploy.form.local_preset_scripts.option.${key}.label`),
- onClick: () => handlePresetPreScriptClick(key),
- })),
- }}
+ ({
+ key,
+ label: t(`workflow_node.deploy.form.local_preset_scripts.${key}`),
+ }))}
trigger={["click"]}
+ onSelect={(key, template) => {
+ if (template) {
+ formInst.setFieldValue([parentNamePath, "preCommand"], template.command);
+ } else {
+ handlePresetPreScriptClick(key);
+ }
+ }}
>
- {t("workflow_node.deploy.form.local_preset_scripts.button")}
+ {t("preset.dropdown.script.button")}
-
+
{
-
({
- key,
- label: t(`workflow_node.deploy.form.local_preset_scripts.option.${key}.label`),
- onClick: () => handlePresetPostScriptClick(key),
- })),
- }}
+ ({
+ key,
+ label: t(`workflow_node.deploy.form.local_preset_scripts.${key}`),
+ onClick: () => handlePresetPostScriptClick(key),
+ }))}
trigger={["click"]}
+ onSelect={(key, template) => {
+ if (template) {
+ formInst.setFieldValue([parentNamePath, "postCommand"], template.command);
+ } else {
+ handlePresetPostScriptClick(key);
+ }
+ }}
>
- {t("workflow_node.deploy.form.local_preset_scripts.button")}
+ {t("preset.dropdown.script.button")}
-
+
{
-
({
- key,
- label: t(`workflow_node.deploy.form.ssh_preset_scripts.option.${key}.label`),
- onClick: () => handlePresetPreScriptClick(key),
- })),
- }}
+ ({
+ key,
+ label: t(`workflow_node.deploy.form.ssh_preset_scripts.${key}`),
+ }))}
trigger={["click"]}
+ onSelect={(key, template) => {
+ if (template) {
+ formInst.setFieldValue([parentNamePath, "preCommand"], template.command);
+ } else {
+ handlePresetPreScriptClick(key);
+ }
+ }}
>
- {t("workflow_node.deploy.form.ssh_preset_scripts.button")}
+ {t("preset.dropdown.script.button")}
-
+
{
-
({
- key,
- label: t(`workflow_node.deploy.form.ssh_preset_scripts.option.${key}.label`),
- onClick: () => handlePresetPostScriptClick(key),
- })),
- }}
+ ({
+ key,
+ label: t(`workflow_node.deploy.form.ssh_preset_scripts.${key}`),
+ }))}
trigger={["click"]}
+ onSelect={(key, template) => {
+ if (template) {
+ formInst.setFieldValue([parentNamePath, "postCommand"], template.command);
+ } else {
+ handlePresetPostScriptClick(key);
+ }
+ }}
>
- {t("workflow_node.deploy.form.ssh_preset_scripts.button")}
+ {t("preset.dropdown.script.button")}
-
+
The values in JSON support template variables, which will be replaced by actual values when sent to the Webhook URL. Supported variables: ${DOMAIN} : The primary domain of the certificate (a.k.a. CommonName ).${DOMAINS} : The domains list of the certificate (a.k.a. SubjectAltNames ).${CERTIFICATE} : The PEM format content of the certificate file.${SERVER_CERTIFICATE} : The PEM format content of the server certificate file.${INTERMEDIA_CERTIFICATE} : The PEM format content of the intermediate CA certificate file.${PRIVATE_KEY} : The PEM format content of the private key file. When the request method is GET, the data will be passed as query string. Otherwise, the data will be encoded in the format indicated by the Content-Type in the request headers. Supported formats: application/json (default). application/x-www-form-urlencoded: Nested data is not supported. multipart/form-data: Nested data is not supported. ",
+ "access.form.webhook_data.guide_for_deployment": "The Webhook data should be in JSON format. The values in JSON support template variables, which will be replaced by actual values when sent to the Webhook URL. Supported variables: ${CERTIMATE_DEPLOYER_COMMONNAME} : The primary domain of the certificate (CommonName ).${CERTIMATE_DEPLOYER_SUBJECTALTNAMES} : The domains of the certificate, separated by semicolons (SubjectAltNames ).${CERTIMATE_DEPLOYER_CERTIFICATE} : The PEM format content of the certificate file.${CERTIMATE_DEPLOYER_CERTIFICATE_SERVER} : The PEM format content of the server certificate file.${CERTIMATE_DEPLOYER_CERTIFICATE_INTERMEDIA} : The PEM format content of the intermediate CA certificate file.${CERTIMATE_DEPLOYER_PRIVATEKEY} : The PEM format content of the private key file. When the request method is GET, the data will be passed as query string. Otherwise, the data will be encoded in the format indicated by the Content-Type in the request headers. Supported formats: application/json (default). application/x-www-form-urlencoded: Nested data is not supported. multipart/form-data: Nested data is not supported. ",
"access.form.webhook_data.guide_for_notification": "The Webhook data should be in JSON format. The values in JSON support template variables, which will be replaced by actual values when sent to the Webhook URL. Supported variables: ${CERTIMATE_NOTIFIER_SUBJECT} : The subject of notification.${CERTIMATE_NOTIFIER_MESSAGE} : The message of notification. When the request method is GET, the data will be passed as query string. Otherwise, the data will be encoded in the format indicated by the Content-Type in the request headers. Supported formats: application/json (default). application/x-www-form-urlencoded: Nested data is not supported. multipart/form-data: Nested data is not supported. ",
- "access.form.webhook_preset_data.button": "Use preset data",
- "access.form.webhook_preset_data.option.bark.label": "Bark",
- "access.form.webhook_preset_data.option.gotify.label": "Gotify",
- "access.form.webhook_preset_data.option.ntfy.label": "ntfy",
- "access.form.webhook_preset_data.option.pushover.label": "Pushover",
- "access.form.webhook_preset_data.option.pushplus.label": "PushPlus",
- "access.form.webhook_preset_data.option.serverchan3.label": "ServerChan3 ",
- "access.form.webhook_preset_data.option.serverchanturbo.label": "ServerChanTurbo ",
- "access.form.webhook_preset_data.option.common.label": "General data",
+ "access.form.webhook_preset_data": "Use preset Webhook",
+ "access.form.webhook_preset_data.bark": "Bark",
+ "access.form.webhook_preset_data.gotify": "Gotify",
+ "access.form.webhook_preset_data.ntfy": "ntfy",
+ "access.form.webhook_preset_data.pushover": "Pushover",
+ "access.form.webhook_preset_data.pushplus": "PushPlus",
+ "access.form.webhook_preset_data.serverchan3": "ServerChan3 ",
+ "access.form.webhook_preset_data.serverchanturbo": "ServerChanTurbo ",
+ "access.form.webhook_preset_data.common": "General data",
"access.form.wecombot_webhook_url.label": "WeCom bot Webhook URL",
"access.form.wecombot_webhook_url.placeholder": "Please enter WeCom bot Webhook URL",
"access.form.wecombot_webhook_url.tooltip": "For more information, see https://www.west.cn/CustomerCenter/doc/apiv2.html ",
diff --git a/ui/src/i18n/locales/en/nls.workflow.nodes.json b/ui/src/i18n/locales/en/nls.workflow.nodes.json
index 85704148..8a947ce8 100644
--- a/ui/src/i18n/locales/en/nls.workflow.nodes.json
+++ b/ui/src/i18n/locales/en/nls.workflow.nodes.json
@@ -675,13 +675,12 @@
"workflow_node.deploy.form.local_pre_command.placeholder": "Please enter command to be executed before saving files",
"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_preset_scripts.button": "Use preset scripts",
- "workflow_node.deploy.form.local_preset_scripts.option.sh_backup_files.label": "POSIX Bash - Backup certificate files",
- "workflow_node.deploy.form.local_preset_scripts.option.ps_backup_files.label": "PowerShell - Backup certificate files",
- "workflow_node.deploy.form.local_preset_scripts.option.sh_reload_nginx.label": "POSIX Bash - Reload nginx",
- "workflow_node.deploy.form.local_preset_scripts.option.ps_binding_iis.label": "PowerShell - Binding IIS",
- "workflow_node.deploy.form.local_preset_scripts.option.ps_binding_netsh.label": "PowerShell - Binding netsh",
- "workflow_node.deploy.form.local_preset_scripts.option.ps_binding_rdp.label": "PowerShell - Binding RDP",
+ "workflow_node.deploy.form.local_preset_scripts.sh_backup_files": "POSIX Bash - Backup certificate files",
+ "workflow_node.deploy.form.local_preset_scripts.ps_backup_files": "PowerShell - Backup certificate files",
+ "workflow_node.deploy.form.local_preset_scripts.sh_reload_nginx": "POSIX Bash - Reload nginx",
+ "workflow_node.deploy.form.local_preset_scripts.ps_binding_iis": "PowerShell - Binding IIS",
+ "workflow_node.deploy.form.local_preset_scripts.ps_binding_netsh": "PowerShell - Binding netsh",
+ "workflow_node.deploy.form.local_preset_scripts.ps_binding_rdp": "PowerShell - Binding RDP",
"workflow_node.deploy.form.netlify_site_id.label": "Netlify site ID",
"workflow_node.deploy.form.netlify_site_id.placeholder": "Please enter Netlify site ID",
"workflow_node.deploy.form.netlify_site_id.tooltip": "For more information, see https://docs.netlify.com/api/get-started/#get-site ",
@@ -755,16 +754,15 @@
"workflow_node.deploy.form.ssh_pre_command.placeholder": "Please enter command to be executed before uploading files",
"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_preset_scripts.button": "Use preset scripts",
- "workflow_node.deploy.form.ssh_preset_scripts.option.sh_backup_files.label": "POSIX Bash - Backup certificate files",
- "workflow_node.deploy.form.ssh_preset_scripts.option.ps_backup_files.label": "PowerShell - Backup certificate files",
- "workflow_node.deploy.form.ssh_preset_scripts.option.sh_reload_nginx.label": "POSIX Bash - Reload nginx",
- "workflow_node.deploy.form.ssh_preset_scripts.option.sh_replace_synologydsm_ssl.label": "POSIX Bash - Replace SynologyDSM SSL certificate",
- "workflow_node.deploy.form.ssh_preset_scripts.option.sh_replace_fnos_ssl.label": "POSIX Bash - Replace fnOS SSL certificate",
- "workflow_node.deploy.form.ssh_preset_scripts.option.sh_replace_qnap_ssl.label": "POSIX Bash - Replace QNAP SSL certificate",
- "workflow_node.deploy.form.ssh_preset_scripts.option.ps_binding_iis.label": "PowerShell - Binding IIS",
- "workflow_node.deploy.form.ssh_preset_scripts.option.ps_binding_netsh.label": "PowerShell - Binding netsh",
- "workflow_node.deploy.form.ssh_preset_scripts.option.ps_binding_rdp.label": "PowerShell - Binding RDP",
+ "workflow_node.deploy.form.ssh_preset_scripts.sh_backup_files": "POSIX Bash - Backup certificate files",
+ "workflow_node.deploy.form.ssh_preset_scripts.ps_backup_files": "PowerShell - Backup certificate files",
+ "workflow_node.deploy.form.ssh_preset_scripts.sh_reload_nginx": "POSIX Bash - Reload nginx",
+ "workflow_node.deploy.form.ssh_preset_scripts.sh_replace_synologydsm_ssl": "POSIX Bash - Replace SynologyDSM SSL certificate",
+ "workflow_node.deploy.form.ssh_preset_scripts.sh_replace_fnos_ssl": "POSIX Bash - Replace fnOS SSL certificate",
+ "workflow_node.deploy.form.ssh_preset_scripts.sh_replace_qnap_ssl": "POSIX Bash - Replace QNAP SSL certificate",
+ "workflow_node.deploy.form.ssh_preset_scripts.ps_binding_iis": "PowerShell - Binding IIS",
+ "workflow_node.deploy.form.ssh_preset_scripts.ps_binding_netsh": "PowerShell - Binding netsh",
+ "workflow_node.deploy.form.ssh_preset_scripts.ps_binding_rdp": "PowerShell - Binding RDP",
"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 check this option to fallback to SCP.",
"workflow_node.deploy.form.tencentcloud_cdn_endpoint.label": "Tencent Cloud API endpoint (Optional)",
diff --git a/ui/src/i18n/locales/zh/nls.access.json b/ui/src/i18n/locales/zh/nls.access.json
index 43ff809b..c35d96b7 100644
--- a/ui/src/i18n/locales/zh/nls.access.json
+++ b/ui/src/i18n/locales/zh/nls.access.json
@@ -626,17 +626,17 @@
"access.form.webhook_data.label": "Webhook 回调数据(可选)",
"access.form.webhook_data.placeholder": "请输入默认的 Webhook 回调数据",
"access.form.webhook_data.help": "提示:可在工作流中覆盖此设置。",
- "access.form.webhook_data.guide_for_deployment": "回调数据是一个 JSON 格式的数据。 其中值支持模板变量,将在被发送到指定的 Webhook URL 时被替换为实际值;其他内容将保持原样。支持的变量:${DOMAIN} :证书的主域名(即 CommonName )。${DOMAINS} :证书的多域名列表(即 SubjectAltNames )。${CERTIFICATE} :证书文件 PEM 格式内容。${SERVER_CERTIFICATE} :证书文件(仅含服务器证书)PEM 格式内容。${INTERMEDIA_CERTIFICATE} :证书文件(仅含中间证书)PEM 格式内容。${PRIVATE_KEY} :私钥文件 PEM 格式内容。 当请求谓词为 GET 时,回调数据将作为查询参数;否则,回调数据将按照请求标头中 Content-Type 所指示的格式进行编码。支持的格式:application/json(默认)。 application/x-www-form-urlencoded:不支持嵌套数据。 multipart/form-data:不支持嵌套数据。 ",
+ "access.form.webhook_data.guide_for_deployment": "回调数据是一个 JSON 格式的数据。 其中值支持模板变量,将在被发送到指定的 Webhook URL 时被替换为实际值;其他内容将保持原样。支持的变量:${CERTIMATE_DEPLOYER_COMMONNAME} :证书的主域名(即 CommonName )。${CERTIMATE_DEPLOYER_SUBJECTALTNAMES} :证书的多域名,以半角分号隔开(即 SubjectAltNames )。${CERTIMATE_DEPLOYER_CERTIFICATE} :证书文件 PEM 格式内容。${CERTIMATE_DEPLOYER_CERTIFICATE_SERVER} :证书文件(仅含服务器证书)PEM 格式内容。${CERTIMATE_DEPLOYER_CERTIFICATE_INTERMEDIA} :证书文件(仅含中间证书)PEM 格式内容。${CERTIMATE_DEPLOYER_PRIVATEKEY} :私钥文件 PEM 格式内容。 当请求谓词为 GET 时,回调数据将作为查询参数;否则,回调数据将按照请求标头中 Content-Type 所指示的格式进行编码。支持的格式:application/json(默认)。 application/x-www-form-urlencoded:不支持嵌套数据。 multipart/form-data:不支持嵌套数据。 ",
"access.form.webhook_data.guide_for_notification": "回调数据是一个 JSON 格式的数据。 其中值支持模板变量,将在被发送到指定的 Webhook URL 时被替换为实际值;其他内容将保持原样。支持的变量:${CERTIMATE_NOTIFIER_SUBJECT} :通知主题。${CERTIMATE_NOTIFIER_MESSAGE} :通知内容。 当请求谓词为 GET 时,回调数据将作为查询参数;否则,回调数据将按照请求标头中 Content-Type 所指示的格式进行编码。支持的格式:application/json(默认)。 application/x-www-form-urlencoded:不支持嵌套数据。 multipart/form-data:不支持嵌套数据。 ",
- "access.form.webhook_preset_data.button": "使用预设数据",
- "access.form.webhook_preset_data.option.bark.label": "Bark",
- "access.form.webhook_preset_data.option.gotify.label": "Gotify",
- "access.form.webhook_preset_data.option.ntfy.label": "ntfy",
- "access.form.webhook_preset_data.option.pushover.label": "Pushover",
- "access.form.webhook_preset_data.option.pushplus.label": "PushPlus 推送加",
- "access.form.webhook_preset_data.option.serverchan3.label": "Server 酱 3 ",
- "access.form.webhook_preset_data.option.serverchanturbo.label": "Server酱 Turbo ",
- "access.form.webhook_preset_data.option.common.label": "通用内容",
+ "access.form.webhook_preset_data": "使用预设回调",
+ "access.form.webhook_preset_data.bark": "Bark",
+ "access.form.webhook_preset_data.gotify": "Gotify",
+ "access.form.webhook_preset_data.ntfy": "ntfy",
+ "access.form.webhook_preset_data.pushover": "Pushover",
+ "access.form.webhook_preset_data.pushplus": "PushPlus 推送加",
+ "access.form.webhook_preset_data.serverchan3": "Server 酱 3 ",
+ "access.form.webhook_preset_data.serverchanturbo": "Server酱 Turbo ",
+ "access.form.webhook_preset_data.common": "通用内容",
"access.form.wecombot_webhook_url.label": "企业微信群机器人 Webhook 地址",
"access.form.wecombot_webhook_url.placeholder": "请输入企业微信群机器人 Webhook 地址",
"access.form.wecombot_webhook_url.tooltip": "这是什么?请参阅 https://open.work.weixin.qq.com/help2/pc/18401 ",
diff --git a/ui/src/i18n/locales/zh/nls.workflow.nodes.json b/ui/src/i18n/locales/zh/nls.workflow.nodes.json
index 481e4bcf..73dce687 100644
--- a/ui/src/i18n/locales/zh/nls.workflow.nodes.json
+++ b/ui/src/i18n/locales/zh/nls.workflow.nodes.json
@@ -673,13 +673,12 @@
"workflow_node.deploy.form.local_pre_command.placeholder": "请输入保存文件前执行的命令",
"workflow_node.deploy.form.local_post_command.label": "后置命令(可选)",
"workflow_node.deploy.form.local_post_command.placeholder": "请输入保存文件后执行的命令",
- "workflow_node.deploy.form.local_preset_scripts.button": "使用预设脚本",
- "workflow_node.deploy.form.local_preset_scripts.option.sh_backup_files.label": "POSIX Bash - 备份原证书文件",
- "workflow_node.deploy.form.local_preset_scripts.option.ps_backup_files.label": "PowerShell - 备份原证书文件",
- "workflow_node.deploy.form.local_preset_scripts.option.sh_reload_nginx.label": "POSIX Bash - 重启 nginx 进程",
- "workflow_node.deploy.form.local_preset_scripts.option.ps_binding_iis.label": "PowerShell - 导入并绑定到 IIS",
- "workflow_node.deploy.form.local_preset_scripts.option.ps_binding_netsh.label": "PowerShell - 导入并绑定到 netsh",
- "workflow_node.deploy.form.local_preset_scripts.option.ps_binding_rdp.label": "PowerShell - 导入并绑定到 RDP",
+ "workflow_node.deploy.form.local_preset_scripts.sh_backup_files": "POSIX Bash - 备份原证书文件",
+ "workflow_node.deploy.form.local_preset_scripts.ps_backup_files": "PowerShell - 备份原证书文件",
+ "workflow_node.deploy.form.local_preset_scripts.sh_reload_nginx": "POSIX Bash - 重启 nginx 进程",
+ "workflow_node.deploy.form.local_preset_scripts.ps_binding_iis": "PowerShell - 导入并绑定到 IIS",
+ "workflow_node.deploy.form.local_preset_scripts.ps_binding_netsh": "PowerShell - 导入并绑定到 netsh",
+ "workflow_node.deploy.form.local_preset_scripts.ps_binding_rdp": "PowerShell - 导入并绑定到 RDP",
"workflow_node.deploy.form.netlify_site_id.label": "Netlify 网站 ID",
"workflow_node.deploy.form.netlify_site_id.placeholder": "请输入 netlify 网站 ID",
"workflow_node.deploy.form.netlify_site_id.tooltip": "这是什么?请参阅 https://docs.netlify.com/api/get-started/#get-site ",
@@ -753,16 +752,15 @@
"workflow_node.deploy.form.ssh_pre_command.placeholder": "请输入上传文件前执行的命令",
"workflow_node.deploy.form.ssh_post_command.label": "后置命令(可选)",
"workflow_node.deploy.form.ssh_post_command.placeholder": "请输入上传文件后执行的命令",
- "workflow_node.deploy.form.ssh_preset_scripts.button": "使用预设脚本",
- "workflow_node.deploy.form.ssh_preset_scripts.option.sh_backup_files.label": "POSIX Bash - 备份原证书文件",
- "workflow_node.deploy.form.ssh_preset_scripts.option.ps_backup_files.label": "PowerShell - 备份原证书文件",
- "workflow_node.deploy.form.ssh_preset_scripts.option.sh_reload_nginx.label": "POSIX Bash - 重启 nginx 进程",
- "workflow_node.deploy.form.ssh_preset_scripts.option.sh_replace_synologydsm_ssl.label": "POSIX Bash - 替换群晖 DSM 证书",
- "workflow_node.deploy.form.ssh_preset_scripts.option.sh_replace_fnos_ssl.label": "POSIX Bash - 替换飞牛 fnOS 证书",
- "workflow_node.deploy.form.ssh_preset_scripts.option.sh_replace_qnap_ssl.label": "POSIX Bash - 替换威联通 QNAP 证书",
- "workflow_node.deploy.form.ssh_preset_scripts.option.ps_binding_iis.label": "PowerShell - 导入并绑定到 IIS",
- "workflow_node.deploy.form.ssh_preset_scripts.option.ps_binding_netsh.label": "PowerShell - 导入并绑定到 netsh",
- "workflow_node.deploy.form.ssh_preset_scripts.option.ps_binding_rdp.label": "PowerShell - 导入并绑定到 RDP",
+ "workflow_node.deploy.form.ssh_preset_scripts.sh_backup_files": "POSIX Bash - 备份原证书文件",
+ "workflow_node.deploy.form.ssh_preset_scripts.ps_backup_files": "PowerShell - 备份原证书文件",
+ "workflow_node.deploy.form.ssh_preset_scripts.sh_reload_nginx": "POSIX Bash - 重启 nginx 进程",
+ "workflow_node.deploy.form.ssh_preset_scripts.sh_replace_synologydsm_ssl": "POSIX Bash - 替换群晖 DSM 证书",
+ "workflow_node.deploy.form.ssh_preset_scripts.sh_replace_fnos_ssl": "POSIX Bash - 替换飞牛 fnOS 证书",
+ "workflow_node.deploy.form.ssh_preset_scripts.sh_replace_qnap_ssl": "POSIX Bash - 替换威联通 QNAP 证书",
+ "workflow_node.deploy.form.ssh_preset_scripts.ps_binding_iis": "PowerShell - 导入并绑定到 IIS",
+ "workflow_node.deploy.form.ssh_preset_scripts.ps_binding_netsh": "PowerShell - 导入并绑定到 netsh",
+ "workflow_node.deploy.form.ssh_preset_scripts.ps_binding_rdp": "PowerShell - 导入并绑定到 RDP",
"workflow_node.deploy.form.ssh_use_scp.label": "回退使用 SCP",
"workflow_node.deploy.form.ssh_use_scp.tooltip": "如果你的远程服务器不支持 SFTP,请开启此选项回退为 SCP。",
"workflow_node.deploy.form.tencentcloud_cdn_endpoint.label": "腾讯云接口端点(可选)",