Merge pull request #783 from fudiwei/feat/providers

new providers
This commit is contained in:
RHQYZ
2025-06-14 21:47:37 +08:00
committed by GitHub
142 changed files with 7423 additions and 325 deletions

View File

@@ -15,6 +15,7 @@ import AccessForm1PanelConfig from "./AccessForm1PanelConfig";
import AccessFormACMECAConfig from "./AccessFormACMECAConfig";
import AccessFormACMEHttpReqConfig from "./AccessFormACMEHttpReqConfig";
import AccessFormAliyunConfig from "./AccessFormAliyunConfig";
import AccessFormAPISIXConfig from "./AccessFormAPISIXConfig";
import AccessFormAWSConfig from "./AccessFormAWSConfig";
import AccessFormAzureConfig from "./AccessFormAzureConfig";
import AccessFormBaiduCloudConfig from "./AccessFormBaiduCloudConfig";
@@ -29,6 +30,7 @@ import AccessFormCloudflareConfig from "./AccessFormCloudflareConfig";
import AccessFormClouDNSConfig from "./AccessFormClouDNSConfig";
import AccessFormCMCCCloudConfig from "./AccessFormCMCCCloudConfig";
import AccessFormConstellixConfig from "./AccessFormConstellixConfig";
import AccessFormCTCCCloudConfig from "./AccessFormCTCCCloudConfig";
import AccessFormDeSECConfig from "./AccessFormDeSECConfig";
import AccessFormDigitalOceanConfig from "./AccessFormDigitalOceanConfig";
import AccessFormDingTalkBotConfig from "./AccessFormDingTalkBotConfig";
@@ -194,6 +196,8 @@ const AccessForm = forwardRef<AccessFormInstance, AccessFormProps>(({ className,
return <AccessFormACMEHttpReqConfig {...nestedFormProps} />;
case ACCESS_PROVIDERS.ALIYUN:
return <AccessFormAliyunConfig {...nestedFormProps} />;
case ACCESS_PROVIDERS.APISIX:
return <AccessFormAPISIXConfig {...nestedFormProps} />;
case ACCESS_PROVIDERS.AWS:
return <AccessFormAWSConfig {...nestedFormProps} />;
case ACCESS_PROVIDERS.AZURE:
@@ -222,6 +226,8 @@ const AccessForm = forwardRef<AccessFormInstance, AccessFormProps>(({ className,
return <AccessFormCMCCCloudConfig {...nestedFormProps} />;
case ACCESS_PROVIDERS.CONSTELLIX:
return <AccessFormConstellixConfig {...nestedFormProps} />;
case ACCESS_PROVIDERS.CTCCCLOUD:
return <AccessFormCTCCCloudConfig {...nestedFormProps} />;
case ACCESS_PROVIDERS.DESEC:
return <AccessFormDeSECConfig {...nestedFormProps} />;
case ACCESS_PROVIDERS.DIGITALOCEAN:

View File

@@ -0,0 +1,71 @@
import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input, Switch } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import { type AccessConfigForAPISIX } from "@/domain/access";
type AccessFormAPISIXConfigFieldValues = Nullish<AccessConfigForAPISIX>;
export type AccessFormAPISIXConfigProps = {
form: FormInstance;
formName: string;
disabled?: boolean;
initialValues?: AccessFormAPISIXConfigFieldValues;
onValuesChange?: (values: AccessFormAPISIXConfigFieldValues) => void;
};
const initFormModel = (): AccessFormAPISIXConfigFieldValues => {
return {
serverUrl: "http://<your-host-addr>:9180/",
apiKey: "",
};
};
const AccessFormAPISIXConfig = ({ form: formInst, formName, disabled, initialValues, onValuesChange }: AccessFormAPISIXConfigProps) => {
const { t } = useTranslation();
const formSchema = z.object({
serverUrl: z.string().url(t("common.errmsg.url_invalid")),
apiKey: z.string().trim().nonempty(t("access.form.apisix_api_key.placeholder")),
allowInsecureConnections: z.boolean().nullish(),
});
const formRule = createSchemaFieldRule(formSchema);
const handleFormChange = (_: unknown, values: z.infer<typeof formSchema>) => {
onValuesChange?.(values);
};
return (
<Form
form={formInst}
disabled={disabled}
initialValues={initialValues ?? initFormModel()}
layout="vertical"
name={formName}
onValuesChange={handleFormChange}
>
<Form.Item name="serverUrl" label={t("access.form.apisix_server_url.label")} rules={[formRule]}>
<Input placeholder={t("access.form.apisix_server_url.placeholder")} />
</Form.Item>
<Form.Item
name="apiKey"
label={t("access.form.apisix_api_key.label")}
rules={[formRule]}
tooltip={<span dangerouslySetInnerHTML={{ __html: t("access.form.apisix_api_key.tooltip") }}></span>}
>
<Input.Password autoComplete="new-password" placeholder={t("access.form.apisix_api_key.placeholder")} />
</Form.Item>
<Form.Item name="allowInsecureConnections" label={t("access.form.common_allow_insecure_conns.label")} rules={[formRule]}>
<Switch
checkedChildren={t("access.form.common_allow_insecure_conns.switch.on")}
unCheckedChildren={t("access.form.common_allow_insecure_conns.switch.off")}
/>
</Form.Item>
</Form>
);
};
export default AccessFormAPISIXConfig;

View File

@@ -0,0 +1,73 @@
import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import { type AccessConfigForCTCCCloud } from "@/domain/access";
type AccessFormCTCCCloudConfigFieldValues = Nullish<AccessConfigForCTCCCloud>;
export type AccessFormCTCCCloudConfigProps = {
form: FormInstance;
formName: string;
disabled?: boolean;
initialValues?: AccessFormCTCCCloudConfigFieldValues;
onValuesChange?: (values: AccessFormCTCCCloudConfigFieldValues) => void;
};
const initFormModel = (): AccessFormCTCCCloudConfigFieldValues => {
return {
accessKeyId: "",
secretAccessKey: "",
};
};
const AccessFormCTCCCloudConfig = ({ form: formInst, formName, disabled, initialValues, onValuesChange: onValuesChange }: AccessFormCTCCCloudConfigProps) => {
const { t } = useTranslation();
const formSchema = z.object({
accessKeyId: z
.string()
.min(1, t("access.form.ctcccloud_access_key_id.placeholder"))
.max(64, t("common.errmsg.string_max", { max: 64 })),
secretAccessKey: z
.string()
.min(1, t("access.form.ctcccloud_secret_access_key.placeholder"))
.max(64, t("common.errmsg.string_max", { max: 64 })),
});
const formRule = createSchemaFieldRule(formSchema);
const handleFormChange = (_: unknown, values: z.infer<typeof formSchema>) => {
onValuesChange?.(values);
};
return (
<Form
form={formInst}
disabled={disabled}
initialValues={initialValues ?? initFormModel()}
layout="vertical"
name={formName}
onValuesChange={handleFormChange}
>
<Form.Item
name="accessKeyId"
label={t("access.form.ctcccloud_access_key_id.label")}
rules={[formRule]}
tooltip={<span dangerouslySetInnerHTML={{ __html: t("access.form.ctcccloud_access_key_id.tooltip") }}></span>}
>
<Input autoComplete="new-password" placeholder={t("access.form.ctcccloud_access_key_id.placeholder")} />
</Form.Item>
<Form.Item
name="secretAccessKey"
label={t("access.form.ctcccloud_secret_access_key.label")}
rules={[formRule]}
tooltip={<span dangerouslySetInnerHTML={{ __html: t("access.form.ctcccloud_secret_access_key.tooltip") }}></span>}
>
<Input.Password autoComplete="new-password" placeholder={t("access.form.ctcccloud_secret_access_key.placeholder")} />
</Form.Item>
</Form>
);
};
export default AccessFormCTCCCloudConfig;

View File

@@ -54,6 +54,7 @@ const AccessFormEmailConfig = ({ form: formInst, formName, disabled, initialValu
if (!v) return true;
return validEmailAddress(v);
}, t("common.errmsg.email_invalid")),
defaultSenderName: z.string().nullish(),
defaultReceiverAddress: z
.string()
.nullish()
@@ -115,6 +116,10 @@ const AccessFormEmailConfig = ({ form: formInst, formName, disabled, initialValu
<Input type="email" allowClear placeholder={t("access.form.email_default_sender_address.placeholder")} />
</Form.Item>
<Form.Item name="defaultSenderName" label={t("access.form.email_default_sender_name.label")} rules={[formRule]}>
<Input allowClear placeholder={t("access.form.email_default_sender_name.placeholder")} />
</Form.Item>
<Form.Item name="defaultReceiverAddress" label={t("access.form.email_default_receiver_address.label")} rules={[formRule]}>
<Input type="email" allowClear placeholder={t("access.form.email_default_receiver_address.placeholder")} />
</Form.Item>

View File

@@ -72,6 +72,7 @@ const DeploymentProviderPicker = ({ className, style, autoFocus, filter, placeho
DEPLOYMENT_CATEGORIES.LOADBALANCE,
DEPLOYMENT_CATEGORIES.FIREWALL,
DEPLOYMENT_CATEGORIES.AV,
DEPLOYMENT_CATEGORIES.ACCELERATOR,
DEPLOYMENT_CATEGORIES.APIGATEWAY,
DEPLOYMENT_CATEGORIES.SERVERLESS,
DEPLOYMENT_CATEGORIES.WEBSITE,

View File

@@ -33,6 +33,7 @@ import DeployNodeConfigFormAliyunNLBConfig from "./DeployNodeConfigFormAliyunNLB
import DeployNodeConfigFormAliyunOSSConfig from "./DeployNodeConfigFormAliyunOSSConfig";
import DeployNodeConfigFormAliyunVODConfig from "./DeployNodeConfigFormAliyunVODConfig";
import DeployNodeConfigFormAliyunWAFConfig from "./DeployNodeConfigFormAliyunWAFConfig";
import DeployNodeConfigFormAPISIXConfig from "./DeployNodeConfigFormAPISIXConfig";
import DeployNodeConfigFormAWSACMConfig from "./DeployNodeConfigFormAWSACMConfig";
import DeployNodeConfigFormAWSCloudFrontConfig from "./DeployNodeConfigFormAWSCloudFrontConfig";
import DeployNodeConfigFormAWSIAMConfig from "./DeployNodeConfigFormAWSIAMConfig";
@@ -47,6 +48,11 @@ import DeployNodeConfigFormBaotaWAFSiteConfig from "./DeployNodeConfigFormBaotaW
import DeployNodeConfigFormBunnyCDNConfig from "./DeployNodeConfigFormBunnyCDNConfig.tsx";
import DeployNodeConfigFormBytePlusCDNConfig from "./DeployNodeConfigFormBytePlusCDNConfig";
import DeployNodeConfigFormCdnflyConfig from "./DeployNodeConfigFormCdnflyConfig";
import DeployNodeConfigFormCTCCCloudAOConfig from "./DeployNodeConfigFormCTCCCloudAOConfig";
import DeployNodeConfigFormCTCCCloudCDNConfig from "./DeployNodeConfigFormCTCCCloudCDNConfig";
import DeployNodeConfigFormCTCCCloudELBConfig from "./DeployNodeConfigFormCTCCCloudELBConfig";
import DeployNodeConfigFormCTCCCloudICDNConfig from "./DeployNodeConfigFormCTCCCloudICDNConfig";
import DeployNodeConfigFormCTCCCloudLVDNConfig from "./DeployNodeConfigFormCTCCCloudLVDNConfig";
import DeployNodeConfigFormDogeCloudCDNConfig from "./DeployNodeConfigFormDogeCloudCDNConfig";
import DeployNodeConfigFormEdgioApplicationsConfig from "./DeployNodeConfigFormEdgioApplicationsConfig";
import DeployNodeConfigFormFlexCDNConfig from "./DeployNodeConfigFormFlexCDNConfig";
@@ -77,6 +83,7 @@ import DeployNodeConfigFormTencentCloudCOSConfig from "./DeployNodeConfigFormTen
import DeployNodeConfigFormTencentCloudCSSConfig from "./DeployNodeConfigFormTencentCloudCSSConfig.tsx";
import DeployNodeConfigFormTencentCloudECDNConfig from "./DeployNodeConfigFormTencentCloudECDNConfig.tsx";
import DeployNodeConfigFormTencentCloudEOConfig from "./DeployNodeConfigFormTencentCloudEOConfig.tsx";
import DeployNodeConfigFormTencentCloudGAAPConfig from "./DeployNodeConfigFormTencentCloudGAAPConfig.tsx";
import DeployNodeConfigFormTencentCloudSCFConfig from "./DeployNodeConfigFormTencentCloudSCFConfig";
import DeployNodeConfigFormTencentCloudSSLDeployConfig from "./DeployNodeConfigFormTencentCloudSSLDeployConfig";
import DeployNodeConfigFormTencentCloudVODConfig from "./DeployNodeConfigFormTencentCloudVODConfig";
@@ -233,6 +240,8 @@ const DeployNodeConfigForm = forwardRef<DeployNodeConfigFormInstance, DeployNode
return <DeployNodeConfigFormAliyunVODConfig {...nestedFormProps} />;
case DEPLOYMENT_PROVIDERS.ALIYUN_WAF:
return <DeployNodeConfigFormAliyunWAFConfig {...nestedFormProps} />;
case DEPLOYMENT_PROVIDERS.APISIX:
return <DeployNodeConfigFormAPISIXConfig {...nestedFormProps} />;
case DEPLOYMENT_PROVIDERS.AWS_ACM:
return <DeployNodeConfigFormAWSACMConfig {...nestedFormProps} />;
case DEPLOYMENT_PROVIDERS.AWS_CLOUDFRONT:
@@ -261,6 +270,16 @@ const DeployNodeConfigForm = forwardRef<DeployNodeConfigFormInstance, DeployNode
return <DeployNodeConfigFormBytePlusCDNConfig {...nestedFormProps} />;
case DEPLOYMENT_PROVIDERS.CDNFLY:
return <DeployNodeConfigFormCdnflyConfig {...nestedFormProps} />;
case DEPLOYMENT_PROVIDERS.CTCCCLOUD_AO:
return <DeployNodeConfigFormCTCCCloudAOConfig {...nestedFormProps} />;
case DEPLOYMENT_PROVIDERS.CTCCCLOUD_CDN:
return <DeployNodeConfigFormCTCCCloudCDNConfig {...nestedFormProps} />;
case DEPLOYMENT_PROVIDERS.CTCCCLOUD_ELB:
return <DeployNodeConfigFormCTCCCloudELBConfig {...nestedFormProps} />;
case DEPLOYMENT_PROVIDERS.CTCCCLOUD_ICDN:
return <DeployNodeConfigFormCTCCCloudICDNConfig {...nestedFormProps} />;
case DEPLOYMENT_PROVIDERS.CTCCCLOUD_LVDN:
return <DeployNodeConfigFormCTCCCloudLVDNConfig {...nestedFormProps} />;
case DEPLOYMENT_PROVIDERS.DOGECLOUD_CDN:
return <DeployNodeConfigFormDogeCloudCDNConfig {...nestedFormProps} />;
case DEPLOYMENT_PROVIDERS.EDGIO_APPLICATIONS:
@@ -321,6 +340,8 @@ const DeployNodeConfigForm = forwardRef<DeployNodeConfigFormInstance, DeployNode
return <DeployNodeConfigFormTencentCloudECDNConfig {...nestedFormProps} />;
case DEPLOYMENT_PROVIDERS.TENCENTCLOUD_EO:
return <DeployNodeConfigFormTencentCloudEOConfig {...nestedFormProps} />;
case DEPLOYMENT_PROVIDERS.TENCENTCLOUD_GAAP:
return <DeployNodeConfigFormTencentCloudGAAPConfig {...nestedFormProps} />;
case DEPLOYMENT_PROVIDERS.TENCENTCLOUD_SCF:
return <DeployNodeConfigFormTencentCloudSCFConfig {...nestedFormProps} />;
case DEPLOYMENT_PROVIDERS.TENCENTCLOUD_SSL_DEPLOY:

View File

@@ -0,0 +1,81 @@
import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input, Select } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
type DeployNodeConfigFormAPISIXConfigFieldValues = Nullish<{
resourceType: string;
certificateId?: string;
}>;
export type DeployNodeConfigFormAPISIXConfigProps = {
form: FormInstance;
formName: string;
disabled?: boolean;
initialValues?: DeployNodeConfigFormAPISIXConfigFieldValues;
onValuesChange?: (values: DeployNodeConfigFormAPISIXConfigFieldValues) => void;
};
const RESOURCE_TYPE_CERTIFICATE = "certificate" as const;
const initFormModel = (): DeployNodeConfigFormAPISIXConfigFieldValues => {
return {
resourceType: RESOURCE_TYPE_CERTIFICATE,
certificateId: "",
};
};
const DeployNodeConfigFormAPISIXConfig = ({ form: formInst, formName, disabled, initialValues, onValuesChange }: DeployNodeConfigFormAPISIXConfigProps) => {
const { t } = useTranslation();
const formSchema = z.object({
resourceType: z.literal(RESOURCE_TYPE_CERTIFICATE, {
message: t("workflow_node.deploy.form.apisix_resource_type.placeholder"),
}),
certificateId: z
.string()
.nullish()
.refine((v) => fieldResourceType !== RESOURCE_TYPE_CERTIFICATE || !!v?.trim(), t("workflow_node.deploy.form.apisix_certificate_id.placeholder")),
});
const formRule = createSchemaFieldRule(formSchema);
const fieldResourceType = Form.useWatch("resourceType", formInst);
const handleFormChange = (_: unknown, values: z.infer<typeof formSchema>) => {
onValuesChange?.(values);
};
return (
<Form
form={formInst}
disabled={disabled}
initialValues={initialValues ?? initFormModel()}
layout="vertical"
name={formName}
onValuesChange={handleFormChange}
>
<Form.Item name="resourceType" label={t("workflow_node.deploy.form.apisix_resource_type.label")} rules={[formRule]}>
<Select placeholder={t("workflow_node.deploy.form.apisix_resource_type.placeholder")}>
<Select.Option key={RESOURCE_TYPE_CERTIFICATE} value={RESOURCE_TYPE_CERTIFICATE}>
{t("workflow_node.deploy.form.apisix_resource_type.option.certificate.label")}
</Select.Option>
</Select>
</Form.Item>
<Show when={fieldResourceType === RESOURCE_TYPE_CERTIFICATE}>
<Form.Item
name="certificateId"
label={t("workflow_node.deploy.form.apisix_certificate_id.label")}
rules={[formRule]}
tooltip={<span dangerouslySetInnerHTML={{ __html: t("workflow_node.deploy.form.apisix_certificate_id.tooltip") }}></span>}
>
<Input placeholder={t("workflow_node.deploy.form.apisix_certificate_id.placeholder")} />
</Form.Item>
</Show>
</Form>
);
};
export default DeployNodeConfigFormAPISIXConfig;

View File

@@ -26,7 +26,9 @@ const RESOURCE_TYPE_LOADBALANCER = "loadbalancer" as const;
const RESOURCE_TYPE_LISTENER = "listener" as const;
const initFormModel = (): DeployNodeConfigFormAliyunALBConfigFieldValues => {
return {};
return {
resourceType: RESOURCE_TYPE_LISTENER,
};
};
const DeployNodeConfigFormAliyunALBConfig = ({

View File

@@ -27,6 +27,7 @@ const RESOURCE_TYPE_LISTENER = "listener" as const;
const initFormModel = (): DeployNodeConfigFormAliyunCLBConfigFieldValues => {
return {
resourceType: RESOURCE_TYPE_LISTENER,
listenerPort: 443,
};
};

View File

@@ -25,7 +25,9 @@ const RESOURCE_TYPE_ACCELERATOR = "accelerator" as const;
const RESOURCE_TYPE_LISTENER = "listener" as const;
const initFormModel = (): DeployNodeConfigFormAliyunGAConfigFieldValues => {
return {};
return {
resourceType: RESOURCE_TYPE_LISTENER,
};
};
const DeployNodeConfigFormAliyunGAConfig = ({ form: formInst, formName, disabled, initialValues, onValuesChange }: DeployNodeConfigFormAliyunGAConfigProps) => {

View File

@@ -24,7 +24,9 @@ const RESOURCE_TYPE_LOADBALANCER = "loadbalancer" as const;
const RESOURCE_TYPE_LISTENER = "listener" as const;
const initFormModel = (): DeployNodeConfigFormAliyunNLBConfigFieldValues => {
return {};
return {
resourceType: RESOURCE_TYPE_LISTENER,
};
};
const DeployNodeConfigFormAliyunNLBConfig = ({

View File

@@ -27,6 +27,7 @@ const RESOURCE_TYPE_LISTENER = "listener" as const;
const initFormModel = (): DeployNodeConfigFormBaiduCloudAppBLBConfigFieldValues => {
return {
resourceType: RESOURCE_TYPE_LISTENER,
listenerPort: 443,
};
};

View File

@@ -27,6 +27,7 @@ const RESOURCE_TYPE_LISTENER = "listener" as const;
const initFormModel = (): DeployNodeConfigFormBaiduCloudBLBConfigFieldValues => {
return {
resourceType: RESOURCE_TYPE_LISTENER,
listenerPort: 443,
};
};

View File

@@ -0,0 +1,65 @@
import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import { validDomainName } from "@/utils/validators";
type DeployNodeConfigFormCTCCCloudAOConfigFieldValues = Nullish<{
domain: string;
}>;
export type DeployNodeConfigFormCTCCCloudAOConfigProps = {
form: FormInstance;
formName: string;
disabled?: boolean;
initialValues?: DeployNodeConfigFormCTCCCloudAOConfigFieldValues;
onValuesChange?: (values: DeployNodeConfigFormCTCCCloudAOConfigFieldValues) => void;
};
const initFormModel = (): DeployNodeConfigFormCTCCCloudAOConfigFieldValues => {
return {};
};
const DeployNodeConfigFormCTCCCloudAOConfig = ({
form: formInst,
formName,
disabled,
initialValues,
onValuesChange,
}: DeployNodeConfigFormCTCCCloudAOConfigProps) => {
const { t } = useTranslation();
const formSchema = z.object({
domain: z
.string({ message: t("workflow_node.deploy.form.ctcccloud_ao_domain.placeholder") })
.refine((v) => validDomainName(v, { allowWildcard: true }), t("common.errmsg.domain_invalid")),
});
const formRule = createSchemaFieldRule(formSchema);
const handleFormChange = (_: unknown, values: z.infer<typeof formSchema>) => {
onValuesChange?.(values);
};
return (
<Form
form={formInst}
disabled={disabled}
initialValues={initialValues ?? initFormModel()}
layout="vertical"
name={formName}
onValuesChange={handleFormChange}
>
<Form.Item
name="domain"
label={t("workflow_node.deploy.form.ctcccloud_ao_domain.label")}
rules={[formRule]}
tooltip={<span dangerouslySetInnerHTML={{ __html: t("workflow_node.deploy.form.ctcccloud_ao_domain.tooltip") }}></span>}
>
<Input placeholder={t("workflow_node.deploy.form.ctcccloud_ao_domain.placeholder")} />
</Form.Item>
</Form>
);
};
export default DeployNodeConfigFormCTCCCloudAOConfig;

View File

@@ -0,0 +1,65 @@
import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import { validDomainName } from "@/utils/validators";
type DeployNodeConfigFormCTCCCloudCDNConfigFieldValues = Nullish<{
domain: string;
}>;
export type DeployNodeConfigFormCTCCCloudCDNConfigProps = {
form: FormInstance;
formName: string;
disabled?: boolean;
initialValues?: DeployNodeConfigFormCTCCCloudCDNConfigFieldValues;
onValuesChange?: (values: DeployNodeConfigFormCTCCCloudCDNConfigFieldValues) => void;
};
const initFormModel = (): DeployNodeConfigFormCTCCCloudCDNConfigFieldValues => {
return {};
};
const DeployNodeConfigFormCTCCCloudCDNConfig = ({
form: formInst,
formName,
disabled,
initialValues,
onValuesChange,
}: DeployNodeConfigFormCTCCCloudCDNConfigProps) => {
const { t } = useTranslation();
const formSchema = z.object({
domain: z
.string({ message: t("workflow_node.deploy.form.ctcccloud_cdn_domain.placeholder") })
.refine((v) => validDomainName(v, { allowWildcard: true }), t("common.errmsg.domain_invalid")),
});
const formRule = createSchemaFieldRule(formSchema);
const handleFormChange = (_: unknown, values: z.infer<typeof formSchema>) => {
onValuesChange?.(values);
};
return (
<Form
form={formInst}
disabled={disabled}
initialValues={initialValues ?? initFormModel()}
layout="vertical"
name={formName}
onValuesChange={handleFormChange}
>
<Form.Item
name="domain"
label={t("workflow_node.deploy.form.ctcccloud_cdn_domain.label")}
rules={[formRule]}
tooltip={<span dangerouslySetInnerHTML={{ __html: t("workflow_node.deploy.form.ctcccloud_cdn_domain.tooltip") }}></span>}
>
<Input placeholder={t("workflow_node.deploy.form.ctcccloud_cdn_domain.placeholder")} />
</Form.Item>
</Form>
);
};
export default DeployNodeConfigFormCTCCCloudCDNConfig;

View File

@@ -0,0 +1,121 @@
import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input, Select } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
type DeployNodeConfigFormCTCCCloudELBConfigFieldValues = Nullish<{
regionId: string;
resourceType: string;
loadbalancerId?: string;
listenerId?: string;
}>;
export type DeployNodeConfigFormCTCCCloudELBConfigProps = {
form: FormInstance;
formName: string;
disabled?: boolean;
initialValues?: DeployNodeConfigFormCTCCCloudELBConfigFieldValues;
onValuesChange?: (values: DeployNodeConfigFormCTCCCloudELBConfigFieldValues) => void;
};
const RESOURCE_TYPE_LOADBALANCER = "loadbalancer" as const;
const RESOURCE_TYPE_LISTENER = "listener" as const;
const initFormModel = (): DeployNodeConfigFormCTCCCloudELBConfigFieldValues => {
return {
resourceType: RESOURCE_TYPE_LISTENER,
};
};
const DeployNodeConfigFormCTCCCloudELBConfig = ({
form: formInst,
formName,
disabled,
initialValues,
onValuesChange,
}: DeployNodeConfigFormCTCCCloudELBConfigProps) => {
const { t } = useTranslation();
const formSchema = z.object({
resourceType: z.union([z.literal(RESOURCE_TYPE_LOADBALANCER), z.literal(RESOURCE_TYPE_LISTENER)], {
message: t("workflow_node.deploy.form.ctcccloud_elb_resource_type.placeholder"),
}),
regionId: z
.string({ message: t("workflow_node.deploy.form.ctcccloud_elb_region_id.placeholder") })
.nonempty(t("workflow_node.deploy.form.ctcccloud_elb_region_id.placeholder")),
loadbalancerId: z
.string()
.max(64, t("common.errmsg.string_max", { max: 64 }))
.nullish()
.refine((v) => fieldResourceType !== RESOURCE_TYPE_LOADBALANCER || !!v?.trim(), t("workflow_node.deploy.form.ctcccloud_elb_loadbalancer_id.placeholder")),
listenerId: z
.string()
.max(64, t("common.errmsg.string_max", { max: 64 }))
.nullish()
.refine((v) => fieldResourceType !== RESOURCE_TYPE_LISTENER || !!v?.trim(), t("workflow_node.deploy.form.ctcccloud_elb_listener_id.placeholder")),
});
const formRule = createSchemaFieldRule(formSchema);
const fieldResourceType = Form.useWatch("resourceType", formInst);
const handleFormChange = (_: unknown, values: z.infer<typeof formSchema>) => {
onValuesChange?.(values);
};
return (
<Form
form={formInst}
disabled={disabled}
initialValues={initialValues ?? initFormModel()}
layout="vertical"
name={formName}
onValuesChange={handleFormChange}
>
<Form.Item name="resourceType" label={t("workflow_node.deploy.form.ctcccloud_elb_resource_type.label")} rules={[formRule]}>
<Select placeholder={t("workflow_node.deploy.form.ctcccloud_elb_resource_type.placeholder")}>
<Select.Option key={RESOURCE_TYPE_LOADBALANCER} value={RESOURCE_TYPE_LOADBALANCER}>
{t("workflow_node.deploy.form.ctcccloud_elb_resource_type.option.loadbalancer.label")}
</Select.Option>
<Select.Option key={RESOURCE_TYPE_LISTENER} value={RESOURCE_TYPE_LISTENER}>
{t("workflow_node.deploy.form.ctcccloud_elb_resource_type.option.listener.label")}
</Select.Option>
</Select>
</Form.Item>
<Form.Item
name="regionId"
label={t("workflow_node.deploy.form.ctcccloud_elb_region_id.label")}
rules={[formRule]}
tooltip={<span dangerouslySetInnerHTML={{ __html: t("workflow_node.deploy.form.ctcccloud_elb_region_id.tooltip") }}></span>}
>
<Input placeholder={t("workflow_node.deploy.form.ctcccloud_elb_region_id.placeholder")} />
</Form.Item>
<Show when={fieldResourceType === RESOURCE_TYPE_LOADBALANCER}>
<Form.Item
name="loadbalancerId"
label={t("workflow_node.deploy.form.ctcccloud_elb_loadbalancer_id.label")}
rules={[formRule]}
tooltip={<span dangerouslySetInnerHTML={{ __html: t("workflow_node.deploy.form.ctcccloud_elb_loadbalancer_id.tooltip") }}></span>}
>
<Input placeholder={t("workflow_node.deploy.form.ctcccloud_elb_loadbalancer_id.placeholder")} />
</Form.Item>
</Show>
<Show when={fieldResourceType === RESOURCE_TYPE_LISTENER}>
<Form.Item
name="listenerId"
label={t("workflow_node.deploy.form.ctcccloud_elb_listener_id.label")}
rules={[formRule]}
tooltip={<span dangerouslySetInnerHTML={{ __html: t("workflow_node.deploy.form.ctcccloud_elb_listener_id.tooltip") }}></span>}
>
<Input placeholder={t("workflow_node.deploy.form.ctcccloud_elb_listener_id.placeholder")} />
</Form.Item>
</Show>
</Form>
);
};
export default DeployNodeConfigFormCTCCCloudELBConfig;

View File

@@ -0,0 +1,65 @@
import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import { validDomainName } from "@/utils/validators";
type DeployNodeConfigFormCTCCCloudICDNConfigFieldValues = Nullish<{
domain: string;
}>;
export type DeployNodeConfigFormCTCCCloudICDNConfigProps = {
form: FormInstance;
formName: string;
disabled?: boolean;
initialValues?: DeployNodeConfigFormCTCCCloudICDNConfigFieldValues;
onValuesChange?: (values: DeployNodeConfigFormCTCCCloudICDNConfigFieldValues) => void;
};
const initFormModel = (): DeployNodeConfigFormCTCCCloudICDNConfigFieldValues => {
return {};
};
const DeployNodeConfigFormCTCCCloudICDNConfig = ({
form: formInst,
formName,
disabled,
initialValues,
onValuesChange,
}: DeployNodeConfigFormCTCCCloudICDNConfigProps) => {
const { t } = useTranslation();
const formSchema = z.object({
domain: z
.string({ message: t("workflow_node.deploy.form.ctcccloud_icdn_domain.placeholder") })
.refine((v) => validDomainName(v, { allowWildcard: true }), t("common.errmsg.domain_invalid")),
});
const formRule = createSchemaFieldRule(formSchema);
const handleFormChange = (_: unknown, values: z.infer<typeof formSchema>) => {
onValuesChange?.(values);
};
return (
<Form
form={formInst}
disabled={disabled}
initialValues={initialValues ?? initFormModel()}
layout="vertical"
name={formName}
onValuesChange={handleFormChange}
>
<Form.Item
name="domain"
label={t("workflow_node.deploy.form.ctcccloud_icdn_domain.label")}
rules={[formRule]}
tooltip={<span dangerouslySetInnerHTML={{ __html: t("workflow_node.deploy.form.ctcccloud_icdn_domain.tooltip") }}></span>}
>
<Input placeholder={t("workflow_node.deploy.form.ctcccloud_icdn_domain.placeholder")} />
</Form.Item>
</Form>
);
};
export default DeployNodeConfigFormCTCCCloudICDNConfig;

View File

@@ -0,0 +1,65 @@
import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import { validDomainName } from "@/utils/validators";
type DeployNodeConfigFormCTCCCloudLVDNConfigFieldValues = Nullish<{
domain: string;
}>;
export type DeployNodeConfigFormCTCCCloudLVDNConfigProps = {
form: FormInstance;
formName: string;
disabled?: boolean;
initialValues?: DeployNodeConfigFormCTCCCloudLVDNConfigFieldValues;
onValuesChange?: (values: DeployNodeConfigFormCTCCCloudLVDNConfigFieldValues) => void;
};
const initFormModel = (): DeployNodeConfigFormCTCCCloudLVDNConfigFieldValues => {
return {};
};
const DeployNodeConfigFormCTCCCloudLVDNConfig = ({
form: formInst,
formName,
disabled,
initialValues,
onValuesChange,
}: DeployNodeConfigFormCTCCCloudLVDNConfigProps) => {
const { t } = useTranslation();
const formSchema = z.object({
domain: z
.string({ message: t("workflow_node.deploy.form.ctcccloud_lvdn_domain.placeholder") })
.refine((v) => validDomainName(v), t("common.errmsg.domain_invalid")),
});
const formRule = createSchemaFieldRule(formSchema);
const handleFormChange = (_: unknown, values: z.infer<typeof formSchema>) => {
onValuesChange?.(values);
};
return (
<Form
form={formInst}
disabled={disabled}
initialValues={initialValues ?? initFormModel()}
layout="vertical"
name={formName}
onValuesChange={handleFormChange}
>
<Form.Item
name="domain"
label={t("workflow_node.deploy.form.ctcccloud_lvdn_domain.label")}
rules={[formRule]}
tooltip={<span dangerouslySetInnerHTML={{ __html: t("workflow_node.deploy.form.ctcccloud_lvdn_domain.tooltip") }}></span>}
>
<Input placeholder={t("workflow_node.deploy.form.ctcccloud_lvdn_domain.placeholder")} />
</Form.Item>
</Form>
);
};
export default DeployNodeConfigFormCTCCCloudLVDNConfig;

View File

@@ -26,7 +26,9 @@ const RESOURCE_TYPE_LOADBALANCER = "loadbalancer" as const;
const RESOURCE_TYPE_LISTENER = "listener" as const;
const initFormModel = (): DeployNodeConfigFormHuaweiCloudELBConfigFieldValues => {
return {};
return {
resourceType: RESOURCE_TYPE_LISTENER,
};
};
const DeployNodeConfigFormHuaweiCloudELBConfig = ({

View File

@@ -26,7 +26,9 @@ const RESOURCE_TYPE_LOADBALANCER = "loadbalancer" as const;
const RESOURCE_TYPE_LISTENER = "listener" as const;
const initFormModel = (): DeployNodeConfigFormJDCloudALBConfigFieldValues => {
return {};
return {
resourceType: RESOURCE_TYPE_LISTENER,
};
};
const DeployNodeConfigFormJDCloudALBConfig = ({

View File

@@ -46,12 +46,13 @@ const initFormModel = (): DeployNodeConfigFormSSHConfigFieldValues => {
};
const initPresetScript = (
key: Parameters<typeof _initPresetScript>[0] | "sh_replace_synologydsm_ssl" | "sh_replace_fnos_ssl",
key: Parameters<typeof _initPresetScript>[0] | "sh_replace_synologydsm_ssl" | "sh_replace_fnos_ssl" | "sh_replace_qnap_ssl",
params?: Parameters<typeof _initPresetScript>[1]
) => {
switch (key) {
case "sh_replace_synologydsm_ssl":
return `# *** 需要 root 权限 ***
# 注意仅支持替换证书,需本身已开启过一次 HTTPS
# 脚本参考 https://github.com/catchdave/ssl-certs/blob/main/replace_synology_ssl_certs.sh
# 请将以下变量替换为实际值
@@ -129,6 +130,7 @@ info "Completed"
case "sh_replace_fnos_ssl":
return `# *** 需要 root 权限 ***
# 注意仅支持替换证书,需本身已开启过一次 HTTPS
# 脚本参考 https://github.com/lfgyx/fnos_certificate_update/blob/main/src/update_cert.sh
# 请将以下变量替换为实际值
@@ -145,9 +147,9 @@ $domain = "<your-domain-name>" # 域名
cp -rf "$tmpFullchainPath" "$fnFullchainPath"
cp -rf "$tmpCertPath" "$fnCertPath"
cp -rf "$tmpKeyPath" "$fnKeyPath"
chmod 755 "$fnFullchainPath"
chmod 755 "$fnCertPath"
chmod 755 "$fnKeyPath"
chmod 755 "$fnFullchainPath"
# 更新数据库
NEW_EXPIRY_DATE=$(openssl x509 -enddate -noout -in "$fnCertPath" | sed "s/^.*=\\(.*\\)$/\\1/")
@@ -159,6 +161,28 @@ systemctl restart webdav.service
systemctl restart smbftpd.service
systemctl restart trim_nginx.service
`.trim();
case "sh_replace_qnap_ssl":
return `# *** 需要 root 权限 ***
# 注意仅支持替换证书,需本身已开启过一次 HTTPS
# 请将以下变量替换为实际值
$tmpFullchainPath = "${params?.certPath || "<your-fullchain-cert-path>"}" # 证书文件路径(与表单中保持一致)
$tmpKeyPath = "${params?.keyPath || "<your-key-path>"}" # 私钥文件路径(与表单中保持一致)
# 复制文件
cp -rf "$tmpFullchainPath" /etc/stunnel/backup.cert
cp -rf "$tmpKeyPath" /etc/stunnel/backup.key
cat /etc/stunnel/backup.key > /etc/stunnel/stunnel.pem
cat /etc/stunnel/backup.cert >> /etc/stunnel/stunnel.pem
chmod 600 /etc/stunnel/backup.cert
chmod 600 /etc/stunnel/backup.key
chmod 600 /etc/stunnel/stunnel.pem
# 重启服务
/etc/init.d/stunnel.sh restart
/etc/init.d/reverse_proxy.sh reload
`.trim();
}
return _initPresetScript(key as Parameters<typeof _initPresetScript>[0], params);
@@ -286,6 +310,7 @@ const DeployNodeConfigFormSSHConfig = ({ form: formInst, formName, disabled, ini
case "sh_replace_synologydsm_ssl":
case "sh_replace_fnos_ssl":
case "sh_replace_qnap_ssl":
{
const presetScriptParams = {
certPath: formInst.getFieldValue("certPath"),
@@ -461,13 +486,19 @@ const DeployNodeConfigFormSSHConfig = ({ form: formInst, formName, disabled, ini
<div className="text-right">
<Dropdown
menu={{
items: ["sh_reload_nginx", "sh_replace_synologydsm_ssl", "sh_replace_fnos_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),
})
),
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),
})),
}}
trigger={["click"]}
>

View File

@@ -29,7 +29,7 @@ const RESOURCE_TYPE_RULEDOMAIN = "ruledomain" as const;
const initFormModel = (): DeployNodeConfigFormTencentCloudCLBConfigFieldValues => {
return {
resourceType: RESOURCE_TYPE_VIA_SSLDEPLOY,
resourceType: RESOURCE_TYPE_LISTENER,
};
};

View File

@@ -0,0 +1,100 @@
import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input, Select } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
type DeployNodeConfigFormTencentCloudGAAPConfigFieldValues = Nullish<{
resourceType: string;
proxyId?: string;
listenerId?: string;
}>;
export type DeployNodeConfigFormTencentCloudGAAPConfigProps = {
form: FormInstance;
formName: string;
disabled?: boolean;
initialValues?: DeployNodeConfigFormTencentCloudGAAPConfigFieldValues;
onValuesChange?: (values: DeployNodeConfigFormTencentCloudGAAPConfigFieldValues) => void;
};
const RESOURCE_TYPE_LISTENER = "listener" as const;
const initFormModel = (): DeployNodeConfigFormTencentCloudGAAPConfigFieldValues => {
return {
resourceType: RESOURCE_TYPE_LISTENER,
listenerId: "",
};
};
const DeployNodeConfigFormTencentCloudGAAPConfig = ({
form: formInst,
formName,
disabled,
initialValues,
onValuesChange,
}: DeployNodeConfigFormTencentCloudGAAPConfigProps) => {
const { t } = useTranslation();
const formSchema = z.object({
resourceType: z.literal(RESOURCE_TYPE_LISTENER, { message: t("workflow_node.deploy.form.tencentcloud_gaap_resource_type.placeholder") }),
proxyId: z.string().trim().nullish(),
listenerId: z
.string()
.trim()
.nullish()
.refine(
(v) => ![RESOURCE_TYPE_LISTENER].includes(fieldResourceType) || !!v?.trim(),
t("workflow_node.deploy.form.tencentcloud_gaap_listener_id.placeholder")
),
});
const formRule = createSchemaFieldRule(formSchema);
const fieldResourceType = Form.useWatch("resourceType", formInst);
const handleFormChange = (_: unknown, values: z.infer<typeof formSchema>) => {
onValuesChange?.(values);
};
return (
<Form
form={formInst}
disabled={disabled}
initialValues={initialValues ?? initFormModel()}
layout="vertical"
name={formName}
onValuesChange={handleFormChange}
>
<Form.Item name="resourceType" label={t("workflow_node.deploy.form.tencentcloud_gaap_resource_type.label")} rules={[formRule]}>
<Select placeholder={t("workflow_node.deploy.form.tencentcloud_gaap_resource_type.placeholder")}>
<Select.Option key={RESOURCE_TYPE_LISTENER} value={RESOURCE_TYPE_LISTENER}>
{t("workflow_node.deploy.form.tencentcloud_gaap_resource_type.option.listener.label")}
</Select.Option>
</Select>
</Form.Item>
<Form.Item
name="proxyId"
label={t("workflow_node.deploy.form.tencentcloud_gaap_proxy_id.label")}
rules={[formRule]}
tooltip={<span dangerouslySetInnerHTML={{ __html: t("workflow_node.deploy.form.tencentcloud_gaap_proxy_id.tooltip") }}></span>}
>
<Input placeholder={t("workflow_node.deploy.form.tencentcloud_gaap_proxy_id.placeholder")} />
</Form.Item>
<Show when={fieldResourceType === RESOURCE_TYPE_LISTENER}>
<Form.Item
name="listenerId"
label={t("workflow_node.deploy.form.tencentcloud_gaap_listener_id.label")}
rules={[formRule]}
tooltip={<span dangerouslySetInnerHTML={{ __html: t("workflow_node.deploy.form.tencentcloud_gaap_listener_id.tooltip") }}></span>}
>
<Input placeholder={t("workflow_node.deploy.form.tencentcloud_gaap_listener_id.placeholder")} />
</Form.Item>
</Show>
</Form>
);
};
export default DeployNodeConfigFormTencentCloudGAAPConfig;

View File

@@ -33,6 +33,7 @@ const NotifyNodeConfigFormEmailConfig = ({ form: formInst, formName, disabled, i
if (!v) return true;
return validEmailAddress(v);
}, t("common.errmsg.email_invalid")),
senderName: z.string().nullish(),
receiverAddress: z
.string()
.nullish()
@@ -65,6 +66,15 @@ const NotifyNodeConfigFormEmailConfig = ({ form: formInst, formName, disabled, i
<Input type="email" allowClear placeholder={t("workflow_node.notify.form.email_sender_address.placeholder")} />
</Form.Item>
<Form.Item
name="senderName"
label={t("workflow_node.notify.form.email_sender_name.label")}
rules={[formRule]}
tooltip={<span dangerouslySetInnerHTML={{ __html: t("workflow_node.notify.form.email_sender_name.tooltip") }}></span>}
>
<Input allowClear placeholder={t("workflow_node.notify.form.email_sender_name.placeholder")} />
</Form.Item>
<Form.Item
name="receiverAddress"
label={t("workflow_node.notify.form.email_receiver_address.label")}

View File

@@ -10,6 +10,7 @@ export interface AccessModel extends BaseModel {
| AccessConfigForACMECA
| AccessConfigForACMEHttpReq
| AccessConfigForAliyun
| AccessConfigForAPISIX
| AccessConfigForAWS
| AccessConfigForAzure
| AccessConfigForBaiduCloud
@@ -24,6 +25,7 @@ export interface AccessModel extends BaseModel {
| AccessConfigForClouDNS
| AccessConfigForCMCCCloud
| AccessConfigForConstellix
| AccessConfigForCTCCCloud
| AccessConfigForDeSEC
| AccessConfigForDigitalOcean
| AccessConfigForDingTalkBot
@@ -105,6 +107,12 @@ export type AccessConfigForAliyun = {
resourceGroupId?: string;
};
export type AccessConfigForAPISIX = {
serverUrl: string;
apiKey: string;
allowInsecureConnections?: boolean;
};
export type AccessConfigForAWS = {
accessKeyId: string;
secretAccessKey: string;
@@ -178,6 +186,11 @@ export type AccessConfigForConstellix = {
secretKey: string;
};
export type AccessConfigForCTCCCloud = {
accessKeyId: string;
secretAccessKey: string;
};
export type AccessConfigForDeSEC = {
token: string;
};

View File

@@ -8,6 +8,7 @@ export const ACCESS_PROVIDERS = Object.freeze({
ACMECA: "acmeca",
ACMEHTTPREQ: "acmehttpreq",
ALIYUN: "aliyun",
APISIX: "apisix",
AWS: "aws",
AZURE: "azure",
BAIDUCLOUD: "baiducloud",
@@ -23,6 +24,7 @@ export const ACCESS_PROVIDERS = Object.freeze({
CLOUDNS: "cloudns",
CMCCCLOUD: "cmcccloud",
CONSTELLIX: "constellix",
CTCCCLOUD: "ctcccloud",
DESEC: "desec",
DIGITALOCEAN: "digitalocean",
DINGTALKBOT: "dingtalkbot",
@@ -122,6 +124,7 @@ export const accessProvidersMap: Map<AccessProvider["type"] | string, AccessProv
[ACCESS_PROVIDERS.NETLIFY, "provider.netlify", "/imgs/providers/netlify.png", [ACCESS_USAGES.DNS, ACCESS_USAGES.HOSTING]],
[ACCESS_PROVIDERS.RAINYUN, "provider.rainyun", "/imgs/providers/rainyun.svg", [ACCESS_USAGES.DNS, ACCESS_USAGES.HOSTING]],
[ACCESS_PROVIDERS.UCLOUD, "provider.ucloud", "/imgs/providers/ucloud.svg", [ACCESS_USAGES.DNS, ACCESS_USAGES.HOSTING]],
[ACCESS_PROVIDERS.CTCCCLOUD, "provider.ctcccloud", "/imgs/providers/ctcccloud.svg", [ACCESS_USAGES.DNS, ACCESS_USAGES.HOSTING]],
[ACCESS_PROVIDERS.QINIU, "provider.qiniu", "/imgs/providers/qiniu.svg", [ACCESS_USAGES.HOSTING]],
[ACCESS_PROVIDERS.UPYUN, "provider.upyun", "/imgs/providers/upyun.svg", [ACCESS_USAGES.HOSTING]],
@@ -141,6 +144,7 @@ export const accessProvidersMap: Map<AccessProvider["type"] | string, AccessProv
[ACCESS_PROVIDERS.LECDN, "provider.lecdn", "/imgs/providers/lecdn.svg", [ACCESS_USAGES.HOSTING]],
[ACCESS_PROVIDERS.CACHEFLY, "provider.cachefly", "/imgs/providers/cachefly.png", [ACCESS_USAGES.HOSTING]],
[ACCESS_PROVIDERS.EDGIO, "provider.edgio", "/imgs/providers/edgio.svg", [ACCESS_USAGES.HOSTING]],
[ACCESS_PROVIDERS.APISIX, "provider.apisix", "/imgs/providers/apisix.svg", [ACCESS_USAGES.HOSTING]],
[ACCESS_PROVIDERS.PROXMOXVE, "provider.proxmoxve", "/imgs/providers/proxmoxve.svg", [ACCESS_USAGES.HOSTING]],
[ACCESS_PROVIDERS.CLOUDFLARE, "provider.cloudflare", "/imgs/providers/cloudflare.svg", [ACCESS_USAGES.DNS]],
@@ -265,8 +269,11 @@ export const ACME_DNS01_PROVIDERS = Object.freeze({
BUNNY: `${ACCESS_PROVIDERS.BUNNY}`,
CLOUDFLARE: `${ACCESS_PROVIDERS.CLOUDFLARE}`,
CLOUDNS: `${ACCESS_PROVIDERS.CLOUDNS}`,
CMCCCLOUD: `${ACCESS_PROVIDERS.CMCCCLOUD}`,
CMCCCLOUD: `${ACCESS_PROVIDERS.CMCCCLOUD}`, // 兼容旧值,等同于 `CMCCCLOUD_DNS`
CMCCCLOUD_DNS: `${ACCESS_PROVIDERS.CMCCCLOUD}-dns`,
CONSTELLIX: `${ACCESS_PROVIDERS.CONSTELLIX}`,
CTCCCLOUD: `${ACCESS_PROVIDERS.CTCCCLOUD}`, // 兼容旧值,等同于 `CTCCCLOUD_SMARTDNS`
CTCCCLOUD_SMARTDNS: `${ACCESS_PROVIDERS.CTCCCLOUD}-smartdns`,
DESEC: `${ACCESS_PROVIDERS.DESEC}`,
DIGITALOCEAN: `${ACCESS_PROVIDERS.DIGITALOCEAN}`,
DNSLA: `${ACCESS_PROVIDERS.DNSLA}`,
@@ -345,7 +352,8 @@ export const acmeDns01ProvidersMap: Map<ACMEDns01Provider["type"] | string, ACME
[ACME_DNS01_PROVIDERS.NS1, "provider.ns1"],
[ACME_DNS01_PROVIDERS.PORKBUN, "provider.porkbun"],
[ACME_DNS01_PROVIDERS.VERCEL, "provider.vercel"],
[ACME_DNS01_PROVIDERS.CMCCCLOUD, "provider.cmcccloud"],
[ACME_DNS01_PROVIDERS.CMCCCLOUD_DNS, "provider.cmcccloud.dns"],
[ACME_DNS01_PROVIDERS.CTCCCLOUD_SMARTDNS, "provider.ctcccloud.smartdns"],
[ACME_DNS01_PROVIDERS.RAINYUN, "provider.rainyun"],
[ACME_DNS01_PROVIDERS.UCLOUD_UDNR, "provider.ucloud.udnr"],
[ACME_DNS01_PROVIDERS.WESTCN, "provider.westcn"],
@@ -387,6 +395,7 @@ export const DEPLOYMENT_PROVIDERS = Object.freeze({
ALIYUN_OSS: `${ACCESS_PROVIDERS.ALIYUN}-oss`,
ALIYUN_VOD: `${ACCESS_PROVIDERS.ALIYUN}-vod`,
ALIYUN_WAF: `${ACCESS_PROVIDERS.ALIYUN}-waf`,
APISIX: `${ACCESS_PROVIDERS.APISIX}`,
AWS_ACM: `${ACCESS_PROVIDERS.AWS}-acm`,
AWS_CLOUDFRONT: `${ACCESS_PROVIDERS.AWS}-cloudfront`,
AWS_IAM: `${ACCESS_PROVIDERS.AWS}-iam`,
@@ -404,6 +413,12 @@ export const DEPLOYMENT_PROVIDERS = Object.freeze({
BYTEPLUS_CDN: `${ACCESS_PROVIDERS.BYTEPLUS}-cdn`,
CACHEFLY: `${ACCESS_PROVIDERS.CACHEFLY}`,
CDNFLY: `${ACCESS_PROVIDERS.CDNFLY}`,
CTCCCLOUD_AO: `${ACCESS_PROVIDERS.CTCCCLOUD}-ao`,
CTCCCLOUD_CDN: `${ACCESS_PROVIDERS.CTCCCLOUD}-cdn`,
CTCCCLOUD_CMS: `${ACCESS_PROVIDERS.CTCCCLOUD}-cms`,
CTCCCLOUD_ELB: `${ACCESS_PROVIDERS.CTCCCLOUD}-elb`,
CTCCCLOUD_ICDN: `${ACCESS_PROVIDERS.CTCCCLOUD}-icdn`,
CTCCCLOUD_LVDN: `${ACCESS_PROVIDERS.CTCCCLOUD}-lvdn`,
DOGECLOUD_CDN: `${ACCESS_PROVIDERS.DOGECLOUD}-cdn`,
EDGIO_APPLICATIONS: `${ACCESS_PROVIDERS.EDGIO}-applications`,
FLEXCDN: `${ACCESS_PROVIDERS.FLEXCDN}`,
@@ -436,6 +451,7 @@ export const DEPLOYMENT_PROVIDERS = Object.freeze({
TENCENTCLOUD_CSS: `${ACCESS_PROVIDERS.TENCENTCLOUD}-css`,
TENCENTCLOUD_ECDN: `${ACCESS_PROVIDERS.TENCENTCLOUD}-ecdn`,
TENCENTCLOUD_EO: `${ACCESS_PROVIDERS.TENCENTCLOUD}-eo`,
TENCENTCLOUD_GAAP: `${ACCESS_PROVIDERS.TENCENTCLOUD}-gaap`,
TENCENTCLOUD_SCF: `${ACCESS_PROVIDERS.TENCENTCLOUD}-scf`,
TENCENTCLOUD_SSL: `${ACCESS_PROVIDERS.TENCENTCLOUD}-ssl`,
TENCENTCLOUD_SSL_DEPLOY: `${ACCESS_PROVIDERS.TENCENTCLOUD}-ssldeploy`,
@@ -469,6 +485,7 @@ export const DEPLOYMENT_CATEGORIES = Object.freeze({
LOADBALANCE: "loadbalance",
FIREWALL: "firewall",
AV: "av",
ACCELERATOR: "accelerator",
APIGATEWAY: "apigw",
SERVERLESS: "serverless",
WEBSITE: "website",
@@ -511,7 +528,7 @@ export const deploymentProvidersMap: Map<DeploymentProvider["type"] | string, De
[DEPLOYMENT_PROVIDERS.ALIYUN_VOD, "provider.aliyun.vod", DEPLOYMENT_CATEGORIES.AV],
[DEPLOYMENT_PROVIDERS.ALIYUN_FC, "provider.aliyun.fc", DEPLOYMENT_CATEGORIES.SERVERLESS],
[DEPLOYMENT_PROVIDERS.ALIYUN_APIGW, "provider.aliyun.apigw", DEPLOYMENT_CATEGORIES.APIGATEWAY],
[DEPLOYMENT_PROVIDERS.ALIYUN_GA, "provider.aliyun.ga", DEPLOYMENT_CATEGORIES.OTHER],
[DEPLOYMENT_PROVIDERS.ALIYUN_GA, "provider.aliyun.ga", DEPLOYMENT_CATEGORIES.ACCELERATOR],
[DEPLOYMENT_PROVIDERS.ALIYUN_CAS, "provider.aliyun.cas_upload", DEPLOYMENT_CATEGORIES.SSL],
[DEPLOYMENT_PROVIDERS.ALIYUN_CAS_DEPLOY, "provider.aliyun.cas_deploy", DEPLOYMENT_CATEGORIES.SSL],
[DEPLOYMENT_PROVIDERS.TENCENTCLOUD_COS, "provider.tencentcloud.cos", DEPLOYMENT_CATEGORIES.STORAGE],
@@ -523,6 +540,7 @@ export const deploymentProvidersMap: Map<DeploymentProvider["type"] | string, De
[DEPLOYMENT_PROVIDERS.TENCENTCLOUD_CSS, "provider.tencentcloud.css", DEPLOYMENT_CATEGORIES.AV],
[DEPLOYMENT_PROVIDERS.TENCENTCLOUD_VOD, "provider.tencentcloud.vod", DEPLOYMENT_CATEGORIES.AV],
[DEPLOYMENT_PROVIDERS.TENCENTCLOUD_SCF, "provider.tencentcloud.scf", DEPLOYMENT_CATEGORIES.SERVERLESS],
[DEPLOYMENT_PROVIDERS.TENCENTCLOUD_GAAP, "provider.tencentcloud.gaap", DEPLOYMENT_CATEGORIES.ACCELERATOR],
[DEPLOYMENT_PROVIDERS.TENCENTCLOUD_SSL, "provider.tencentcloud.ssl_upload", DEPLOYMENT_CATEGORIES.SSL],
[DEPLOYMENT_PROVIDERS.TENCENTCLOUD_SSL_DEPLOY, "provider.tencentcloud.ssl_deploy", DEPLOYMENT_CATEGORIES.SSL],
[DEPLOYMENT_PROVIDERS.BAIDUCLOUD_CDN, "provider.baiducloud.cdn", DEPLOYMENT_CATEGORIES.CDN],
@@ -558,6 +576,12 @@ export const deploymentProvidersMap: Map<DeploymentProvider["type"] | string, De
[DEPLOYMENT_PROVIDERS.BYTEPLUS_CDN, "provider.byteplus.cdn", DEPLOYMENT_CATEGORIES.CDN],
[DEPLOYMENT_PROVIDERS.UCLOUD_US3, "provider.ucloud.us3", DEPLOYMENT_CATEGORIES.STORAGE],
[DEPLOYMENT_PROVIDERS.UCLOUD_UCDN, "provider.ucloud.ucdn", DEPLOYMENT_CATEGORIES.CDN],
[DEPLOYMENT_PROVIDERS.CTCCCLOUD_CDN, "provider.ctcccloud.cdn", DEPLOYMENT_CATEGORIES.CDN],
[DEPLOYMENT_PROVIDERS.CTCCCLOUD_ICDN, "provider.ctcccloud.icdn", DEPLOYMENT_CATEGORIES.CDN],
[DEPLOYMENT_PROVIDERS.CTCCCLOUD_AO, "provider.ctcccloud.ao", DEPLOYMENT_CATEGORIES.CDN],
[DEPLOYMENT_PROVIDERS.CTCCCLOUD_ELB, "provider.ctcccloud.elb", DEPLOYMENT_CATEGORIES.LOADBALANCE],
[DEPLOYMENT_PROVIDERS.CTCCCLOUD_LVDN, "provider.ctcccloud.lvdn", DEPLOYMENT_CATEGORIES.AV],
[DEPLOYMENT_PROVIDERS.CTCCCLOUD_CMS, "provider.ctcccloud.cms_upload", DEPLOYMENT_CATEGORIES.SSL],
[DEPLOYMENT_PROVIDERS.RAINYUN_RCDN, "provider.rainyun.rcdn", DEPLOYMENT_CATEGORIES.CDN],
[DEPLOYMENT_PROVIDERS.UNICLOUD_WEBHOST, "provider.unicloud.webhost", DEPLOYMENT_CATEGORIES.WEBSITE],
[DEPLOYMENT_PROVIDERS.AWS_CLOUDFRONT, "provider.aws.cloudfront", DEPLOYMENT_CATEGORIES.CDN],
@@ -582,6 +606,7 @@ export const deploymentProvidersMap: Map<DeploymentProvider["type"] | string, De
[DEPLOYMENT_PROVIDERS.BAOTAWAF_SITE, "provider.baotawaf.site", DEPLOYMENT_CATEGORIES.FIREWALL],
[DEPLOYMENT_PROVIDERS.BAOTAWAF_CONSOLE, "provider.baotawaf.console", DEPLOYMENT_CATEGORIES.OTHER],
[DEPLOYMENT_PROVIDERS.SAFELINE, "provider.safeline", DEPLOYMENT_CATEGORIES.FIREWALL],
[DEPLOYMENT_PROVIDERS.APISIX, "provider.apisix", DEPLOYMENT_CATEGORIES.APIGATEWAY],
[DEPLOYMENT_PROVIDERS.PROXMOXVE, "provider.proxmoxve", DEPLOYMENT_CATEGORIES.NAS],
].map(([type, name, category, builtin]) => [
type,

View File

@@ -1,15 +1,15 @@
{
"access.page.title": "Authorization",
"access.nodata": "No accesses. Please create an authorization first.",
"access.nodata": "No accesses. Please create an credential first.",
"access.search.placeholder": "Search by access name ...",
"access.action.add": "Create authorization",
"access.action.edit": "Edit authorization",
"access.action.duplicate": "Duplicate authorization",
"access.action.delete": "Delete authorization",
"access.action.delete.confirm": "Are you sure to delete this authorization?",
"access.action.add": "Create credential",
"access.action.edit": "Edit credential",
"access.action.duplicate": "Duplicate credential",
"access.action.delete": "Delete credential",
"access.action.delete.confirm": "Are you sure to delete this credential?",
"access.props.name": "Name",
"access.props.provider": "Provider",
@@ -25,7 +25,7 @@
"access.props.updated_at": "Updated at",
"access.form.name.label": "Name",
"access.form.name.placeholder": "Please enter authorization name",
"access.form.name.placeholder": "Please enter credential name",
"access.form.provider.label": "Provider",
"access.form.provider.placeholder": "Please select a provider",
"access.form.provider.tooltip": "DNS provider: The provider that hosts your domain names and manages your DNS records.<br>Hosting provider: The provider that hosts your servers or cloud services for deploying certificates.<br><br><i>Cannot be edited after saving.</i>",
@@ -72,6 +72,11 @@
"access.form.aliyun_resource_group_id.label": "Aliyun resource group ID (Optional)",
"access.form.aliyun_resource_group_id.placeholder": "Please enter Aliyun resource group ID",
"access.form.aliyun_resource_group_id.tooltip": "For more information, see <a href=\"https://www.alibabacloud.com/help/en/resource-management/product-overview\" target=\"_blank\">https://www.alibabacloud.com/help/en/resource-management/product-overview</a>",
"access.form.apisix_server_url.label": "APISIX server URL",
"access.form.apisix_server_url.placeholder": "Please enter APISIX server URL",
"access.form.apisix_api_key.label": "APISIX Admin API key",
"access.form.apisix_api_key.placeholder": "Please enter APISIX Admin API key",
"access.form.apisix_api_key.tooltip": "For more information, see <a href=\"https://apisix.apache.org/docs/apisix/admin-api/\" target=\"_blank\">https://apisix.apache.org/docs/apisix/admin-api/</a>",
"access.form.aws_access_key_id.label": "AWS AccessKeyId",
"access.form.aws_access_key_id.placeholder": "Please enter AWS AccessKeyId",
"access.form.aws_access_key_id.tooltip": "For more information, see <a href=\"https://docs.aws.amazon.com/en_us/IAM/latest/UserGuide/id_credentials_access-keys.html\" target=\"_blank\">https://docs.aws.amazon.com/en_us/IAM/latest/UserGuide/id_credentials_access-keys.html</a>",
@@ -152,6 +157,12 @@
"access.form.constellix_secret_key.label": "Constellix API secret key",
"access.form.constellix_secret_key.placeholder": "Please enter Constellix API secret key",
"access.form.constellix_secret_key.tooltip": "For more information, see <a href=\"https://support.constellix.com/hc/en-us/articles/34574197390491-How-to-Generate-an-API-Key\" target=\"_blank\">https://support.constellix.com/hc/en-us/articles/34574197390491-How-to-Generate-an-API-Key</a>",
"access.form.ctcccloud_access_key_id.label": "CTCC StateCloud AccessKeyId",
"access.form.ctcccloud_access_key_id.placeholder": "Please enter CTCC StateCloud AccessKeyId",
"access.form.ctcccloud_access_key_id.tooltip": "For more information, see <a href=\"https://www.ctyun.cn/document/10015882/10015953\" target=\"_blank\">https://www.ctyun.cn/document/10015882/10015953</a>",
"access.form.ctcccloud_secret_access_key.label": "CTCC StateCloud SecretAccessKey",
"access.form.ctcccloud_secret_access_key.placeholder": "Please enter CTCC StateCloud SecretAccessKey",
"access.form.ctcccloud_secret_access_key.tooltip": "For more information, see <a href=\"https://www.ctyun.cn/document/10015882/10015953\" target=\"_blank\">https://www.ctyun.cn/document/10015882/10015953</a>",
"access.form.desec_token.label": "deSEC token",
"access.form.desec_token.placeholder": "Please enter deSEC token",
"access.form.desec_token.tooltip": "For more information, see <a href=\"https://desec.readthedocs.io/en/latest/auth/tokens.html#manage-tokens\" target=\"_blank\">https://desec.readthedocs.io/en/latest/auth/tokens.html</a>",
@@ -205,6 +216,8 @@
"access.form.email_password.placeholder": "please enter password",
"access.form.email_default_sender_address.label": "Default sender email address (Optional)",
"access.form.email_default_sender_address.placeholder": "Please enter default sender email address",
"access.form.email_default_sender_name.label": "Default sender display name (Optional)",
"access.form.email_default_sender_name.placeholder": "Please enter default sender display name",
"access.form.email_default_receiver_address.label": "Default receiver email address (Optional)",
"access.form.email_default_receiver_address.placeholder": "Please enter default receiver email address",
"access.form.flexcdn_server_url.label": "FlexCDN server URL",

View File

@@ -13,7 +13,7 @@
"provider.aliyun.clb": "Alibaba Cloud - CLB (Classic Load Balancer)",
"provider.aliyun.dcdn": "Alibaba Cloud - DCDN (Dynamic Route for Content Delivery Network)",
"provider.aliyun.ddos": "Alibaba Cloud - Anti-DDoS Proxy",
"provider.aliyun.dns": "Alibaba Cloud - DNS (Domain Name Service)",
"provider.aliyun.dns": "Alibaba Cloud - DNS",
"provider.aliyun.esa": "Alibaba Cloud - ESA (Edge Security Acceleration)",
"provider.aliyun.fc": "Alibaba Cloud - FC (Function Compute)",
"provider.aliyun.ga": "Alibaba Cloud - GA (Global Accelerator)",
@@ -24,6 +24,7 @@
"provider.aliyun.waf": "Alibaba Cloud - WAF (Web Application Firewall)",
"provider.akamai": "Akamai",
"provider.akamai.cdn": "Akamai - CDN (Content Delivery Network)",
"provider.apisix": "Apache APISIX",
"provider.aws": "AWS",
"provider.aws.acm": "AWS - ACM (Amazon Certificate Manager)",
"provider.aws.cloudfront": "AWS - CloudFront",
@@ -37,7 +38,7 @@
"provider.baiducloud.blb": "Baidu Cloud - BLB (Load Balancer)",
"provider.baiducloud.cdn": "Baidu Cloud - CDN (Content Delivery Network)",
"provider.baiducloud.cert_upload": "Baidu Cloud - Upload to SSL Certificate Service",
"provider.baiducloud.dns": "Baidu Cloud - DNS (Domain Name Service)",
"provider.baiducloud.dns": "Baidu Cloud - DNS",
"provider.baishan": "Baishan",
"provider.baishan.cdn": "Baishan - CDN (Content Delivery Network)",
"provider.baotapanel": "aaPanel (aka BaoTaPanel)",
@@ -55,9 +56,17 @@
"provider.cdnfly": "Cdnfly",
"provider.cloudflare": "Cloudflare",
"provider.cloudns": "ClouDNS",
"provider.cmcccloud": "China Mobile Cloud (ECloud)",
"provider.cmcccloud": "China Mobile ECloud",
"provider.cmcccloud.dns": "China Mobile ECloud - DNS",
"provider.constellix": "Constellix",
"provider.ctcccloud": "China Telecom Cloud (State Cloud)",
"provider.ctcccloud": "China Telecom StateCloud",
"provider.ctcccloud.ao": "China Telecom StateCloud - AccessOne",
"provider.ctcccloud.cdn": "China Telecom StateCloud - CDN (Content Delivery Network)",
"provider.ctcccloud.cms_upload": "China Telecom StateCloud - Upload to Certificate Management Service",
"provider.ctcccloud.elb": "China Telecom StateCloud - ELB (Elastic Load Balancing)",
"provider.ctcccloud.icdn": "China Telecom StateCloud - ICDN (Integrated Content Delivery Network)",
"provider.ctcccloud.lvdn": "China Telecom StateCloud - LVDN (Live Video Delivery Network)",
"provider.ctcccloud.smartdns": "China Telecom StateCloud - Smart DNS",
"provider.cucccloud": "China Unicom Cloud",
"provider.desec": "deSEC",
"provider.digitalocean": "DigitalOcean",
@@ -82,7 +91,7 @@
"provider.hetzner": "Hetzner",
"provider.huaweicloud": "Huawei Cloud",
"provider.huaweicloud.cdn": "Huawei Cloud - CDN (Content Delivery Network)",
"provider.huaweicloud.dns": "Huawei Cloud - DNS (Domain Name Service)",
"provider.huaweicloud.dns": "Huawei Cloud - DNS",
"provider.huaweicloud.elb": "Huawei Cloud - ELB (Elastic Load Balance)",
"provider.huaweicloud.scm_upload": "Huawei Cloud - Upload to SCM (SSL Certificate Manager)",
"provider.huaweicloud.waf": "Huawei Cloud - WAF (Web Application Firewall)",
@@ -129,9 +138,10 @@
"provider.tencentcloud.clb": "Tencent Cloud - CLB (Cloud Load Balancer)",
"provider.tencentcloud.cos": "Tencent Cloud - COS (Cloud Object Storage)",
"provider.tencentcloud.css": "Tencent Cloud - CSS (Cloud Streaming Service)",
"provider.tencentcloud.dns": "Tencent Cloud - DNS (Domain Name Service)",
"provider.tencentcloud.dns": "Tencent Cloud - DNS",
"provider.tencentcloud.ecdn": "Tencent Cloud - ECDN (Enterprise Content Delivery Network)",
"provider.tencentcloud.eo": "Tencent Cloud - EdgeOne",
"provider.tencentcloud.gaap": "Tencent Cloud - GAAP (Global Application Acceleration Platform)",
"provider.tencentcloud.scf": "Tencent Cloud - SCF (Serverless Cloud Function)",
"provider.tencentcloud.ssl_upload": "Tencent Cloud - Upload to SSL Certificate Service",
"provider.tencentcloud.ssl_deploy": "Tencent Cloud - Deploy via SSL Certificate Service",
@@ -153,7 +163,7 @@
"provider.volcengine.certcenter_upload": "Volcengine - Upload to Certificate Center",
"provider.volcengine.clb": "Volcengine - CLB (Cloud Load Balancer)",
"provider.volcengine.dcdn": "Volcengine - DCDN (Dynamic Content Delivery Network)",
"provider.volcengine.dns": "Volcengine - DNS (Domain Name Service)",
"provider.volcengine.dns": "Volcengine - DNS",
"provider.volcengine.imagex": "Volcengine - ImageX",
"provider.volcengine.live": "Volcengine - Live",
"provider.volcengine.tos": "Volcengine - TOS (Tinder Object Storage)",
@@ -172,6 +182,7 @@
"provider.category.loadbalance": "Loadbalance",
"provider.category.firewall": "Firewall",
"provider.category.av": "Audio/Video",
"provider.category.accelerator": "Accelerator",
"provider.category.apigw": "API Gateway",
"provider.category.serverless": "Serverless",
"provider.category.website": "Website",

View File

@@ -39,8 +39,8 @@
"workflow_node.apply.form.challenge_type.placeholder": "Please select challenge type",
"workflow_node.apply.form.provider.label": "DNS provider",
"workflow_node.apply.form.provider.placeholder": "Please select DNS provider of the domains",
"workflow_node.apply.form.provider_access.label": "DNS provider authorization",
"workflow_node.apply.form.provider_access.placeholder": "Please select an authorization of DNS provider",
"workflow_node.apply.form.provider_access.label": "DNS provider credential",
"workflow_node.apply.form.provider_access.placeholder": "Please select an credential of DNS provider",
"workflow_node.apply.form.provider_access.tooltip": "Used to manage DNS records during ACME DNS-01 challenge.",
"workflow_node.apply.form.provider_access.button": "Create",
"workflow_node.apply.form.aliyun_esa_region.label": "Alibaba Cloud ESA region",
@@ -66,8 +66,8 @@
"workflow_node.apply.form.ca_provider.placeholder": "Please select a certificate authority",
"workflow_node.apply.form.ca_provider.tooltip": "Used to issue SSL certificates.",
"workflow_node.apply.form.ca_provider.button": "Configure",
"workflow_node.apply.form.ca_provider_access.label": "Certificate authority authorization",
"workflow_node.apply.form.ca_provider_access.placeholder": "Please select an authorization of the certificate authority",
"workflow_node.apply.form.ca_provider_access.label": "Certificate authority credential",
"workflow_node.apply.form.ca_provider_access.placeholder": "Please select an credential of the certificate authority",
"workflow_node.apply.form.ca_provider_access.button": "Create",
"workflow_node.apply.form.key_algorithm.label": "Certificate key algorithm",
"workflow_node.apply.form.key_algorithm.placeholder": "Please select certificate key algorithm",
@@ -115,8 +115,8 @@
"workflow_node.deploy.form.provider.label": "Deploy target",
"workflow_node.deploy.form.provider.placeholder": "Please select deploy target",
"workflow_node.deploy.form.provider.search.placeholder": "Search deploy target ...",
"workflow_node.deploy.form.provider_access.label": "Hosting provider authorization",
"workflow_node.deploy.form.provider_access.placeholder": "Please select an authorization of Hosting provider",
"workflow_node.deploy.form.provider_access.label": "Hosting provider credential",
"workflow_node.deploy.form.provider_access.placeholder": "Please select an credential of Hosting provider",
"workflow_node.deploy.form.provider_access.tooltip": "Used to invoke API during deployment.",
"workflow_node.deploy.form.provider_access.button": "Create",
"workflow_node.deploy.form.certificate.label": "Certificate",
@@ -130,10 +130,10 @@
"workflow_node.deploy.form.1panel_site_resource_type.option.certificate.label": "Certificate",
"workflow_node.deploy.form.1panel_site_website_id.label": "1Panel website ID",
"workflow_node.deploy.form.1panel_site_website_id.placeholder": "Please enter 1Panel website ID",
"workflow_node.deploy.form.1panel_site_website_id.tooltip": "You can find it on 1Panel WebUI.",
"workflow_node.deploy.form.1panel_site_website_id.tooltip": "You can find it on 1Panel dashboard.",
"workflow_node.deploy.form.1panel_site_certificate_id.label": "1Panel certificate ID",
"workflow_node.deploy.form.1panel_site_certificate_id.placeholder": "Please enter 1Panel certificate ID",
"workflow_node.deploy.form.1panel_site_certificate_id.tooltip": "You can find it on 1Panel WebUI.",
"workflow_node.deploy.form.1panel_site_certificate_id.tooltip": "You can find it on 1Panel dashboard.",
"workflow_node.deploy.form.aliyun_alb_resource_type.label": "Resource type",
"workflow_node.deploy.form.aliyun_alb_resource_type.placeholder": "Please select resource type",
"workflow_node.deploy.form.aliyun_alb_resource_type.option.loadbalancer.label": "ALB load balancer",
@@ -285,6 +285,12 @@
"workflow_node.deploy.form.aliyun_waf_domain.label": "Alibaba Cloud WAF domain (Optional)",
"workflow_node.deploy.form.aliyun_waf_domain.placeholder": "Please enter Alibaba Cloud WAF domain name",
"workflow_node.deploy.form.aliyun_waf_domain.tooltip": "For more information, see <a href=\"https://waf.console.aliyun.com\" target=\"_blank\">https://waf.console.aliyun.com</a>",
"workflow_node.deploy.form.apisix_resource_type.label": "Resource type",
"workflow_node.deploy.form.apisix_resource_type.placeholder": "Please select resource type",
"workflow_node.deploy.form.apisix_resource_type.option.certificate.label": "SSL certificate",
"workflow_node.deploy.form.apisix_certificate_id.label": "APISIX certificate ID",
"workflow_node.deploy.form.apisix_certificate_id.placeholder": "Please enter APISIX certificate ID",
"workflow_node.deploy.form.apisix_certificate_id.tooltip": "You can find it on APISIX dashboard.",
"workflow_node.deploy.form.aws_acm_region.label": "AWS ACM Region",
"workflow_node.deploy.form.aws_acm_region.placeholder": "Please enter AWS ACM region (e.g. us-east-1)",
"workflow_node.deploy.form.aws_acm_region.tooltip": "For more information, see <a href=\"https://docs.aws.amazon.com/en_us/general/latest/gr/rande.html#regional-endpoints\" target=\"_blank\">https://docs.aws.amazon.com/en_us/general/latest/gr/rande.html#regional-endpoints</a>",
@@ -361,16 +367,16 @@
"workflow_node.deploy.form.baotapanel_site_type.option.other.label": "Other sites",
"workflow_node.deploy.form.baotapanel_site_name.label": "aaPanel site name",
"workflow_node.deploy.form.baotapanel_site_name.placeholder": "Please enter aaPanel site name",
"workflow_node.deploy.form.baotapanel_site_name.tooltip": "You can find it on aaPanel WebUI.",
"workflow_node.deploy.form.baotapanel_site_name.tooltip": "You can find it on aaPanel dashboard.",
"workflow_node.deploy.form.baotapanel_site_names.label": "aaPanel site names",
"workflow_node.deploy.form.baotapanel_site_names.placeholder": "Please enter aaPanel site names (separated by semicolons)",
"workflow_node.deploy.form.baotapanel_site_names.errmsg.invalid": "Please enter a valid aaPanel site name",
"workflow_node.deploy.form.baotapanel_site_names.tooltip": "You can find it on aaPanel WebUI.",
"workflow_node.deploy.form.baotapanel_site_names.tooltip": "You can find it on aaPanel dashboard.",
"workflow_node.deploy.form.baotapanel_site_names.multiple_input_modal.title": "Change aaPanel site names",
"workflow_node.deploy.form.baotapanel_site_names.multiple_input_modal.placeholder": "Please enter aaPanel site name",
"workflow_node.deploy.form.baotawaf_site_name.label": "aaWAF site name",
"workflow_node.deploy.form.baotawaf_site_name.placeholder": "Please enter aaWAF site name",
"workflow_node.deploy.form.baotawaf_site_name.tooltip": "You can find it on aaWAF WebUI.",
"workflow_node.deploy.form.baotawaf_site_name.tooltip": "You can find it on aaWAF dashboard.",
"workflow_node.deploy.form.baotawaf_site_port.label": "aaWAF site SSL port",
"workflow_node.deploy.form.baotawaf_site_port.placeholder": "Please enter aaWAF SSL port",
"workflow_node.deploy.form.bunny_cdn_pull_zone_id.label": "Bunny CDN pull zone ID",
@@ -388,13 +394,39 @@
"workflow_node.deploy.form.cdnfly_resource_type.option.certificate.label": "Certificate",
"workflow_node.deploy.form.cdnfly_site_id.label": "Cdnfly site ID",
"workflow_node.deploy.form.cdnfly_site_id.placeholder": "Please enter Cdnfly site ID",
"workflow_node.deploy.form.cdnfly_site_id.tooltip": "You can find it on Cdnfly WebUI.",
"workflow_node.deploy.form.cdnfly_site_id.tooltip": "You can find it on Cdnfly dashboard.",
"workflow_node.deploy.form.cdnfly_certificate_id.label": "Cdnfly certificate ID",
"workflow_node.deploy.form.cdnfly_certificate_id.placeholder": "Please enter Cdnfly certificate ID",
"workflow_node.deploy.form.cdnfly_certificate_id.tooltip": "You can find it on Cdnfly WebUI.",
"workflow_node.deploy.form.cdnfly_certificate_id.tooltip": "You can find it on Cdnfly dashboard.",
"workflow_node.deploy.form.ctcccloud_ao_domain.label": "CTCC StateCloud AccessOne domain",
"workflow_node.deploy.form.ctcccloud_ao_domain.placeholder": "Please enter CTCC StateCloud AccessOne domain name",
"workflow_node.deploy.form.ctcccloud_ao_domain.tooltip": "For more information, see <a href=\"https://cdn.ctyun.cn/h5/ctaccessone/\" target=\"_blank\">https://cdn.ctyun.cn/h5/ctaccessone/</a>",
"workflow_node.deploy.form.ctcccloud_cdn_domain.label": "CTCC StateCloud CDN domain",
"workflow_node.deploy.form.ctcccloud_cdn_domain.placeholder": "Please enter CTCC StateCloud CDN domain name",
"workflow_node.deploy.form.ctcccloud_cdn_domain.tooltip": "For more information, see <a href=\"https://cdn-console.ctyun.cn\" target=\"_blank\">https://cdn-console.ctyun.cn</a>",
"workflow_node.deploy.form.ctcccloud_elb_resource_type.label": "Resource type",
"workflow_node.deploy.form.ctcccloud_elb_resource_type.placeholder": "Please select resource type",
"workflow_node.deploy.form.ctcccloud_elb_resource_type.option.certificate.label": "ELB certificate",
"workflow_node.deploy.form.ctcccloud_elb_resource_type.option.loadbalancer.label": "ELB load balancer",
"workflow_node.deploy.form.ctcccloud_elb_resource_type.option.listener.label": "ELB listener",
"workflow_node.deploy.form.ctcccloud_elb_region_id.label": "CTCC StateCloud ELB region ID",
"workflow_node.deploy.form.ctcccloud_elb_region_id.placeholder": "Please enter CTCC StateCloud ELB region ID",
"workflow_node.deploy.form.ctcccloud_elb_region_id.tooltip": "For more information, see <a href=\"https://www.ctyun.cn/document/10026755/10196575\" target=\"_blank\">https://www.ctyun.cn/document/10026755/10196575</a>",
"workflow_node.deploy.form.ctcccloud_elb_loadbalancer_id.label": "CTCC StateCloud ELB load balancer ID",
"workflow_node.deploy.form.ctcccloud_elb_loadbalancer_id.placeholder": "Please enter CTCC StateCloud ELB load balancer ID",
"workflow_node.deploy.form.ctcccloud_elb_loadbalancer_id.tooltip": "For more information, see <a href=\"https://console.ctyun.cn/network/index/#/elb/elbList\" target=\"_blank\">https://console.ctyun.cn/network/index/#/elb/elbList</a>",
"workflow_node.deploy.form.ctcccloud_elb_listener_id.label": "CTCC StateCloud ELB listener ID",
"workflow_node.deploy.form.ctcccloud_elb_listener_id.placeholder": "Please enter CTCC StateCloud ELB listener ID",
"workflow_node.deploy.form.ctcccloud_elb_listener_id.tooltip": "For more information, see <a href=\"https://console.ctyun.cn/network/index/#/elb/elbList\" target=\"_blank\">https://console.ctyun.cn/network/index/#/elb/elbList</a>",
"workflow_node.deploy.form.ctcccloud_icdn_domain.label": "CTCC StateCloud ICDN domain",
"workflow_node.deploy.form.ctcccloud_icdn_domain.placeholder": "Please enter CTCC StateCloud ICDN domain name",
"workflow_node.deploy.form.ctcccloud_icdn_domain.tooltip": "For more information, see <a href=\"https://cdn-console.ctyun.cn\" target=\"_blank\">https://cdn-console.ctyun.cn</a>",
"workflow_node.deploy.form.ctcccloud_lvdn_domain.label": "CTCC StateCloud LVDN domain",
"workflow_node.deploy.form.ctcccloud_lvdn_domain.placeholder": "Please enter CTCC StateCloud LVDN domain name",
"workflow_node.deploy.form.ctcccloud_lvdn_domain.tooltip": "For more information, see <a href=\"https://cdn.ctyun.cn/h5/live/index\" target=\"_blank\">https://cdn.ctyun.cn/h5/live/index</a>",
"workflow_node.deploy.form.dogecloud_cdn_domain.label": "Doge Cloud CDN domain",
"workflow_node.deploy.form.dogecloud_cdn_domain.placeholder": "Please enter Doge Cloud CDN domain name",
"workflow_node.deploy.form.dogecloud_cdn_domain.tooltip": "For more information, see <a href=\"https://console.dogecloud.com/\" target=\"_blank\">https://console.dogecloud.com/</a>",
"workflow_node.deploy.form.dogecloud_cdn_domain.tooltip": "For more information, see <a href=\"https://console.dogecloud.com\" target=\"_blank\">https://console.dogecloud.com</a>",
"workflow_node.deploy.form.edgio_applications_environment_id.label": "Edgio Applications environment ID",
"workflow_node.deploy.form.edgio_applications_environment_id.placeholder": "Please enter Edgio Applications environment ID",
"workflow_node.deploy.form.edgio_applications_environment_id.tooltip": "For more information, see <a href=\"https://edgio.app/\" target=\"_blank\">https://edgio.app/</a>",
@@ -403,7 +435,7 @@
"workflow_node.deploy.form.flexcdn_resource_type.option.certificate.label": "Certificate",
"workflow_node.deploy.form.flexcdn_certificate_id.label": "FlexCDN certificate ID",
"workflow_node.deploy.form.flexcdn_certificate_id.placeholder": "Please enter FlexCDN certificate ID",
"workflow_node.deploy.form.flexcdn_certificate_id.tooltip": "You can find it on FlexCDN WebUI.",
"workflow_node.deploy.form.flexcdn_certificate_id.tooltip": "You can find it on FlexCDN dashboard.",
"workflow_node.deploy.form.gcore_cdn_resource_id.label": "Gcore CDN resource ID",
"workflow_node.deploy.form.gcore_cdn_resource_id.placeholder": "Please enter Gcore CDN resource ID",
"workflow_node.deploy.form.gcore_cdn_resource_id.tooltip": "For more information, see <a href=\"https://cdn.gcore.com/resources/list\" target=\"_blank\">https://cdn.gcore.com/resources/list</a>",
@@ -415,7 +447,7 @@
"workflow_node.deploy.form.goedge_resource_type.option.certificate.label": "Certificate",
"workflow_node.deploy.form.goedge_certificate_id.label": "GoEdge certificate ID",
"workflow_node.deploy.form.goedge_certificate_id.placeholder": "Please enter GoEdge certificate ID",
"workflow_node.deploy.form.goedge_certificate_id.tooltip": "You can find it on GoEdge WebUI.",
"workflow_node.deploy.form.goedge_certificate_id.tooltip": "You can find it on GoEdge dashboard.",
"workflow_node.deploy.form.huaweicloud_cdn_region.label": "Huawei Cloud CDN region",
"workflow_node.deploy.form.huaweicloud_cdn_region.placeholder": "Please enter Huawei Cloud CDN region (e.g. cn-north-1)",
"workflow_node.deploy.form.huaweicloud_cdn_region.tooltip": "For more information, see <a href=\"https://console-intl.huaweicloud.com/apiexplorer/#/endpoint?locale=en-us\" target=\"_blank\">https://console-intl.huaweicloud.com/apiexplorer/#/endpoint</a>",
@@ -471,13 +503,13 @@
"workflow_node.deploy.form.jdcloud_alb_snidomain.tooltip": "For more information, see <a href=\"https://cns-console.jdcloud.com/host/loadBalance/list\" target=\"_blank\">https://cns-console.jdcloud.com/host/loadBalance/list</a>",
"workflow_node.deploy.form.jdcloud_cdn_domain.label": "JD Cloud CDN domain",
"workflow_node.deploy.form.jdcloud_cdn_domain.placeholder": "Please enter JD Cloud CDN domain name",
"workflow_node.deploy.form.jdcloud_cdn_domain.tooltip": "For more information, see <a href=\"https://cdn-console.jdcloud.com/\" target=\"_blank\">https://cdn-console.jdcloud.com/</a>",
"workflow_node.deploy.form.jdcloud_cdn_domain.tooltip": "For more information, see <a href=\"https://cdn-console.jdcloud.com\" target=\"_blank\">https://cdn-console.jdcloud.com</a>",
"workflow_node.deploy.form.jdcloud_live_domain.label": "JD Cloud Live Video play domain",
"workflow_node.deploy.form.jdcloud_live_domain.placeholder": "Please enter JD Cloud Live Video play domain name",
"workflow_node.deploy.form.jdcloud_live_domain.tooltip": "For more information, see <a href=\"https://live-console.jdcloud.com/\" target=\"_blank\">https://live-console.jdcloud.com/</a>",
"workflow_node.deploy.form.jdcloud_live_domain.tooltip": "For more information, see <a href=\"https://live-console.jdcloud.com\" target=\"_blank\">https://live-console.jdcloud.com</a>",
"workflow_node.deploy.form.jdcloud_vod_domain.label": "JD Cloud VOD domain",
"workflow_node.deploy.form.jdcloud_vod_domain.placeholder": "Please enter JD Cloud VOD domain name",
"workflow_node.deploy.form.jdcloud_vod_domain.tooltip": "For more information, see <a href=\"https://vod-console.jdcloud.com/\" target=\"_blank\">https://vod-console.jdcloud.com/</a>",
"workflow_node.deploy.form.jdcloud_vod_domain.tooltip": "For more information, see <a href=\"https://vod-console.jdcloud.com\" target=\"_blank\">https://vod-console.jdcloud.com</a>",
"workflow_node.deploy.form.k8s_namespace.label": "Kubernetes Namespace",
"workflow_node.deploy.form.k8s_namespace.placeholder": "Please enter Kubernetes Namespace",
"workflow_node.deploy.form.k8s_namespace.tooltip": "For more information, see <a href=\"https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/\" target=\"_blank\">https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/</a>",
@@ -498,10 +530,10 @@
"workflow_node.deploy.form.lecdn_resource_type.option.certificate.label": "Certificate",
"workflow_node.deploy.form.lecdn_certificate_id.label": "LeCDN certificate ID",
"workflow_node.deploy.form.lecdn_certificate_id.placeholder": "Please enter LeCDN certificate ID",
"workflow_node.deploy.form.lecdn_certificate_id.tooltip": "You can find it on LeCDN WebUI.",
"workflow_node.deploy.form.lecdn_certificate_id.tooltip": "You can find it on LeCDN dashboard.",
"workflow_node.deploy.form.lecdn_client_id.label": "LeCDN user ID (Optional)",
"workflow_node.deploy.form.lecdn_client_id.placeholder": "Please enter LeCDN user ID",
"workflow_node.deploy.form.lecdn_client_id.tooltip": "You can find it on LeCDN WebUI. <br><br>Required when using administrator's authorization. It Must be the same as the user to which the certificate belongs.",
"workflow_node.deploy.form.lecdn_client_id.tooltip": "You can find it on LeCDN dashboard. <br><br>Required when using administrator's authorization. It Must be the same as the user to which the certificate belongs.",
"workflow_node.deploy.form.local.guide": "Tips: If you are running Certimate in Docker, the \"Local\" refers to the container rather than the host.",
"workflow_node.deploy.form.local_format.label": "File format",
"workflow_node.deploy.form.local_format.placeholder": "Please select file format",
@@ -574,13 +606,13 @@
"workflow_node.deploy.form.rainyun_rcdn_domain.tooltip": "For more information, see <a href=\"https://app.rainyun.com/apps/rcdn/list\" target=\"_blank\">https://app.rainyun.com/apps/rcdn/list</a>",
"workflow_node.deploy.form.ratpanel_site_name.label": "RatPanel site name",
"workflow_node.deploy.form.ratpanel_site_name.placeholder": "Please enter RatPanel site name",
"workflow_node.deploy.form.ratpanel_site_name.tooltip": "You can find it on RatPanel WebUI.",
"workflow_node.deploy.form.ratpanel_site_name.tooltip": "You can find it on RatPanel dashboard.",
"workflow_node.deploy.form.safeline_resource_type.label": "Resource type",
"workflow_node.deploy.form.safeline_resource_type.placeholder": "Please select resource type",
"workflow_node.deploy.form.safeline_resource_type.option.certificate.label": "Certificate",
"workflow_node.deploy.form.safeline_certificate_id.label": "SafeLine certificate ID",
"workflow_node.deploy.form.safeline_certificate_id.placeholder": "Please enter SafeLine certificate ID",
"workflow_node.deploy.form.safeline_certificate_id.tooltip": "You can find it on SafeLine WebUI.",
"workflow_node.deploy.form.safeline_certificate_id.tooltip": "You can find it on SafeLine dashboard.",
"workflow_node.deploy.form.ssh_format.label": "File format",
"workflow_node.deploy.form.ssh_format.placeholder": "Please select file format",
"workflow_node.deploy.form.ssh_format.option.pem.label": "PEM (*.pem, *.crt, *.key)",
@@ -620,6 +652,7 @@
"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",
@@ -670,6 +703,15 @@
"workflow_node.deploy.form.tencentcloud_eo_domain.label": "Tencent Cloud EdgeOne domain",
"workflow_node.deploy.form.tencentcloud_eo_domain.placeholder": "Please enter Tencent Cloud EdgeOne domain name",
"workflow_node.deploy.form.tencentcloud_eo_domain.tooltip": "For more information, see <a href=\"https://console.tencentcloud.com/edgeone\" target=\"_blank\">https://console.tencentcloud.com/edgeone</a>",
"workflow_node.deploy.form.tencentcloud_gaap_resource_type.label": "Resource type",
"workflow_node.deploy.form.tencentcloud_gaap_resource_type.placeholder": "Please select resource type",
"workflow_node.deploy.form.tencentcloud_gaap_resource_type.option.listener.label": "GAAP listener",
"workflow_node.deploy.form.tencentcloud_gaap_proxy_id.label": "Tencent Cloud GAAP proxy ID (Optional)",
"workflow_node.deploy.form.tencentcloud_gaap_proxy_id.placeholder": "Please enter Tencent Cloud GAAP proxy ID",
"workflow_node.deploy.form.tencentcloud_gaap_proxy_id.tooltip": "For more information, see <a href=\"https://console.cloud.tencent.com/gaap\" target=\"_blank\">https://console.cloud.tencent.com/gaap</a>",
"workflow_node.deploy.form.tencentcloud_gaap_listener_id.label": "Tencent Cloud GAAP listener ID",
"workflow_node.deploy.form.tencentcloud_gaap_listener_id.placeholder": "Please enter Tencent Cloud GAAP listener ID",
"workflow_node.deploy.form.tencentcloud_gaap_listener_id.tooltip": "For more information, see <a href=\"https://console.cloud.tencent.com/gaap\" target=\"_blank\">https://console.cloud.tencent.com/gaap</a>",
"workflow_node.deploy.form.tencentcloud_scf_region.label": "Tencent Cloud SCF region",
"workflow_node.deploy.form.tencentcloud_scf_region.placeholder": "Please enter Tencent Cloud SCF region (e.g. ap-guangzhou)",
"workflow_node.deploy.form.tencentcloud_scf_region.tooltip": "For more information, see <a href=\"https://www.tencentcloud.com/document/product/583/17299\" target=\"_blank\">https://www.tencentcloud.com/document/product/583/17299</a>",
@@ -818,7 +860,7 @@
"workflow_node.deploy.form.wangsu_certificate_id.tooltip": "For more information, see <a href=\"https://cdn.console.wangsu.com/v2/index#/certificate/list?code=cert_mylist&parentCode=cert_ssl&productCode=certificatemanagement\" target=\"_blank\">https://cdn.console.wangsu.com/v2/index#/certificate/list</a>",
"workflow_node.deploy.form.webhook_data.label": "Webhook data (Optional)",
"workflow_node.deploy.form.webhook_data.placeholder": "Please enter Webhook data to override the default value",
"workflow_node.deploy.form.webhook_data.tooltip": "Leave it blank to use the default Webhook data provided by the authorization.",
"workflow_node.deploy.form.webhook_data.tooltip": "Leave it blank to use the default Webhook data provided by the credential.",
"workflow_node.deploy.form.webhook_data.guide": "<details><summary>Supported variables: </summary><ol style=\"margin-left: 1.25em; list-style: disc;\"><li><strong>${DOMAIN}</strong>: The primary domain of the certificate (<i>CommonName</i>).</li><li><strong>${DOMAINS}</strong>: The domain list of the certificate (<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></details><br>Please visit the authorization management page for addtional notes.",
"workflow_node.deploy.form.webhook_data.errmsg.json_invalid": "Please enter a valiod JSON string",
"workflow_node.deploy.form.strategy_config.label": "Strategy settings",
@@ -851,31 +893,34 @@
"workflow_node.notify.form.channel.button": "Configure",
"workflow_node.notify.form.provider.label": "Notification channel",
"workflow_node.notify.form.provider.placeholder": "Please select notification channel",
"workflow_node.notify.form.provider_access.label": "Notification provider authorization",
"workflow_node.notify.form.provider_access.placeholder": "Please select an authorization of notification provider",
"workflow_node.notify.form.provider_access.label": "Notification provider credential",
"workflow_node.notify.form.provider_access.placeholder": "Please select an credential of notification provider",
"workflow_node.notify.form.provider_access.button": "Create",
"workflow_node.notify.form.params_config.label": "Parameter settings",
"workflow_node.notify.form.discordbot_channel_id.label": "Discord channel ID (Optional)",
"workflow_node.notify.form.discordbot_channel_id.placeholder": "Please enter Discord channel ID to override the default value",
"workflow_node.notify.form.discordbot_channel_id.tooltip": "Leave it blank to use the default channel ID provided by the authorization.",
"workflow_node.notify.form.discordbot_channel_id.tooltip": "Leave it blank to use the default channel ID provided by the credential.",
"workflow_node.notify.form.email_sender_address.label": "Sender email address (Optional)",
"workflow_node.notify.form.email_sender_address.placeholder": "Please enter sender email address to override the default value",
"workflow_node.notify.form.email_sender_address.tooltip": "Leave it blank to use the default sender email address provided by the authorization.",
"workflow_node.notify.form.email_sender_address.tooltip": "Leave it blank to use the default sender email address provided by the credential.",
"workflow_node.notify.form.email_sender_name.label": "Sender display name (Optional)",
"workflow_node.notify.form.email_sender_name.placeholder": "Please enter sender display name to override the default value",
"workflow_node.notify.form.email_sender_name.tooltip": "Leave it blank to use the default sender display name provided by the credential.",
"workflow_node.notify.form.email_receiver_address.label": "Receiver email address (Optional)",
"workflow_node.notify.form.email_receiver_address.placeholder": "Please enter receiver email address to override the default value",
"workflow_node.notify.form.email_receiver_address.tooltip": "Leave it blank to use the default receiver email address provided by the selected authorization.",
"workflow_node.notify.form.email_receiver_address.tooltip": "Leave it blank to use the default receiver email address provided by the selected credential.",
"workflow_node.notify.form.mattermost_channel_id.label": "Mattermost channel ID (Optional)",
"workflow_node.notify.form.mattermost_channel_id.placeholder": "Please enter Mattermost channel ID to override the default value",
"workflow_node.notify.form.mattermost_channel_id.tooltip": "Leave it blank to use the default channel ID provided by the authorization.",
"workflow_node.notify.form.mattermost_channel_id.tooltip": "Leave it blank to use the default channel ID provided by the credential.",
"workflow_node.notify.form.slackbot_channel_id.label": "Slack channel ID (Optional)",
"workflow_node.notify.form.slackbot_channel_id.placeholder": "Please enter Slack channel ID to override the default value",
"workflow_node.notify.form.slackbot_channel_id.tooltip": "Leave it blank to use the default channel ID provided by the authorization.",
"workflow_node.notify.form.slackbot_channel_id.tooltip": "Leave it blank to use the default channel ID provided by the credential.",
"workflow_node.notify.form.telegrambot_chat_id.label": "Telegram chat ID (Optional)",
"workflow_node.notify.form.telegrambot_chat_id.placeholder": "Please enter Telegram chat ID to override the default value",
"workflow_node.notify.form.telegrambot_chat_id.tooltip": "Leave it blank to use the default chat ID provided by the selected authorization.",
"workflow_node.notify.form.telegrambot_chat_id.tooltip": "Leave it blank to use the default chat ID provided by the selected credential.",
"workflow_node.notify.form.webhook_data.label": "Webhook data (Optional)",
"workflow_node.notify.form.webhook_data.placeholder": "Please enter Webhook data to override the default value",
"workflow_node.notify.form.webhook_data.tooltip": "Leave it blank to use the default Webhook data provided by the authorization.",
"workflow_node.notify.form.webhook_data.tooltip": "Leave it blank to use the default Webhook data provided by the credential.",
"workflow_node.notify.form.webhook_data.guide": "<details><summary>Supported variables: </summary><ol style=\"margin-left: 1.25em; list-style: disc;\"><li><strong>${SUBJECT}</strong>: The subject of notification.</li><li><strong>${MESSAGE}</strong>: The message of notification.</li></ol></details><br>Please visit the authorization management page for addtional notes.",
"workflow_node.notify.form.webhook_data.errmsg.json_invalid": "Please enter a valiod JSON string",
"workflow_node.notify.form.strategy_config.label": "Strategy settings",

View File

@@ -72,6 +72,11 @@
"access.form.aliyun_resource_group_id.label": "阿里云资源组 ID可选",
"access.form.aliyun_resource_group_id.placeholder": "请输入阿里云资源组 ID",
"access.form.aliyun_resource_group_id.tooltip": "这是什么?请参阅 <a href=\"https://help.aliyun.com/zh/resource-management/resource-group/product-overview\" target=\"_blank\">https://help.aliyun.com/zh/resource-management/resource-group/product-overview</a>",
"access.form.apisix_server_url.label": "APISIX 服务地址",
"access.form.apisix_server_url.placeholder": "请输入 APISIX 服务地址",
"access.form.apisix_api_key.label": "APISIX Admin API Key",
"access.form.apisix_api_key.placeholder": "请输入 APISIX Admin API Key",
"access.form.apisix_api_key.tooltip": "这是什么?请参阅 <a href=\"https://apisix.apache.org/zh/docs/apisix/admin-api/\" target=\"_blank\">https://apisix.apache.org/zh/docs/apisix/admin-api/</a>",
"access.form.aws_access_key_id.label": "AWS AccessKeyId",
"access.form.aws_access_key_id.placeholder": "请输入 AWS AccessKeyId",
"access.form.aws_access_key_id.tooltip": "这是什么?请参阅 <a href=\"https://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/id_credentials_access-keys.html\" target=\"_blank\">https://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/id_credentials_access-keys.html</a>",
@@ -152,6 +157,12 @@
"access.form.constellix_secret_key.label": "Constellix Secret Key",
"access.form.constellix_secret_key.placeholder": "请输入 Constellix Secret Key",
"access.form.constellix_secret_key.tooltip": "这是什么?请参阅 <a href=\"https://support.constellix.com/hc/en-us/articles/34574197390491-How-to-Generate-an-API-Key\" target=\"_blank\">https://support.constellix.com/hc/en-us/articles/34574197390491-How-to-Generate-an-API-Key</a>",
"access.form.ctcccloud_access_key_id.label": "天翼云 AccessKeyId",
"access.form.ctcccloud_access_key_id.placeholder": "请输入天翼云 AccessKeyId",
"access.form.ctcccloud_access_key_id.tooltip": "这是什么?请参阅 <a href=\"https://www.ctyun.cn/document/10015882/10015953\" target=\"_blank\">https://www.ctyun.cn/document/10015882/10015953</a>",
"access.form.ctcccloud_secret_access_key.label": "天翼云 SecretAccessKey",
"access.form.ctcccloud_secret_access_key.placeholder": "请输入天翼云 SecretAccessKey",
"access.form.ctcccloud_secret_access_key.tooltip": "这是什么?请参阅 <a href=\"https://www.ctyun.cn/document/10015882/10015953\" target=\"_blank\">https://www.ctyun.cn/document/10015882/10015953</a>",
"access.form.desec_token.label": "deSEC Token",
"access.form.desec_token.placeholder": "请输入 deSEC Token",
"access.form.desec_token.tooltip": "这是什么?请参阅 <a href=\"https://desec.readthedocs.io/en/latest/auth/tokens.html#manage-tokens\" target=\"_blank\">https://desec.readthedocs.io/en/latest/auth/tokens.html</a>",
@@ -203,10 +214,12 @@
"access.form.email_username.placeholder": "请输入用户名",
"access.form.email_password.label": "密码",
"access.form.email_password.placeholder": "请输入密码",
"access.form.email_default_sender_address.label": "默认的发送邮箱地址(可选)",
"access.form.email_default_sender_address.placeholder": "请输入默认的发送邮箱地址",
"access.form.email_default_receiver_address.label": "默认的接收邮箱地址(可选)",
"access.form.email_default_receiver_address.placeholder": "请输入默认的接收邮箱地址",
"access.form.email_default_sender_address.label": "默认的发件人邮箱(可选)",
"access.form.email_default_sender_address.placeholder": "请输入默认的发件人邮箱",
"access.form.email_default_sender_name.label": "默认的发件人名称(可选)",
"access.form.email_default_sender_name.placeholder": "请输入默认的发件人名称",
"access.form.email_default_receiver_address.label": "默认的收件人邮箱(可选)",
"access.form.email_default_receiver_address.placeholder": "请输入默认的收件人邮箱",
"access.form.flexcdn_server_url.label": "FlexCDN 服务地址",
"access.form.flexcdn_server_url.placeholder": "请输入 FlexCDN 服务地址",
"access.form.flexcdn_api_role.label": "FlexCDN 用户角色",
@@ -398,8 +411,8 @@
"access.form.sslcom_eab_kid.label": "ACME EAB KID",
"access.form.sslcom_eab_kid.placeholder": "请输入 ACME EAB KID",
"access.form.sslcom_eab_kid.tooltip": "这是什么?请参阅 <a href=\"https://www.ssl.com/how-to/generate-acme-credentials-for-reseller-customers/#ftoc-heading-6\" target=\"_blank\">https://www.ssl.com/how-to/generate-acme-credentials-for-reseller-customers/</a>",
"access.form.sslcom_eab_hmac_key.label": "ACME EAB HMAC key",
"access.form.sslcom_eab_hmac_key.placeholder": "请输入 ACME EAB HMAC key",
"access.form.sslcom_eab_hmac_key.label": "ACME EAB HMAC Key",
"access.form.sslcom_eab_hmac_key.placeholder": "请输入 ACME EAB HMAC Key",
"access.form.sslcom_eab_hmac_key.tooltip": "这是什么?请参阅 <a href=\"https://www.ssl.com/how-to/generate-acme-credentials-for-reseller-customers/#ftoc-heading-6\" target=\"_blank\">https://www.ssl.com/how-to/generate-acme-credentials-for-reseller-customers/</a>",
"access.form.telegrambot_token.label": "Telegram 机器人 API Token",
"access.form.telegrambot_token.placeholder": "请输入 Telegram 机器人 API Token",

View File

@@ -24,6 +24,7 @@
"provider.aliyun.waf": "阿里云 - Web 应用防火墙 WAF",
"provider.akamai": "Akamai",
"provider.akamai.cdn": "Akamai - 内容分发网络 CDN",
"provider.apisix": "Apache APISIX",
"provider.aws": "AWS",
"provider.aws.acm": "AWS - ACM (Amazon Certificate Manager)",
"provider.aws.cloudfront": "AWS - CloudFront",
@@ -56,9 +57,17 @@
"provider.cloudflare": "Cloudflare",
"provider.cloudns": "ClouDNS",
"provider.cmcccloud": "移动云",
"provider.cmcccloud.dns": "移动云 - 云解析 DNS",
"provider.constellix": "Constellix",
"provider.ctcccloud": "联通云",
"provider.cucccloud": "天翼云",
"provider.ctcccloud": "天翼云",
"provider.ctcccloud.ao": "天翼云 - 边缘安全加速平台 AccessOne",
"provider.ctcccloud.cdn": "天翼云 - 内容分发网络 CDN",
"provider.ctcccloud.cms_upload": "天翼云 - 上传到证书管理服务 CMS",
"provider.ctcccloud.elb": "天翼云 - 弹性负载均衡 ELB",
"provider.ctcccloud.icdn": "天翼云 - 全站加速 ICDN",
"provider.ctcccloud.lvdn": "天翼云 - 视频直播 LVDN",
"provider.ctcccloud.smartdns": "天翼云 - 智能 DNS",
"provider.cucccloud": "联通云",
"provider.desec": "deSEC",
"provider.digitalocean": "DigitalOcean",
"provider.dingtalkbot": "钉钉群机器人",
@@ -132,6 +141,7 @@
"provider.tencentcloud.dns": "腾讯云 - 云解析 DNS",
"provider.tencentcloud.ecdn": "腾讯云 - 全站加速网络 ECDN",
"provider.tencentcloud.eo": "腾讯云 - 边缘安全加速平台 EdgeOne",
"provider.tencentcloud.gaap": "腾讯云 - 全球应用加速 GAAP",
"provider.tencentcloud.scf": "腾讯云 - 云函数 SCF",
"provider.tencentcloud.ssl_upload": "腾讯云 - 上传到 SSL 证书服务",
"provider.tencentcloud.ssl_deploy": "腾讯云 - 通过 SSL 证书服务创建部署任务",
@@ -172,6 +182,7 @@
"provider.category.loadbalance": "负载均衡",
"provider.category.firewall": "防火墙",
"provider.category.av": "音视频",
"provider.category.accelerator": "加速器",
"provider.category.apigw": "API 网关",
"provider.category.serverless": "Serverless",
"provider.category.website": "网站托管",

View File

@@ -225,7 +225,7 @@
"workflow_node.deploy.form.aliyun_fc_service_version.placeholder": "请选择阿里云 FC 服务版本",
"workflow_node.deploy.form.aliyun_fc_domain.label": "阿里云 FC 自定义域名",
"workflow_node.deploy.form.aliyun_fc_domain.placeholder": "请输入阿里云 FC 自定义域名(支持泛域名)",
"workflow_node.deploy.form.aliyun_fc_domain.tooltip": "这是什么?请参阅 see <a href=\"https://fcnext.console.aliyun.com/\" target=\"_blank\">https://fcnext.console.aliyun.com/</a>",
"workflow_node.deploy.form.aliyun_fc_domain.tooltip": "这是什么?请参阅 see <a href=\"https://fcnext.console.aliyun.com\" target=\"_blank\">https://fcnext.console.aliyun.com</a>",
"workflow_node.deploy.form.aliyun_ga_resource_type.label": "证书部署方式",
"workflow_node.deploy.form.aliyun_ga_resource_type.placeholder": "请选择证书部署方式",
"workflow_node.deploy.form.aliyun_ga_resource_type.option.accelerator.label": "替换指定全球加速器下的全部 HTTPS 监听的证书",
@@ -284,6 +284,12 @@
"workflow_node.deploy.form.aliyun_waf_domain.label": "阿里云 WAF 接入域名(可选)",
"workflow_node.deploy.form.aliyun_waf_domain.placeholder": "请输入阿里云 WAF 接入域名(支持泛域名)",
"workflow_node.deploy.form.aliyun_waf_domain.tooltip": "这是什么?请参阅 <a href=\"https://waf.console.aliyun.com\" target=\"_blank\">waf.console.aliyun.com</a><br><br>不填写时,将替换实例的默认证书;否则,将替换扩展域名证书。",
"workflow_node.deploy.form.apisix_resource_type.label": "证书部署方式",
"workflow_node.deploy.form.apisix_resource_type.placeholder": "请选择证书部署方式",
"workflow_node.deploy.form.apisix_resource_type.option.certificate.label": "替换指定证书",
"workflow_node.deploy.form.apisix_certificate_id.label": "APISIX 证书 ID",
"workflow_node.deploy.form.apisix_certificate_id.placeholder": "请输入 APISIX 证书 ID",
"workflow_node.deploy.form.apisix_certificate_id.tooltip": "请登录 APISIX 控制台查看。",
"workflow_node.deploy.form.aws_acm_region.label": "AWS ACM 服务区域",
"workflow_node.deploy.form.aws_acm_region.placeholder": "请输入 AWS ACM 服务区域例如us-east-1",
"workflow_node.deploy.form.aws_acm_region.tooltip": "这是什么?请参阅 <a href=\"https://docs.aws.amazon.com/zh_cn/general/latest/gr/rande.html#regional-endpoints\" target=\"_blank\">https://docs.aws.amazon.com/zh_cn/general/latest/gr/rande.html#regional-endpoints</a>",
@@ -391,6 +397,31 @@
"workflow_node.deploy.form.cdnfly_certificate_id.label": "Cdnfly 证书 ID",
"workflow_node.deploy.form.cdnfly_certificate_id.placeholder": "请输入 Cdnfly 证书 ID",
"workflow_node.deploy.form.cdnfly_certificate_id.tooltip": "请登录 Cdnfly 控制台查看。",
"workflow_node.deploy.form.ctcccloud_ao_domain.label": "天翼云 AccessOne 加速域名",
"workflow_node.deploy.form.ctcccloud_ao_domain.placeholder": "请输入天翼云 AccessOne 加速域名(支持泛域名)",
"workflow_node.deploy.form.ctcccloud_ao_domain.tooltip": "这是什么?请参阅 <a href=\"https://cdn.ctyun.cn/h5/ctaccessone/\" target=\"_blank\">https://cdn.ctyun.cn/h5/ctaccessone/</a>",
"workflow_node.deploy.form.ctcccloud_cdn_domain.label": "天翼云 CDN 加速域名",
"workflow_node.deploy.form.ctcccloud_cdn_domain.placeholder": "请输入天翼云 CDN 加速域名(支持泛域名)",
"workflow_node.deploy.form.ctcccloud_cdn_domain.tooltip": "这是什么?请参阅 <a href=\"https://cdn-console.ctyun.cn\" target=\"_blank\">https://cdn-console.ctyun.cn</a>",
"workflow_node.deploy.form.ctcccloud_elb_resource_type.label": "证书部署方式",
"workflow_node.deploy.form.ctcccloud_elb_resource_type.placeholder": "请选择证书部署方式",
"workflow_node.deploy.form.ctcccloud_elb_resource_type.option.loadbalancer.label": "替换指定负载均衡器下的全部 HTTPS 监听器的证书",
"workflow_node.deploy.form.ctcccloud_elb_resource_type.option.listener.label": "替换指定监听器的证书",
"workflow_node.deploy.form.ctcccloud_elb_region_id.label": "天翼云 ELB 资源池 ID",
"workflow_node.deploy.form.ctcccloud_elb_region_id.placeholder": "请输入天翼云 ELB 资源池 ID",
"workflow_node.deploy.form.ctcccloud_elb_region_id.tooltip": "这是什么?请参阅 <a href=\"https://www.ctyun.cn/document/10026755/10196575\" target=\"_blank\">https://www.ctyun.cn/document/10026755/10196575</a>",
"workflow_node.deploy.form.ctcccloud_elb_loadbalancer_id.label": "天翼云 ELB 负载均衡器 ID",
"workflow_node.deploy.form.ctcccloud_elb_loadbalancer_id.placeholder": "请输入天翼云 ELB 负载均衡器 ID",
"workflow_node.deploy.form.ctcccloud_elb_loadbalancer_id.tooltip": "这是什么?请参阅 <a href=\"https://console.ctyun.cn/network/index/#/elb/elbList\" target=\"_blank\">https://console.ctyun.cn/network/index/#/elb/elbList</a>",
"workflow_node.deploy.form.ctcccloud_elb_listener_id.label": "天翼云 ELB 监听器 ID",
"workflow_node.deploy.form.ctcccloud_elb_listener_id.placeholder": "请输入天翼云 ELB 监听器 ID",
"workflow_node.deploy.form.ctcccloud_elb_listener_id.tooltip": "这是什么?请参阅 <a href=\"https://console.ctyun.cn/network/index/#/elb/elbList\" target=\"_blank\">https://console.ctyun.cn/network/index/#/elb/elbList</a>",
"workflow_node.deploy.form.ctcccloud_icdn_domain.label": "天翼云 ICDN 加速域名",
"workflow_node.deploy.form.ctcccloud_icdn_domain.placeholder": "请输入天翼云 ICDN 加速域名(支持泛域名)",
"workflow_node.deploy.form.ctcccloud_icdn_domain.tooltip": "这是什么?请参阅 <a href=\"https://cdn-console.ctyun.cn\" target=\"_blank\">https://cdn-console.ctyun.cn</a>",
"workflow_node.deploy.form.ctcccloud_lvdn_domain.label": "天翼云 LVDN 加速域名",
"workflow_node.deploy.form.ctcccloud_lvdn_domain.placeholder": "请输入天翼云 LVDN 加速域名",
"workflow_node.deploy.form.ctcccloud_lvdn_domain.tooltip": "这是什么?请参阅 <a href=\"https://cdn.ctyun.cn/h5/live/index\" target=\"_blank\">https://cdn.ctyun.cn/h5/live/index</a>",
"workflow_node.deploy.form.dogecloud_cdn_domain.label": "多吉云 CDN 加速域名",
"workflow_node.deploy.form.dogecloud_cdn_domain.placeholder": "请输入多吉云 CDN 加速域名",
"workflow_node.deploy.form.dogecloud_cdn_domain.tooltip": "这是什么?请参阅 <a href=\"https://console.dogecloud.com\" target=\"_blank\">https://console.dogecloud.com</a>",
@@ -470,13 +501,13 @@
"workflow_node.deploy.form.jdcloud_alb_snidomain.tooltip": "这是什么?请参阅 <a href=\"https://cns-console.jdcloud.com/host/loadBalance/list\" target=\"_blank\">https://cns-console.jdcloud.com/host/loadBalance/list</a><br><br>不填写时,将替换监听器的默认证书;否则,将替换扩展域名证书。",
"workflow_node.deploy.form.jdcloud_cdn_domain.label": "京东云 CDN 加速域名",
"workflow_node.deploy.form.jdcloud_cdn_domain.placeholder": "请输入京东云 CDN 加速域名(支持泛域名)",
"workflow_node.deploy.form.jdcloud_cdn_domain.tooltip": "这是什么?请参阅 <a href=\"https://cdn-console.jdcloud.com/\" target=\"_blank\">https://cdn-console.jdcloud.com/</a>",
"workflow_node.deploy.form.jdcloud_cdn_domain.tooltip": "这是什么?请参阅 <a href=\"https://cdn-console.jdcloud.com\" target=\"_blank\">https://cdn-console.jdcloud.com</a>",
"workflow_node.deploy.form.jdcloud_live_domain.label": "京东云视频直播播放域名",
"workflow_node.deploy.form.jdcloud_live_domain.placeholder": "请输入京东云视频直播播放域名",
"workflow_node.deploy.form.jdcloud_live_domain.tooltip": "这是什么?请参阅 <a href=\"https://live-console.jdcloud.com\" target=\"_blank\">https://live-console.jdcloud.com</a>",
"workflow_node.deploy.form.jdcloud_vod_domain.label": "京东云视频点播加速域名",
"workflow_node.deploy.form.jdcloud_vod_domain.placeholder": "请输入京东云视频点播加速域名",
"workflow_node.deploy.form.jdcloud_vod_domain.tooltip": "这是什么?请参阅 <a href=\"https://vod-console.jdcloud.com/\" target=\"_blank\">https://vod-console.jdcloud.com/</a>",
"workflow_node.deploy.form.jdcloud_vod_domain.tooltip": "这是什么?请参阅 <a href=\"https://vod-console.jdcloud.com\" target=\"_blank\">https://vod-console.jdcloud.com</a>",
"workflow_node.deploy.form.k8s_namespace.label": "Kubernetes 命名空间",
"workflow_node.deploy.form.k8s_namespace.placeholder": "请输入 Kubernetes 命名空间",
"workflow_node.deploy.form.k8s_namespace.tooltip": "这是什么?请参阅 <a href=\"https://kubernetes.io/zh-cn/docs/concepts/overview/working-with-objects/namespaces/\" target=\"_blank\">https://kubernetes.io/zh-cn/docs/concepts/overview/working-with-objects/namespaces/</a>",
@@ -619,6 +650,7 @@
"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",
@@ -669,6 +701,15 @@
"workflow_node.deploy.form.tencentcloud_eo_domain.label": "腾讯云 EdgeOne 加速域名",
"workflow_node.deploy.form.tencentcloud_eo_domain.placeholder": "请输入腾讯云 EdgeOne 加速域名(支持泛域名)",
"workflow_node.deploy.form.tencentcloud_eo_domain.tooltip": "这是什么?请参阅 <a href=\"https://console.cloud.tencent.com/edgeone\" target=\"_blank\">https://console.cloud.tencent.com/edgeone</a>",
"workflow_node.deploy.form.tencentcloud_gaap_resource_type.label": "证书部署方式",
"workflow_node.deploy.form.tencentcloud_gaap_resource_type.placeholder": "请选择证书部署方式",
"workflow_node.deploy.form.tencentcloud_gaap_resource_type.option.listener.label": "替换指定监听器的证书",
"workflow_node.deploy.form.tencentcloud_gaap_proxy_id.label": "腾讯云 GAAP 通道 ID可选",
"workflow_node.deploy.form.tencentcloud_gaap_proxy_id.placeholder": "请输入腾讯云 GAAP 通道 ID",
"workflow_node.deploy.form.tencentcloud_gaap_proxy_id.tooltip": "这是什么?请参阅 <a href=\"https://console.cloud.tencent.com/gaap\" target=\"_blank\">https://console.cloud.tencent.com/gaap</a>",
"workflow_node.deploy.form.tencentcloud_gaap_listener_id.label": "腾讯云 GAAP 监听器 ID",
"workflow_node.deploy.form.tencentcloud_gaap_listener_id.placeholder": "请输入腾讯云 GAAP 监听器 ID",
"workflow_node.deploy.form.tencentcloud_gaap_listener_id.tooltip": "这是什么?请参阅 <a href=\"https://console.cloud.tencent.com/gaap\" target=\"_blank\">https://console.cloud.tencent.com/gaap</a>",
"workflow_node.deploy.form.tencentcloud_scf_region.label": "腾讯云 SCF 产品地域",
"workflow_node.deploy.form.tencentcloud_scf_region.placeholder": "输入腾讯云 SCF 产品地域例如ap-guangzhou",
"workflow_node.deploy.form.tencentcloud_scf_region.tooltip": "这是什么?请参阅 <a href=\"https://cloud.tencent.com/document/product/583/17299\" target=\"_blank\">https://cloud.tencent.com/document/product/583/17299</a>",
@@ -857,12 +898,15 @@
"workflow_node.notify.form.discordbot_channel_id.label": "Discord 频道 ID可选",
"workflow_node.notify.form.discordbot_channel_id.placeholder": "请输入 Discord 频道 ID 以覆盖默认值",
"workflow_node.notify.form.discordbot_channel_id.tooltip": "不填写时,将使用所选通知渠道授权的默认频道 ID。",
"workflow_node.notify.form.email_sender_address.label": "发送邮箱地址(可选)",
"workflow_node.notify.form.email_sender_address.placeholder": "请输入发送邮箱地址以覆盖默认值",
"workflow_node.notify.form.email_sender_address.tooltip": "不填写时,将使用所选通知渠道授权的默认发送邮箱地址。",
"workflow_node.notify.form.email_receiver_address.label": "接收邮箱地址(可选)",
"workflow_node.notify.form.email_receiver_address.placeholder": "请输入接收邮箱地址以覆盖默认值",
"workflow_node.notify.form.email_receiver_address.tooltip": "不填写时,将使用所选通知渠道授权的默认接收邮箱地址。",
"workflow_node.notify.form.email_sender_address.label": "发件人邮箱(可选)",
"workflow_node.notify.form.email_sender_address.placeholder": "请输入发件人邮箱以覆盖默认值",
"workflow_node.notify.form.email_sender_address.tooltip": "不填写时,将使用所选通知渠道授权的默认发件人邮箱。",
"workflow_node.notify.form.email_sender_name.label": "发件人名称(可选)",
"workflow_node.notify.form.email_sender_name.placeholder": "请输入发件人名称以覆盖默认值",
"workflow_node.notify.form.email_sender_name.tooltip": "不填写时,将使用所选通知渠道授权的默认发件人名称。",
"workflow_node.notify.form.email_receiver_address.label": "收件人邮箱(可选)",
"workflow_node.notify.form.email_receiver_address.placeholder": "请输入收件人邮箱以覆盖默认值",
"workflow_node.notify.form.email_receiver_address.tooltip": "不填写时,将使用所选通知渠道授权的默认收件人邮箱。",
"workflow_node.notify.form.mattermost_channel_id.label": "Mattermost 频道 ID可选",
"workflow_node.notify.form.mattermost_channel_id.placeholder": "请输入 Mattermost 频道 ID 以覆盖默认值",
"workflow_node.notify.form.mattermost_channel_id.tooltip": "不填写时,将使用所选通知渠道授权的默认频道 ID。",