mirror of
https://github.com/certimate-go/certimate.git
synced 2026-06-30 21:05:12 +08:00
feat: preset script templates in workflow deployment nodes
This commit is contained in:
parent
c2427697de
commit
c8ff00d10c
@ -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)
|
||||
|
||||
@ -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"]}
|
||||
>
|
||||
<Button size="small" type="link">
|
||||
{t("access.form.webhook_preset_data.button")}
|
||||
{t("access.form.webhook_preset_data")}
|
||||
<IconChevronDown size="1.25em" />
|
||||
</Button>
|
||||
</Dropdown>
|
||||
@ -268,14 +268,14 @@ const AccessConfigFormFieldsProviderWebhook = ({ usage = "none" }: AccessConfigF
|
||||
menu={{
|
||||
items: ["bark", "ntfy", "gotify", "pushover", "pushplus", "serverchan3", "serverchanturbo", "common"].map((key) => ({
|
||||
key,
|
||||
label: <span dangerouslySetInnerHTML={{ __html: t(`access.form.webhook_preset_data.option.${key}.label`) }}></span>,
|
||||
label: <span dangerouslySetInnerHTML={{ __html: t(`access.form.webhook_preset_data.${key}`) }}></span>,
|
||||
onClick: () => handlePresetDataForNotificationClick(key),
|
||||
})),
|
||||
}}
|
||||
trigger={["click"]}
|
||||
>
|
||||
<Button size="small" type="link">
|
||||
{t("access.form.webhook_preset_data.button")}
|
||||
{t("access.form.webhook_preset_data")}
|
||||
<IconChevronDown size="1.25em" />
|
||||
</Button>
|
||||
</Dropdown>
|
||||
@ -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"
|
||||
? {
|
||||
|
||||
82
ui/src/components/preset/PresetScriptTemplatesPopselect.tsx
Normal file
82
ui/src/components/preset/PresetScriptTemplatesPopselect.tsx
Normal file
@ -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<DropdownProps, "menu"> {
|
||||
options?: NonNullable<DropdownProps["menu"]>["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<NonNullable<DropdownProps["menu"]>["items"]>[number];
|
||||
const temp: MenuItem[] = [];
|
||||
|
||||
if (!options?.length && !templates?.length) {
|
||||
temp.push({
|
||||
key: "nodata",
|
||||
label: t("common.text.nodata"),
|
||||
icon: (
|
||||
<span className="anticon scale-125">
|
||||
<IconMoodEmpty size="1em" />
|
||||
</span>
|
||||
),
|
||||
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 <Dropdown className={className} menu={{ items: menuItems }} {...props} />;
|
||||
};
|
||||
|
||||
export default PresetScriptTemplatesPopselect;
|
||||
@ -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 = () => {
|
||||
|
||||
<Form.Item label={t("workflow_node.deploy.form.local_pre_command.label")}>
|
||||
<div className="absolute -top-1.5 right-0 -translate-y-full">
|
||||
<Dropdown
|
||||
menu={{
|
||||
items: ["sh_backup_files", "ps_backup_files"].map((key) => ({
|
||||
key,
|
||||
label: t(`workflow_node.deploy.form.local_preset_scripts.option.${key}.label`),
|
||||
onClick: () => handlePresetPreScriptClick(key),
|
||||
})),
|
||||
}}
|
||||
<PresetScriptTemplatesPopselect
|
||||
options={["sh_backup_files", "ps_backup_files"].map((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);
|
||||
}
|
||||
}}
|
||||
>
|
||||
<Button size="small" type="link">
|
||||
{t("workflow_node.deploy.form.local_preset_scripts.button")}
|
||||
{t("preset.dropdown.script.button")}
|
||||
<IconChevronDown size="1.25em" />
|
||||
</Button>
|
||||
</Dropdown>
|
||||
</PresetScriptTemplatesPopselect>
|
||||
</div>
|
||||
<Form.Item name={[parentNamePath, "preCommand"]} initialValue={initialValues.preCommand} noStyle rules={[formRule]}>
|
||||
<CodeInput
|
||||
@ -368,21 +373,26 @@ const BizDeployNodeConfigFieldsProviderLocal = () => {
|
||||
|
||||
<Form.Item label={t("workflow_node.deploy.form.local_post_command.label")}>
|
||||
<div className="absolute -top-1.5 right-0 -translate-y-full">
|
||||
<Dropdown
|
||||
menu={{
|
||||
items: ["sh_reload_nginx", "ps_binding_iis", "ps_binding_netsh", "ps_binding_rdp"].map((key) => ({
|
||||
key,
|
||||
label: t(`workflow_node.deploy.form.local_preset_scripts.option.${key}.label`),
|
||||
onClick: () => handlePresetPostScriptClick(key),
|
||||
})),
|
||||
}}
|
||||
<PresetScriptTemplatesPopselect
|
||||
options={["sh_reload_nginx", "ps_binding_iis", "ps_binding_netsh", "ps_binding_rdp"].map((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);
|
||||
}
|
||||
}}
|
||||
>
|
||||
<Button size="small" type="link">
|
||||
{t("workflow_node.deploy.form.local_preset_scripts.button")}
|
||||
{t("preset.dropdown.script.button")}
|
||||
<IconChevronDown size="1.25em" />
|
||||
</Button>
|
||||
</Dropdown>
|
||||
</PresetScriptTemplatesPopselect>
|
||||
</div>
|
||||
<Form.Item name={[parentNamePath, "postCommand"]} initialValue={initialValues.postCommand} noStyle rules={[formRule]}>
|
||||
<CodeInput
|
||||
|
||||
@ -1,10 +1,11 @@
|
||||
import { getI18n, useTranslation } from "react-i18next";
|
||||
import { IconChevronDown } from "@tabler/icons-react";
|
||||
import { Button, Dropdown, Form, Input, Select, Switch } from "antd";
|
||||
import { Button, Form, Input, Select, Switch } 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 { CERTIFICATE_FORMATS } from "@/domain/certificate";
|
||||
|
||||
@ -364,21 +365,25 @@ const BizDeployNodeConfigFieldsProviderSSH = () => {
|
||||
|
||||
<Form.Item label={t("workflow_node.deploy.form.ssh_pre_command.label")}>
|
||||
<div className="absolute -top-1.5 right-0 -translate-y-full">
|
||||
<Dropdown
|
||||
menu={{
|
||||
items: ["sh_backup_files", "ps_backup_files"].map((key) => ({
|
||||
key,
|
||||
label: t(`workflow_node.deploy.form.ssh_preset_scripts.option.${key}.label`),
|
||||
onClick: () => handlePresetPreScriptClick(key),
|
||||
})),
|
||||
}}
|
||||
<PresetScriptTemplatesPopselect
|
||||
options={["sh_backup_files", "ps_backup_files"].map((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);
|
||||
}
|
||||
}}
|
||||
>
|
||||
<Button size="small" type="link">
|
||||
{t("workflow_node.deploy.form.ssh_preset_scripts.button")}
|
||||
{t("preset.dropdown.script.button")}
|
||||
<IconChevronDown size="1.25em" />
|
||||
</Button>
|
||||
</Dropdown>
|
||||
</PresetScriptTemplatesPopselect>
|
||||
</div>
|
||||
<Form.Item name={[parentNamePath, "preCommand"]} initialValue={initialValues.preCommand} noStyle rules={[formRule]}>
|
||||
<CodeInput
|
||||
@ -393,29 +398,33 @@ const BizDeployNodeConfigFieldsProviderSSH = () => {
|
||||
|
||||
<Form.Item label={t("workflow_node.deploy.form.ssh_post_command.label")}>
|
||||
<div className="absolute -top-1.5 right-0 -translate-y-full">
|
||||
<Dropdown
|
||||
menu={{
|
||||
items: [
|
||||
"sh_reload_nginx",
|
||||
"sh_replace_synologydsm_ssl",
|
||||
"sh_replace_fnos_ssl",
|
||||
"sh_replace_qnap_ssl",
|
||||
"ps_binding_iis",
|
||||
"ps_binding_netsh",
|
||||
"ps_binding_rdp",
|
||||
].map((key) => ({
|
||||
key,
|
||||
label: t(`workflow_node.deploy.form.ssh_preset_scripts.option.${key}.label`),
|
||||
onClick: () => handlePresetPostScriptClick(key),
|
||||
})),
|
||||
}}
|
||||
<PresetScriptTemplatesPopselect
|
||||
options={[
|
||||
"sh_reload_nginx",
|
||||
"sh_replace_synologydsm_ssl",
|
||||
"sh_replace_fnos_ssl",
|
||||
"sh_replace_qnap_ssl",
|
||||
"ps_binding_iis",
|
||||
"ps_binding_netsh",
|
||||
"ps_binding_rdp",
|
||||
].map((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);
|
||||
}
|
||||
}}
|
||||
>
|
||||
<Button size="small" type="link">
|
||||
{t("workflow_node.deploy.form.ssh_preset_scripts.button")}
|
||||
{t("preset.dropdown.script.button")}
|
||||
<IconChevronDown size="1.25em" />
|
||||
</Button>
|
||||
</Dropdown>
|
||||
</PresetScriptTemplatesPopselect>
|
||||
</div>
|
||||
<Form.Item name={[parentNamePath, "postCommand"]} initialValue={initialValues.postCommand} noStyle rules={[formRule]}>
|
||||
<CodeInput
|
||||
|
||||
@ -626,17 +626,17 @@
|
||||
"access.form.webhook_data.label": "Webhook data (Optional)",
|
||||
"access.form.webhook_data.placeholder": "Please enter the default Webhook data",
|
||||
"access.form.webhook_data.help": "Notes: It can be overrided in the workflows.",
|
||||
"access.form.webhook_data.guide_for_deployment": "The Webhook data should be in JSON format. <br><br>The values in JSON support template variables, which will be replaced by actual values when sent to the Webhook URL. Supported variables: <br><ol style=\"list-style: disc;\"><li><strong>${DOMAIN}</strong>: The primary domain of the certificate (a.k.a. <i>CommonName</i>).</li><li><strong>${DOMAINS}</strong>: The domains list of the certificate (a.k.a. <i>SubjectAltNames</i>).</li><li><strong>${CERTIFICATE}</strong>: The PEM format content of the certificate file.</li><li><strong>${SERVER_CERTIFICATE}</strong>: The PEM format content of the server certificate file.</li><li><strong>${INTERMEDIA_CERTIFICATE}</strong>: The PEM format content of the intermediate CA certificate file.</li><li><strong>${PRIVATE_KEY}</strong>: The PEM format content of the private key file.</li></ol><br>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: <br><ol style=\"list-style: disc;\"><li>application/json (default).</li><li>application/x-www-form-urlencoded: Nested data is not supported.</li><li>multipart/form-data: Nested data is not supported.</li>",
|
||||
"access.form.webhook_data.guide_for_deployment": "The Webhook data should be in JSON format. <br><br>The values in JSON support template variables, which will be replaced by actual values when sent to the Webhook URL. Supported variables: <br><ol style=\"list-style: disc;\"><li><strong>${CERTIMATE_DEPLOYER_COMMONNAME}</strong>: The primary domain of the certificate (<i>CommonName</i>).</li><li><strong>${CERTIMATE_DEPLOYER_SUBJECTALTNAMES}</strong>: The domains of the certificate, separated by semicolons (<i>SubjectAltNames</i>).</li><li><strong>${CERTIMATE_DEPLOYER_CERTIFICATE}</strong>: The PEM format content of the certificate file.</li><li><strong>${CERTIMATE_DEPLOYER_CERTIFICATE_SERVER}</strong>: The PEM format content of the server certificate file.</li><li><strong>${CERTIMATE_DEPLOYER_CERTIFICATE_INTERMEDIA}</strong>: The PEM format content of the intermediate CA certificate file.</li><li><strong>${CERTIMATE_DEPLOYER_PRIVATEKEY}</strong>: The PEM format content of the private key file.</li></ol><br>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: <br><ol style=\"list-style: disc;\"><li>application/json (default).</li><li>application/x-www-form-urlencoded: Nested data is not supported.</li><li>multipart/form-data: Nested data is not supported.</li>",
|
||||
"access.form.webhook_data.guide_for_notification": "The Webhook data should be in JSON format. <br><br>The values in JSON support template variables, which will be replaced by actual values when sent to the Webhook URL. Supported variables: <br><ol style=\"list-style: disc;\"><li><strong>${CERTIMATE_NOTIFIER_SUBJECT}</strong>: The subject of notification.</li><li><strong>${CERTIMATE_NOTIFIER_MESSAGE}</strong>: The message of notification.</li></ol><br>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: <br><ol style=\"list-style: disc;\"><li>application/json (default).</li><li>application/x-www-form-urlencoded: Nested data is not supported.</li><li>multipart/form-data: Nested data is not supported.</li>",
|
||||
"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": "ServerChan<sup>3</sup>",
|
||||
"access.form.webhook_preset_data.option.serverchanturbo.label": "ServerChan<sup>Turbo</sup>",
|
||||
"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": "ServerChan<sup>3</sup>",
|
||||
"access.form.webhook_preset_data.serverchanturbo": "ServerChan<sup>Turbo</sup>",
|
||||
"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 <a href=\"https://www.west.cn/CustomerCenter/doc/apiv2.html#12u3001u8eabu4efdu9a8cu8bc10a3ca20id3d12u3001u8eabu4efdu9a8cu8bc13e203ca3e\" target=\"_blank\">https://www.west.cn/CustomerCenter/doc/apiv2.html</a>",
|
||||
|
||||
@ -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 <a href=\"https://docs.netlify.com/api/get-started/#get-site\" target=\"_blank\">https://docs.netlify.com/api/get-started/#get-site</a>",
|
||||
@ -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)",
|
||||
|
||||
@ -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 格式的数据。<br><br>其中值支持模板变量,将在被发送到指定的 Webhook URL 时被替换为实际值;其他内容将保持原样。支持的变量:<br><ol style=\"list-style: disc;\"><li><strong>${DOMAIN}</strong>:证书的主域名(即 <i>CommonName</i>)。</li><li><strong>${DOMAINS}</strong>:证书的多域名列表(即 <i>SubjectAltNames</i>)。</li><li><strong>${CERTIFICATE}</strong>:证书文件 PEM 格式内容。</li><li><strong>${SERVER_CERTIFICATE}</strong>:证书文件(仅含服务器证书)PEM 格式内容。</li><li><strong>${INTERMEDIA_CERTIFICATE}</strong>:证书文件(仅含中间证书)PEM 格式内容。</li><li><strong>${PRIVATE_KEY}</strong>:私钥文件 PEM 格式内容。</li></ol><br>当请求谓词为 GET 时,回调数据将作为查询参数;否则,回调数据将按照请求标头中 Content-Type 所指示的格式进行编码。支持的格式:<br><ol style=\"list-style: disc;\"><li>application/json(默认)。</li><li>application/x-www-form-urlencoded:不支持嵌套数据。</li><li>multipart/form-data:不支持嵌套数据。</li>",
|
||||
"access.form.webhook_data.guide_for_deployment": "回调数据是一个 JSON 格式的数据。<br><br>其中值支持模板变量,将在被发送到指定的 Webhook URL 时被替换为实际值;其他内容将保持原样。支持的变量:<br><ol style=\"list-style: disc;\"><li><strong>${CERTIMATE_DEPLOYER_COMMONNAME}</strong>:证书的主域名(即 <i>CommonName</i>)。</li><li><strong>${CERTIMATE_DEPLOYER_SUBJECTALTNAMES}</strong>:证书的多域名,以半角分号隔开(即 <i>SubjectAltNames</i>)。</li><li><strong>${CERTIMATE_DEPLOYER_CERTIFICATE}</strong>:证书文件 PEM 格式内容。</li><li><strong>${CERTIMATE_DEPLOYER_CERTIFICATE_SERVER}</strong>:证书文件(仅含服务器证书)PEM 格式内容。</li><li><strong>${CERTIMATE_DEPLOYER_CERTIFICATE_INTERMEDIA}</strong>:证书文件(仅含中间证书)PEM 格式内容。</li><li><strong>${CERTIMATE_DEPLOYER_PRIVATEKEY}</strong>:私钥文件 PEM 格式内容。</li></ol><br>当请求谓词为 GET 时,回调数据将作为查询参数;否则,回调数据将按照请求标头中 Content-Type 所指示的格式进行编码。支持的格式:<br><ol style=\"list-style: disc;\"><li>application/json(默认)。</li><li>application/x-www-form-urlencoded:不支持嵌套数据。</li><li>multipart/form-data:不支持嵌套数据。</li>",
|
||||
"access.form.webhook_data.guide_for_notification": "回调数据是一个 JSON 格式的数据。<br><br>其中值支持模板变量,将在被发送到指定的 Webhook URL 时被替换为实际值;其他内容将保持原样。支持的变量:<br><ol style=\"list-style: disc;\"><li><strong>${CERTIMATE_NOTIFIER_SUBJECT}</strong>:通知主题。</li><li><strong>${CERTIMATE_NOTIFIER_MESSAGE}</strong>:通知内容。</ol><br>当请求谓词为 GET 时,回调数据将作为查询参数;否则,回调数据将按照请求标头中 Content-Type 所指示的格式进行编码。支持的格式:<br><ol style=\"list-style: disc;\"><li>application/json(默认)。</li><li>application/x-www-form-urlencoded:不支持嵌套数据。</li><li>multipart/form-data:不支持嵌套数据。</li>",
|
||||
"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 酱 <sup>3</sup>",
|
||||
"access.form.webhook_preset_data.option.serverchanturbo.label": "Server酱 <sup>Turbo</sup>",
|
||||
"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 酱 <sup>3</sup>",
|
||||
"access.form.webhook_preset_data.serverchanturbo": "Server酱 <sup>Turbo</sup>",
|
||||
"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": "这是什么?请参阅 <a href=\"https://open.work.weixin.qq.com/help2/pc/18401#%E5%85%AD%E3%80%81%E7%BE%A4%E6%9C%BA%E5%99%A8%E4%BA%BAWebhook%E5%9C%B0%E5%9D%80\" target=\"_blank\">https://open.work.weixin.qq.com/help2/pc/18401</a>",
|
||||
|
||||
@ -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": "这是什么?请参阅 <a href=\"https://docs.netlify.com/api/get-started/#get-site\" target=\"_blank\">https://docs.netlify.com/api/get-started/#get-site</a>",
|
||||
@ -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": "腾讯云接口端点(可选)",
|
||||
|
||||
Loading…
Reference in New Issue
Block a user