mirror of
https://github.com/usual2970/certimate.git
synced 2025-06-08 13:39:53 +00:00
feat: add westcn applicant
This commit is contained in:
parent
adb43dfee1
commit
6c3c29dd11
@ -99,6 +99,7 @@ make local.run
|
|||||||
| [Name.com](https://www.name.com/) | |
|
| [Name.com](https://www.name.com/) | |
|
||||||
| [NameSilo](https://www.namesilo.com/) | |
|
| [NameSilo](https://www.namesilo.com/) | |
|
||||||
| [IBM NS1 Connect](https://www.ibm.com/cn-zh/products/ns1-connect/) | |
|
| [IBM NS1 Connect](https://www.ibm.com/cn-zh/products/ns1-connect/) | |
|
||||||
|
| [西部数码](https://www.west.cn/) | |
|
||||||
| [PowerDNS](https://www.powerdns.com/) | |
|
| [PowerDNS](https://www.powerdns.com/) | |
|
||||||
| ACME 代理 HTTP 请求 | 可申请允许通过 HTTP 请求修改 DNS 的域名 |
|
| ACME 代理 HTTP 请求 | 可申请允许通过 HTTP 请求修改 DNS 的域名 |
|
||||||
|
|
||||||
|
@ -98,6 +98,7 @@ The following DNS providers are supported:
|
|||||||
| [Name.com](https://www.name.com/) | |
|
| [Name.com](https://www.name.com/) | |
|
||||||
| [NameSilo](https://www.namesilo.com/) | |
|
| [NameSilo](https://www.namesilo.com/) | |
|
||||||
| [IBM NS1 Connect](https://www.ibm.com/products/ns1-connect/) | |
|
| [IBM NS1 Connect](https://www.ibm.com/products/ns1-connect/) | |
|
||||||
|
| [West.cn](https://www.west.cn/) | |
|
||||||
| [PowerDNS](https://www.powerdns.com/) | |
|
| [PowerDNS](https://www.powerdns.com/) | |
|
||||||
| ACME Proxy HTTP Request | Supports managing DNS by HTTP request |
|
| ACME Proxy HTTP Request | Supports managing DNS by HTTP request |
|
||||||
|
|
||||||
|
1
go.mod
1
go.mod
@ -82,6 +82,7 @@ require (
|
|||||||
github.com/mailru/easyjson v0.9.0 // indirect
|
github.com/mailru/easyjson v0.9.0 // indirect
|
||||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
|
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
|
||||||
github.com/namedotcom/go v0.0.0-20180403034216-08470befbe04 // indirect
|
github.com/namedotcom/go v0.0.0-20180403034216-08470befbe04 // indirect
|
||||||
|
github.com/nrdcg/mailinabox v0.2.0 // indirect
|
||||||
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
|
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
|
||||||
github.com/qiniu/dyn v1.3.0 // indirect
|
github.com/qiniu/dyn v1.3.0 // indirect
|
||||||
github.com/qiniu/x v1.10.5 // indirect
|
github.com/qiniu/x v1.10.5 // indirect
|
||||||
|
2
go.sum
2
go.sum
@ -683,6 +683,8 @@ github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJm
|
|||||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
|
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
|
||||||
github.com/nikoksr/notify v1.3.0 h1:UxzfxzAYGQD9a5JYLBTVx0lFMxeHCke3rPCkfWdPgLs=
|
github.com/nikoksr/notify v1.3.0 h1:UxzfxzAYGQD9a5JYLBTVx0lFMxeHCke3rPCkfWdPgLs=
|
||||||
github.com/nikoksr/notify v1.3.0/go.mod h1:Xor2hMmkvrCfkCKvXGbcrESez4brac2zQjhd6U2BbeM=
|
github.com/nikoksr/notify v1.3.0/go.mod h1:Xor2hMmkvrCfkCKvXGbcrESez4brac2zQjhd6U2BbeM=
|
||||||
|
github.com/nrdcg/mailinabox v0.2.0 h1:IKq8mfKiVwNW2hQii/ng1dJ4yYMMv3HAP3fMFIq2CFk=
|
||||||
|
github.com/nrdcg/mailinabox v0.2.0/go.mod h1:0yxqeYOiGyxAu7Sb94eMxHPIOsPYXAjTeA9ZhePhGnc=
|
||||||
github.com/nrdcg/namesilo v0.2.1 h1:kLjCjsufdW/IlC+iSfAqj0iQGgKjlbUUeDJio5Y6eMg=
|
github.com/nrdcg/namesilo v0.2.1 h1:kLjCjsufdW/IlC+iSfAqj0iQGgKjlbUUeDJio5Y6eMg=
|
||||||
github.com/nrdcg/namesilo v0.2.1/go.mod h1:lwMvfQTyYq+BbjJd30ylEG4GPSS6PII0Tia4rRpRiyw=
|
github.com/nrdcg/namesilo v0.2.1/go.mod h1:lwMvfQTyYq+BbjJd30ylEG4GPSS6PII0Tia4rRpRiyw=
|
||||||
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
|
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
|
||||||
|
@ -19,6 +19,7 @@ import (
|
|||||||
providerPowerDNS "github.com/usual2970/certimate/internal/pkg/core/applicant/acme-dns-01/lego-providers/powerdns"
|
providerPowerDNS "github.com/usual2970/certimate/internal/pkg/core/applicant/acme-dns-01/lego-providers/powerdns"
|
||||||
providerTencentCloud "github.com/usual2970/certimate/internal/pkg/core/applicant/acme-dns-01/lego-providers/tencentcloud"
|
providerTencentCloud "github.com/usual2970/certimate/internal/pkg/core/applicant/acme-dns-01/lego-providers/tencentcloud"
|
||||||
providerVolcEngine "github.com/usual2970/certimate/internal/pkg/core/applicant/acme-dns-01/lego-providers/volcengine"
|
providerVolcEngine "github.com/usual2970/certimate/internal/pkg/core/applicant/acme-dns-01/lego-providers/volcengine"
|
||||||
|
providerWestcn "github.com/usual2970/certimate/internal/pkg/core/applicant/acme-dns-01/lego-providers/westcn"
|
||||||
"github.com/usual2970/certimate/internal/pkg/utils/maps"
|
"github.com/usual2970/certimate/internal/pkg/utils/maps"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -238,6 +239,22 @@ func createApplicant(options *applicantOptions) (challenge.Provider, error) {
|
|||||||
})
|
})
|
||||||
return applicant, err
|
return applicant, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case domain.ApplyDNSProviderTypeWestcn:
|
||||||
|
{
|
||||||
|
access := domain.AccessConfigForWestcn{}
|
||||||
|
if err := maps.Decode(options.ProviderAccessConfig, &access); err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to decode provider access config: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
applicant, err := providerWestcn.NewChallengeProvider(&providerWestcn.WestcnApplicantConfig{
|
||||||
|
Username: access.Username,
|
||||||
|
ApiPassword: access.ApiPassword,
|
||||||
|
DnsPropagationTimeout: options.DnsPropagationTimeout,
|
||||||
|
DnsTTL: options.DnsTTL,
|
||||||
|
})
|
||||||
|
return applicant, err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, fmt.Errorf("unsupported applicant provider: %s", string(options.Provider))
|
return nil, fmt.Errorf("unsupported applicant provider: %s", string(options.Provider))
|
||||||
|
@ -140,3 +140,8 @@ type AccessConfigForVolcEngine struct {
|
|||||||
type AccessConfigForWebhook struct {
|
type AccessConfigForWebhook struct {
|
||||||
Url string `json:"url"`
|
Url string `json:"url"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type AccessConfigForWestcn struct {
|
||||||
|
Username string `json:"username"`
|
||||||
|
ApiPassword string `json:"password"`
|
||||||
|
}
|
||||||
|
@ -32,6 +32,7 @@ const (
|
|||||||
AccessProviderTypeUCloud = AccessProviderType("ucloud")
|
AccessProviderTypeUCloud = AccessProviderType("ucloud")
|
||||||
AccessProviderTypeVolcEngine = AccessProviderType("volcengine")
|
AccessProviderTypeVolcEngine = AccessProviderType("volcengine")
|
||||||
AccessProviderTypeWebhook = AccessProviderType("webhook")
|
AccessProviderTypeWebhook = AccessProviderType("webhook")
|
||||||
|
AccessProviderTypeWestcn = AccessProviderType("westcn")
|
||||||
)
|
)
|
||||||
|
|
||||||
type ApplyDNSProviderType string
|
type ApplyDNSProviderType string
|
||||||
@ -62,6 +63,7 @@ const (
|
|||||||
ApplyDNSProviderTypeTencentCloudDNS = ApplyDNSProviderType("tencentcloud-dns")
|
ApplyDNSProviderTypeTencentCloudDNS = ApplyDNSProviderType("tencentcloud-dns")
|
||||||
ApplyDNSProviderTypeVolcEngine = ApplyDNSProviderType("volcengine") // 兼容旧值,等同于 [ApplyDNSProviderTypeVolcEngineDNS]
|
ApplyDNSProviderTypeVolcEngine = ApplyDNSProviderType("volcengine") // 兼容旧值,等同于 [ApplyDNSProviderTypeVolcEngineDNS]
|
||||||
ApplyDNSProviderTypeVolcEngineDNS = ApplyDNSProviderType("volcengine-dns")
|
ApplyDNSProviderTypeVolcEngineDNS = ApplyDNSProviderType("volcengine-dns")
|
||||||
|
ApplyDNSProviderTypeWestcn = ApplyDNSProviderType("westcn")
|
||||||
)
|
)
|
||||||
|
|
||||||
type DeployProviderType string
|
type DeployProviderType string
|
||||||
|
@ -0,0 +1,39 @@
|
|||||||
|
package westcn
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/go-acme/lego/v4/challenge"
|
||||||
|
"github.com/go-acme/lego/v4/providers/dns/westcn"
|
||||||
|
)
|
||||||
|
|
||||||
|
type WestcnApplicantConfig struct {
|
||||||
|
Username string `json:"username"`
|
||||||
|
ApiPassword string `json:"apiPassword"`
|
||||||
|
DnsPropagationTimeout int32 `json:"dnsPropagationTimeout,omitempty"`
|
||||||
|
DnsTTL int32 `json:"dnsTTL,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewChallengeProvider(config *WestcnApplicantConfig) (challenge.Provider, error) {
|
||||||
|
if config == nil {
|
||||||
|
return nil, errors.New("config is nil")
|
||||||
|
}
|
||||||
|
|
||||||
|
providerConfig := westcn.NewDefaultConfig()
|
||||||
|
providerConfig.Username = config.Username
|
||||||
|
providerConfig.Password = config.ApiPassword
|
||||||
|
if config.DnsPropagationTimeout != 0 {
|
||||||
|
providerConfig.PropagationTimeout = time.Duration(config.DnsPropagationTimeout) * time.Second
|
||||||
|
}
|
||||||
|
if config.DnsTTL != 0 {
|
||||||
|
providerConfig.TTL = int(config.DnsTTL)
|
||||||
|
}
|
||||||
|
|
||||||
|
provider, err := westcn.NewDNSProviderConfig(providerConfig)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return provider, nil
|
||||||
|
}
|
1
ui/public/imgs/providers/westcn.svg
Normal file
1
ui/public/imgs/providers/westcn.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="200" height="200"><path d="M735.899826 924.582957a467.656348 467.656348 0 0 1-223.944348 56.765217c-81.029565 0-157.295304-20.569043-223.855304-56.765217H735.944348z m111.081739-83.878957c-15.582609 15.894261-32.322783 30.675478-49.997913 44.210087H227.06087a467.166609 467.166609 0 0 1-49.997913-44.210087h669.96313zM912.517565 756.869565c-9.349565 15.36-19.589565 30.052174-30.675478 44.165565H142.157913a475.225043 475.225043 0 0 1-30.675478-44.165565h801.03513z m66.159305-294.956522a467.033043 467.033043 0 0 1-44.432696 255.198609H89.755826a467.033043 467.033043 0 0 1-44.477217-254.664348l138.106434 2.715826 180.313044 201.19374 147.945739-173.100522 183.563131 179.734261 156.850086-211.033044h126.619827zM512 42.651826c204.176696 0 377.856 130.359652 442.412522 312.409044H824.987826l-131.650783 157.161739-177.730782-164.062609-156.493913 165.888L235.52 356.173913H69.186783C133.431652 173.545739 307.46713 42.651826 512 42.651826z" fill="#0070B6"></path></svg>
|
@ -32,6 +32,7 @@ import AccessFormTencentCloudConfig from "./AccessFormTencentCloudConfig";
|
|||||||
import AccessFormUCloudConfig from "./AccessFormUCloudConfig";
|
import AccessFormUCloudConfig from "./AccessFormUCloudConfig";
|
||||||
import AccessFormVolcEngineConfig from "./AccessFormVolcEngineConfig";
|
import AccessFormVolcEngineConfig from "./AccessFormVolcEngineConfig";
|
||||||
import AccessFormWebhookConfig from "./AccessFormWebhookConfig";
|
import AccessFormWebhookConfig from "./AccessFormWebhookConfig";
|
||||||
|
import AccessFormWestcnConfig from "./AccessFormWestcnConfig";
|
||||||
|
|
||||||
type AccessFormFieldValues = Partial<MaybeModelRecord<AccessModel>>;
|
type AccessFormFieldValues = Partial<MaybeModelRecord<AccessModel>>;
|
||||||
type AccessFormPresets = "add" | "edit";
|
type AccessFormPresets = "add" | "edit";
|
||||||
@ -131,6 +132,8 @@ const AccessForm = forwardRef<AccessFormInstance, AccessFormProps>(({ className,
|
|||||||
return <AccessFormVolcEngineConfig {...nestedFormProps} />;
|
return <AccessFormVolcEngineConfig {...nestedFormProps} />;
|
||||||
case ACCESS_PROVIDERS.WEBHOOK:
|
case ACCESS_PROVIDERS.WEBHOOK:
|
||||||
return <AccessFormWebhookConfig {...nestedFormProps} />;
|
return <AccessFormWebhookConfig {...nestedFormProps} />;
|
||||||
|
case ACCESS_PROVIDERS.WESTCN:
|
||||||
|
return <AccessFormWestcnConfig {...nestedFormProps} />;
|
||||||
}
|
}
|
||||||
}, [disabled, initialValues?.config, fieldProvider, nestedFormInst, nestedFormName]);
|
}, [disabled, initialValues?.config, fieldProvider, nestedFormInst, nestedFormName]);
|
||||||
|
|
||||||
|
76
ui/src/components/access/AccessFormWestcnConfig.tsx
Normal file
76
ui/src/components/access/AccessFormWestcnConfig.tsx
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
import { Form, type FormInstance, Input } from "antd";
|
||||||
|
import { createSchemaFieldRule } from "antd-zod";
|
||||||
|
import { z } from "zod";
|
||||||
|
|
||||||
|
import { type AccessConfigForWestcn } from "@/domain/access";
|
||||||
|
|
||||||
|
type AccessFormWestcnConfigFieldValues = Nullish<AccessConfigForWestcn>;
|
||||||
|
|
||||||
|
export type AccessFormWestcnConfigProps = {
|
||||||
|
form: FormInstance;
|
||||||
|
formName: string;
|
||||||
|
disabled?: boolean;
|
||||||
|
initialValues?: AccessFormWestcnConfigFieldValues;
|
||||||
|
onValuesChange?: (values: AccessFormWestcnConfigFieldValues) => void;
|
||||||
|
};
|
||||||
|
|
||||||
|
const initFormModel = (): AccessFormWestcnConfigFieldValues => {
|
||||||
|
return {
|
||||||
|
username: "",
|
||||||
|
apiPassword: "",
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
const AccessFormWestcnConfig = ({ form: formInst, formName, disabled, initialValues, onValuesChange }: AccessFormWestcnConfigProps) => {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
|
||||||
|
const formSchema = z.object({
|
||||||
|
username: z
|
||||||
|
.string()
|
||||||
|
.trim()
|
||||||
|
.min(1, t("access.form.westcn_username.placeholder"))
|
||||||
|
.max(64, t("common.errmsg.string_max", { max: 64 })),
|
||||||
|
apiPassword: z
|
||||||
|
.string()
|
||||||
|
.min(1, t("access.form.westcn_api_password.placeholder"))
|
||||||
|
.max(64, t("common.errmsg.string_max", { max: 64 }))
|
||||||
|
.trim(),
|
||||||
|
});
|
||||||
|
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="username"
|
||||||
|
label={t("access.form.westcn_username.label")}
|
||||||
|
rules={[formRule]}
|
||||||
|
tooltip={<span dangerouslySetInnerHTML={{ __html: t("access.form.westcn_username.tooltip") }}></span>}
|
||||||
|
>
|
||||||
|
<Input autoComplete="new-password" placeholder={t("access.form.westcn_username.placeholder")} />
|
||||||
|
</Form.Item>
|
||||||
|
|
||||||
|
<Form.Item
|
||||||
|
name="apiPassword"
|
||||||
|
label={t("access.form.westcn_api_password.label")}
|
||||||
|
rules={[formRule]}
|
||||||
|
tooltip={<span dangerouslySetInnerHTML={{ __html: t("access.form.westcn_api_password.tooltip") }}></span>}
|
||||||
|
>
|
||||||
|
<Input.Password autoComplete="new-password" placeholder={t("access.form.westcn_api_password.placeholder")} />
|
||||||
|
</Form.Item>
|
||||||
|
</Form>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default AccessFormWestcnConfig;
|
@ -30,6 +30,7 @@ export interface AccessModel extends BaseModel {
|
|||||||
| AccessConfigForUCloud
|
| AccessConfigForUCloud
|
||||||
| AccessConfigForVolcEngine
|
| AccessConfigForVolcEngine
|
||||||
| AccessConfigForWebhook
|
| AccessConfigForWebhook
|
||||||
|
| AccessConfigForWestcn
|
||||||
);
|
);
|
||||||
usage: AccessUsageType;
|
usage: AccessUsageType;
|
||||||
}
|
}
|
||||||
@ -150,4 +151,9 @@ export type AccessConfigForVolcEngine = {
|
|||||||
export type AccessConfigForWebhook = {
|
export type AccessConfigForWebhook = {
|
||||||
url: string;
|
url: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type AccessConfigForWestcn = {
|
||||||
|
username: string;
|
||||||
|
apiPassword: string;
|
||||||
|
};
|
||||||
// #endregion
|
// #endregion
|
||||||
|
@ -27,6 +27,7 @@ export const ACCESS_PROVIDERS = Object.freeze({
|
|||||||
UCLOUD: "ucloud",
|
UCLOUD: "ucloud",
|
||||||
VOLCENGINE: "volcengine",
|
VOLCENGINE: "volcengine",
|
||||||
WEBHOOK: "webhook",
|
WEBHOOK: "webhook",
|
||||||
|
WESTCN: "westcn",
|
||||||
} as const);
|
} as const);
|
||||||
|
|
||||||
export type AccessProviderType = (typeof ACCESS_PROVIDERS)[keyof typeof ACCESS_PROVIDERS];
|
export type AccessProviderType = (typeof ACCESS_PROVIDERS)[keyof typeof ACCESS_PROVIDERS];
|
||||||
@ -69,10 +70,11 @@ export const accessProvidersMap: Map<AccessProvider["type"] | string, AccessProv
|
|||||||
[ACCESS_PROVIDERS.AWS, "common.provider.aws", "/imgs/providers/aws.svg", ACCESS_USAGES.APPLY],
|
[ACCESS_PROVIDERS.AWS, "common.provider.aws", "/imgs/providers/aws.svg", ACCESS_USAGES.APPLY],
|
||||||
[ACCESS_PROVIDERS.AZURE, "common.provider.azure", "/imgs/providers/azure.svg", ACCESS_USAGES.APPLY],
|
[ACCESS_PROVIDERS.AZURE, "common.provider.azure", "/imgs/providers/azure.svg", ACCESS_USAGES.APPLY],
|
||||||
[ACCESS_PROVIDERS.CLOUDFLARE, "common.provider.cloudflare", "/imgs/providers/cloudflare.svg", ACCESS_USAGES.APPLY],
|
[ACCESS_PROVIDERS.CLOUDFLARE, "common.provider.cloudflare", "/imgs/providers/cloudflare.svg", ACCESS_USAGES.APPLY],
|
||||||
|
[ACCESS_PROVIDERS.GODADDY, "common.provider.godaddy", "/imgs/providers/godaddy.svg", ACCESS_USAGES.APPLY],
|
||||||
[ACCESS_PROVIDERS.NAMEDOTCOM, "common.provider.namedotcom", "/imgs/providers/namedotcom.svg", ACCESS_USAGES.APPLY],
|
[ACCESS_PROVIDERS.NAMEDOTCOM, "common.provider.namedotcom", "/imgs/providers/namedotcom.svg", ACCESS_USAGES.APPLY],
|
||||||
[ACCESS_PROVIDERS.NAMESILO, "common.provider.namesilo", "/imgs/providers/namesilo.svg", ACCESS_USAGES.APPLY],
|
[ACCESS_PROVIDERS.NAMESILO, "common.provider.namesilo", "/imgs/providers/namesilo.svg", ACCESS_USAGES.APPLY],
|
||||||
[ACCESS_PROVIDERS.NS1, "common.provider.ns1", "/imgs/providers/ns1.svg", ACCESS_USAGES.APPLY],
|
[ACCESS_PROVIDERS.NS1, "common.provider.ns1", "/imgs/providers/ns1.svg", ACCESS_USAGES.APPLY],
|
||||||
[ACCESS_PROVIDERS.GODADDY, "common.provider.godaddy", "/imgs/providers/godaddy.svg", ACCESS_USAGES.APPLY],
|
[ACCESS_PROVIDERS.WESTCN, "common.provider.westcn", "/imgs/providers/westcn.svg", ACCESS_USAGES.APPLY],
|
||||||
[ACCESS_PROVIDERS.POWERDNS, "common.provider.powerdns", "/imgs/providers/powerdns.svg", ACCESS_USAGES.APPLY],
|
[ACCESS_PROVIDERS.POWERDNS, "common.provider.powerdns", "/imgs/providers/powerdns.svg", ACCESS_USAGES.APPLY],
|
||||||
[ACCESS_PROVIDERS.ACMEHTTPREQ, "common.provider.acmehttpreq", "/imgs/providers/acmehttpreq.svg", ACCESS_USAGES.APPLY],
|
[ACCESS_PROVIDERS.ACMEHTTPREQ, "common.provider.acmehttpreq", "/imgs/providers/acmehttpreq.svg", ACCESS_USAGES.APPLY],
|
||||||
].map(([type, name, icon, usage]) => [
|
].map(([type, name, icon, usage]) => [
|
||||||
@ -111,6 +113,7 @@ export const APPLY_DNS_PROVIDERS = Object.freeze({
|
|||||||
TENCENTCLOUD_DNS: `${ACCESS_PROVIDERS.TENCENTCLOUD}-dns`,
|
TENCENTCLOUD_DNS: `${ACCESS_PROVIDERS.TENCENTCLOUD}-dns`,
|
||||||
VOLCENGINE: `${ACCESS_PROVIDERS.VOLCENGINE}`, // 兼容旧值,等同于 `VOLCENGINE_DNS`
|
VOLCENGINE: `${ACCESS_PROVIDERS.VOLCENGINE}`, // 兼容旧值,等同于 `VOLCENGINE_DNS`
|
||||||
VOLCENGINE_DNS: `${ACCESS_PROVIDERS.VOLCENGINE}-dns`,
|
VOLCENGINE_DNS: `${ACCESS_PROVIDERS.VOLCENGINE}-dns`,
|
||||||
|
WESTCN: `${ACCESS_PROVIDERS.WESTCN}`,
|
||||||
} as const);
|
} as const);
|
||||||
|
|
||||||
export type ApplyDNSProviderType = (typeof APPLY_DNS_PROVIDERS)[keyof typeof APPLY_DNS_PROVIDERS];
|
export type ApplyDNSProviderType = (typeof APPLY_DNS_PROVIDERS)[keyof typeof APPLY_DNS_PROVIDERS];
|
||||||
@ -139,6 +142,7 @@ export const applyDNSProvidersMap: Map<ApplyDNSProvider["type"] | string, ApplyD
|
|||||||
[APPLY_DNS_PROVIDERS.NAMEDOTCOM, "common.provider.namedotcom"],
|
[APPLY_DNS_PROVIDERS.NAMEDOTCOM, "common.provider.namedotcom"],
|
||||||
[APPLY_DNS_PROVIDERS.NAMESILO, "common.provider.namesilo"],
|
[APPLY_DNS_PROVIDERS.NAMESILO, "common.provider.namesilo"],
|
||||||
[APPLY_DNS_PROVIDERS.NS1, "common.provider.ns1"],
|
[APPLY_DNS_PROVIDERS.NS1, "common.provider.ns1"],
|
||||||
|
[APPLY_DNS_PROVIDERS.WESTCN, "common.provider.westcn"],
|
||||||
[APPLY_DNS_PROVIDERS.POWERDNS, "common.provider.powerdns"],
|
[APPLY_DNS_PROVIDERS.POWERDNS, "common.provider.powerdns"],
|
||||||
[APPLY_DNS_PROVIDERS.ACMEHTTPREQ, "common.provider.acmehttpreq"],
|
[APPLY_DNS_PROVIDERS.ACMEHTTPREQ, "common.provider.acmehttpreq"],
|
||||||
].map(([type, name]) => [
|
].map(([type, name]) => [
|
||||||
|
@ -124,6 +124,22 @@
|
|||||||
"access.form.qiniu_secret_key.label": "Qiniu SecretKey",
|
"access.form.qiniu_secret_key.label": "Qiniu SecretKey",
|
||||||
"access.form.qiniu_secret_key.placeholder": "Please enter Qiniu SecretKey",
|
"access.form.qiniu_secret_key.placeholder": "Please enter Qiniu SecretKey",
|
||||||
"access.form.qiniu_secret_key.tooltip": "For more information, see <a href=\"https://portal.qiniu.com/\" target=\"_blank\">https://portal.qiniu.com/</a>",
|
"access.form.qiniu_secret_key.tooltip": "For more information, see <a href=\"https://portal.qiniu.com/\" target=\"_blank\">https://portal.qiniu.com/</a>",
|
||||||
|
"access.form.ssh_host.label": "Server host",
|
||||||
|
"access.form.ssh_host.placeholder": "Please enter server host",
|
||||||
|
"access.form.ssh_port.label": "Server port",
|
||||||
|
"access.form.ssh_port.placeholder": "Please enter server port",
|
||||||
|
"access.form.ssh_username.label": "Username",
|
||||||
|
"access.form.ssh_username.placeholder": "Please enter username",
|
||||||
|
"access.form.ssh_password.label": "Password",
|
||||||
|
"access.form.ssh_password.placeholder": "Please enter password",
|
||||||
|
"access.form.ssh_password.tooltip": "Required when using password to connect to SSH.",
|
||||||
|
"access.form.ssh_key.label": "SSH key",
|
||||||
|
"access.form.ssh_key.placeholder": "Please enter SSH key",
|
||||||
|
"access.form.ssh_key.upload": "Choose file ...",
|
||||||
|
"access.form.ssh_key.tooltip": "Required when using key to connect to SSH.",
|
||||||
|
"access.form.ssh_key_passphrase.label": "SSH key passphrase",
|
||||||
|
"access.form.ssh_key_passphrase.placeholder": "Please enter SSH key passphrase",
|
||||||
|
"access.form.ssh_key_passphrase.tooltip": "Optional when using key to connect to SSH.",
|
||||||
"access.form.tencentcloud_secret_id.label": "Tencent Cloud SecretId",
|
"access.form.tencentcloud_secret_id.label": "Tencent Cloud SecretId",
|
||||||
"access.form.tencentcloud_secret_id.placeholder": "Please enter Tencent Cloud SecretId",
|
"access.form.tencentcloud_secret_id.placeholder": "Please enter Tencent Cloud SecretId",
|
||||||
"access.form.tencentcloud_secret_id.tooltip": "For more information, see <a href=\"https://cloud.tencent.com/document/product/598/40488?lang=en\" target=\"_blank\">https://cloud.tencent.com/document/product/598/40488?lang=en</a>",
|
"access.form.tencentcloud_secret_id.tooltip": "For more information, see <a href=\"https://cloud.tencent.com/document/product/598/40488?lang=en\" target=\"_blank\">https://cloud.tencent.com/document/product/598/40488?lang=en</a>",
|
||||||
@ -147,20 +163,10 @@
|
|||||||
"access.form.volcengine_secret_access_key.tooltip": "For more information, see <a href=\"https://www.volcengine.com/docs/6291/216571\" target=\"_blank\">https://www.volcengine.com/docs/6291/216571</a>",
|
"access.form.volcengine_secret_access_key.tooltip": "For more information, see <a href=\"https://www.volcengine.com/docs/6291/216571\" target=\"_blank\">https://www.volcengine.com/docs/6291/216571</a>",
|
||||||
"access.form.webhook_url.label": "Webhook URL",
|
"access.form.webhook_url.label": "Webhook URL",
|
||||||
"access.form.webhook_url.placeholder": "Please enter Webhook URL",
|
"access.form.webhook_url.placeholder": "Please enter Webhook URL",
|
||||||
"access.form.ssh_host.label": "Server host",
|
"access.form.westcn_username.label": "West.cn username",
|
||||||
"access.form.ssh_host.placeholder": "Please enter server host",
|
"access.form.westcn_username.placeholder": "Please enter West.cn username",
|
||||||
"access.form.ssh_port.label": "Server port",
|
"access.form.westcn_username.tooltip": "For more information, see <a href=\"https://www.west.cn/CustomerCenter/doc/apiv2.html#12u3001u8eabu4efdu9a8cu8bc10a3ca20id3d12u3001u8eabu4efdu9a8cu8bc13e203ca3e\" target=\"_blank\">https://www.west.cn/CustomerCenter/doc/apiv2.html</a>",
|
||||||
"access.form.ssh_port.placeholder": "Please enter server port",
|
"access.form.westcn_api_password.label": "West.cn API password",
|
||||||
"access.form.ssh_username.label": "Username",
|
"access.form.westcn_api_password.placeholder": "Please enter West.cn API password",
|
||||||
"access.form.ssh_username.placeholder": "Please enter username",
|
"access.form.westcn_api_password.tooltip": "For more information, see <a href=\"https://www.west.cn/CustomerCenter/doc/apiv2.html#12u3001u8eabu4efdu9a8cu8bc10a3ca20id3d12u3001u8eabu4efdu9a8cu8bc13e203ca3e\" target=\"_blank\">https://www.west.cn/CustomerCenter/doc/apiv2.html</a>"
|
||||||
"access.form.ssh_password.label": "Password",
|
|
||||||
"access.form.ssh_password.placeholder": "Please enter password",
|
|
||||||
"access.form.ssh_password.tooltip": "Required when using password to connect to SSH.",
|
|
||||||
"access.form.ssh_key.label": "SSH key",
|
|
||||||
"access.form.ssh_key.placeholder": "Please enter SSH key",
|
|
||||||
"access.form.ssh_key.upload": "Choose file ...",
|
|
||||||
"access.form.ssh_key.tooltip": "Required when using key to connect to SSH.",
|
|
||||||
"access.form.ssh_key_passphrase.label": "SSH key passphrase",
|
|
||||||
"access.form.ssh_key_passphrase.placeholder": "Please enter SSH key passphrase",
|
|
||||||
"access.form.ssh_key_passphrase.tooltip": "Optional when using key to connect to SSH."
|
|
||||||
}
|
}
|
||||||
|
@ -93,6 +93,7 @@
|
|||||||
"common.provider.volcengine.live": "Volcengine - Live",
|
"common.provider.volcengine.live": "Volcengine - Live",
|
||||||
"common.provider.volcengine.tos": "Volcengine - Tinder Object Storage (TOS)",
|
"common.provider.volcengine.tos": "Volcengine - Tinder Object Storage (TOS)",
|
||||||
"common.provider.webhook": "Webhook",
|
"common.provider.webhook": "Webhook",
|
||||||
|
"common.provider.westcn": "West.cn",
|
||||||
|
|
||||||
"common.notifier.bark": "Bark",
|
"common.notifier.bark": "Bark",
|
||||||
"common.notifier.dingtalk": "DingTalk",
|
"common.notifier.dingtalk": "DingTalk",
|
||||||
|
@ -124,6 +124,22 @@
|
|||||||
"access.form.qiniu_secret_key.label": "七牛云 SecretKey",
|
"access.form.qiniu_secret_key.label": "七牛云 SecretKey",
|
||||||
"access.form.qiniu_secret_key.placeholder": "请输入七牛云 SecretKey",
|
"access.form.qiniu_secret_key.placeholder": "请输入七牛云 SecretKey",
|
||||||
"access.form.qiniu_secret_key.tooltip": "这是什么?请参阅 <a href=\"https://portal.qiniu.com/\" target=\"_blank\">https://portal.qiniu.com/</a>",
|
"access.form.qiniu_secret_key.tooltip": "这是什么?请参阅 <a href=\"https://portal.qiniu.com/\" target=\"_blank\">https://portal.qiniu.com/</a>",
|
||||||
|
"access.form.ssh_host.label": "服务器地址",
|
||||||
|
"access.form.ssh_host.placeholder": "请输入服务器地址",
|
||||||
|
"access.form.ssh_port.label": "服务器端口",
|
||||||
|
"access.form.ssh_port.placeholder": "请输入服务器端口",
|
||||||
|
"access.form.ssh_username.label": "用户名",
|
||||||
|
"access.form.ssh_username.placeholder": "请输入用户名",
|
||||||
|
"access.form.ssh_password.label": "密码",
|
||||||
|
"access.form.ssh_password.placeholder": "请输入密码",
|
||||||
|
"access.form.ssh_password.tooltip": "使用密码连接到 SSH 时必填。<br>该字段与密钥文件字段二选一。",
|
||||||
|
"access.form.ssh_key.label": "SSH 密钥",
|
||||||
|
"access.form.ssh_key.placeholder": "请输入 SSH 密钥文件",
|
||||||
|
"access.form.ssh_key.upload": "选择文件",
|
||||||
|
"access.form.ssh_key.tooltip": "使用 SSH 密钥连接到 SSH 时必填。<br>该字段与密码字段二选一。",
|
||||||
|
"access.form.ssh_key_passphrase.label": "SSH 密钥口令",
|
||||||
|
"access.form.ssh_key_passphrase.placeholder": "请输入 SSH 密钥口令",
|
||||||
|
"access.form.ssh_key_passphrase.tooltip": "使用 SSH 密钥连接到 SSH 时选填。",
|
||||||
"access.form.tencentcloud_secret_id.label": "腾讯云 SecretId",
|
"access.form.tencentcloud_secret_id.label": "腾讯云 SecretId",
|
||||||
"access.form.tencentcloud_secret_id.placeholder": "请输入腾讯云 SecretId",
|
"access.form.tencentcloud_secret_id.placeholder": "请输入腾讯云 SecretId",
|
||||||
"access.form.tencentcloud_secret_id.tooltip": "这是什么?请参阅 <a href=\"https://cloud.tencent.com/document/product/598/40488\" target=\"_blank\">https://cloud.tencent.com/document/product/598/40488</a>",
|
"access.form.tencentcloud_secret_id.tooltip": "这是什么?请参阅 <a href=\"https://cloud.tencent.com/document/product/598/40488\" target=\"_blank\">https://cloud.tencent.com/document/product/598/40488</a>",
|
||||||
@ -147,20 +163,10 @@
|
|||||||
"access.form.volcengine_secret_access_key.tooltip": "这是什么?请参阅 <a href=\"https://www.volcengine.com/docs/6291/216571\" target=\"_blank\">https://www.volcengine.com/docs/6291/216571</a>",
|
"access.form.volcengine_secret_access_key.tooltip": "这是什么?请参阅 <a href=\"https://www.volcengine.com/docs/6291/216571\" target=\"_blank\">https://www.volcengine.com/docs/6291/216571</a>",
|
||||||
"access.form.webhook_url.label": "Webhook 回调地址",
|
"access.form.webhook_url.label": "Webhook 回调地址",
|
||||||
"access.form.webhook_url.placeholder": "请输入 Webhook 回调地址",
|
"access.form.webhook_url.placeholder": "请输入 Webhook 回调地址",
|
||||||
"access.form.ssh_host.label": "服务器地址",
|
"access.form.westcn_username.label": "西部数码用户名",
|
||||||
"access.form.ssh_host.placeholder": "请输入服务器地址",
|
"access.form.westcn_username.placeholder": "请输入西部数码用户名",
|
||||||
"access.form.ssh_port.label": "服务器端口",
|
"access.form.westcn_username.tooltip": "这是什么?请参阅 <a href=\"https://www.west.cn/CustomerCenter/doc/apiv2.html#12u3001u8eabu4efdu9a8cu8bc10a3ca20id3d12u3001u8eabu4efdu9a8cu8bc13e203ca3e\" target=\"_blank\">https://www.west.cn/CustomerCenter/doc/apiv2.html</a>",
|
||||||
"access.form.ssh_port.placeholder": "请输入服务器端口",
|
"access.form.westcn_api_password.label": "西部数据 API 密码",
|
||||||
"access.form.ssh_username.label": "用户名",
|
"access.form.westcn_api_password.placeholder": "请输入西部数据 API 密码",
|
||||||
"access.form.ssh_username.placeholder": "请输入用户名",
|
"access.form.westcn_api_password.tooltip": "这是什么?请参阅 <a href=\"https://www.west.cn/CustomerCenter/doc/apiv2.html#12u3001u8eabu4efdu9a8cu8bc10a3ca20id3d12u3001u8eabu4efdu9a8cu8bc13e203ca3e\" target=\"_blank\">https://www.west.cn/CustomerCenter/doc/apiv2.html</a>"
|
||||||
"access.form.ssh_password.label": "密码",
|
|
||||||
"access.form.ssh_password.placeholder": "请输入密码",
|
|
||||||
"access.form.ssh_password.tooltip": "使用密码连接到 SSH 时必填。<br>该字段与密钥文件字段二选一。",
|
|
||||||
"access.form.ssh_key.label": "SSH 密钥",
|
|
||||||
"access.form.ssh_key.placeholder": "请输入 SSH 密钥文件",
|
|
||||||
"access.form.ssh_key.upload": "选择文件",
|
|
||||||
"access.form.ssh_key.tooltip": "使用 SSH 密钥连接到 SSH 时必填。<br>该字段与密码字段二选一。",
|
|
||||||
"access.form.ssh_key_passphrase.label": "SSH 密钥口令",
|
|
||||||
"access.form.ssh_key_passphrase.placeholder": "请输入 SSH 密钥口令",
|
|
||||||
"access.form.ssh_key_passphrase.tooltip": "使用 SSH 密钥连接到 SSH 时选填。"
|
|
||||||
}
|
}
|
||||||
|
@ -93,6 +93,7 @@
|
|||||||
"common.provider.volcengine.live": "火山引擎 - 视频直播 Live",
|
"common.provider.volcengine.live": "火山引擎 - 视频直播 Live",
|
||||||
"common.provider.volcengine.tos": "火山引擎 - 对象存储 TOS",
|
"common.provider.volcengine.tos": "火山引擎 - 对象存储 TOS",
|
||||||
"common.provider.webhook": "Webhook",
|
"common.provider.webhook": "Webhook",
|
||||||
|
"common.provider.westcn": "西部数码",
|
||||||
|
|
||||||
"common.notifier.bark": "Bark",
|
"common.notifier.bark": "Bark",
|
||||||
"common.notifier.dingtalk": "钉钉",
|
"common.notifier.dingtalk": "钉钉",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user