diff --git a/internal/applicant/acmehttpreq.go b/internal/applicant/acmehttpreq.go index 45141ee3..ca724482 100644 --- a/internal/applicant/acmehttpreq.go +++ b/internal/applicant/acmehttpreq.go @@ -21,8 +21,8 @@ func NewACMEHttpReqApplicant(option *ApplyOption) Applicant { } func (a *acmeHttpReqApplicant) Apply() (*Certificate, error) { - access := &domain.HttpreqAccess{} - json.Unmarshal([]byte(a.option.Access), access) + access := &domain.ACMEHttpReqAccessConfig{} + json.Unmarshal([]byte(a.option.AccessConfig), access) config := httpreq.NewDefaultConfig() endpoint, _ := url.Parse(access.Endpoint) diff --git a/internal/applicant/aliyun.go b/internal/applicant/aliyun.go index 7ab861c4..386ea0c8 100644 --- a/internal/applicant/aliyun.go +++ b/internal/applicant/aliyun.go @@ -20,8 +20,8 @@ func NewAliyunApplicant(option *ApplyOption) Applicant { } func (a *aliyunApplicant) Apply() (*Certificate, error) { - access := &domain.AliyunAccess{} - json.Unmarshal([]byte(a.option.Access), access) + access := &domain.AliyunAccessConfig{} + json.Unmarshal([]byte(a.option.AccessConfig), access) config := alidns.NewDefaultConfig() config.APIKey = access.AccessKeyId diff --git a/internal/applicant/applicant.go b/internal/applicant/applicant.go index 409ec66c..909622a6 100644 --- a/internal/applicant/applicant.go +++ b/internal/applicant/applicant.go @@ -26,26 +26,6 @@ import ( "github.com/usual2970/certimate/internal/repository" ) -/* -提供商类型常量值。 - - 注意:如果追加新的常量值,请保持以 ASCII 排序。 - NOTICE: If you add new constant, please keep ASCII order. -*/ -const ( - configTypeACMEHttpReq = "acmehttpreq" - configTypeAliyun = "aliyun" - configTypeAWS = "aws" - configTypeCloudflare = "cloudflare" - configTypeGoDaddy = "godaddy" - configTypeHuaweiCloud = "huaweicloud" - configTypeNameDotCom = "namedotcom" - configTypeNameSilo = "namesilo" - configTypePowerDNS = "powerdns" - configTypeTencentCloud = "tencentcloud" - configTypeVolcEngine = "volcengine" -) - const defaultSSLProvider = "letsencrypt" const ( sslProviderLetsencrypt = "letsencrypt" @@ -78,8 +58,8 @@ type Certificate struct { type ApplyOption struct { Email string `json:"email"` - Domain string `json:"domain"` - Access string `json:"access"` + Domain string `json:"subjectAltNames"` + AccessConfig string `json:"accessConfig"` KeyAlgorithm string `json:"keyAlgorithm"` Nameservers string `json:"nameservers"` PropagationTimeout int64 `json:"propagationTimeout"` @@ -165,14 +145,14 @@ func Get(record *models.Record) (Applicant, error) { option := &ApplyOption{ Email: applyConfig.Email, Domain: record.GetString("domain"), - Access: access.GetString("config"), + AccessConfig: access.GetString("config"), KeyAlgorithm: applyConfig.KeyAlgorithm, Nameservers: applyConfig.Nameservers, PropagationTimeout: applyConfig.PropagationTimeout, DisableFollowCNAME: applyConfig.DisableFollowCNAME, } - return GetWithTypeOption(access.GetString("configType"), option) + return GetWithTypeOption(domain.AccessProviderType(access.GetString("configType")), option) } func GetWithApplyNode(node *domain.WorkflowNode) (Applicant, error) { @@ -187,46 +167,46 @@ func GetWithApplyNode(node *domain.WorkflowNode) (Applicant, error) { applyConfig := &ApplyOption{ Email: node.GetConfigString("email"), Domain: node.GetConfigString("domain"), - Access: access.Config, + AccessConfig: access.Config, KeyAlgorithm: node.GetConfigString("keyAlgorithm"), Nameservers: node.GetConfigString("nameservers"), PropagationTimeout: node.GetConfigInt64("propagationTimeout"), DisableFollowCNAME: node.GetConfigBool("disableFollowCNAME"), } - return GetWithTypeOption(access.ConfigType, applyConfig) + return GetWithTypeOption(domain.AccessProviderType(access.ConfigType), applyConfig) } -func GetWithTypeOption(t string, option *ApplyOption) (Applicant, error) { +func GetWithTypeOption(providerType domain.AccessProviderType, option *ApplyOption) (Applicant, error) { /* 注意:如果追加新的常量值,请保持以 ASCII 排序。 NOTICE: If you add new constant, please keep ASCII order. */ - switch t { - case configTypeACMEHttpReq: + switch providerType { + case domain.ACCESS_PROVIDER_ACMEHTTPREQ: return NewACMEHttpReqApplicant(option), nil - case configTypeAliyun: + case domain.ACCESS_PROVIDER_ALIYUN: return NewAliyunApplicant(option), nil - case configTypeAWS: + case domain.ACCESS_PROVIDER_AWS: return NewAWSApplicant(option), nil - case configTypeCloudflare: + case domain.ACCESS_PROVIDER_CLOUDFLARE: return NewCloudflareApplicant(option), nil - case configTypeGoDaddy: + case domain.ACCESS_PROVIDER_GODADDY: return NewGoDaddyApplicant(option), nil - case configTypeHuaweiCloud: + case domain.ACCESS_PROVIDER_HUAWEICLOUD: return NewHuaweiCloudApplicant(option), nil - case configTypeNameDotCom: + case domain.ACCESS_PROVIDER_NAMEDOTCOM: return NewNameDotComApplicant(option), nil - case configTypeNameSilo: + case domain.ACCESS_PROVIDER_NAMESILO: return NewNamesiloApplicant(option), nil - case configTypePowerDNS: + case domain.ACCESS_PROVIDER_POWERDNS: return NewPowerDNSApplicant(option), nil - case configTypeTencentCloud: + case domain.ACCESS_PROVIDER_TENCENTCLOUD: return NewTencentCloudApplicant(option), nil - case configTypeVolcEngine: + case domain.ACCESS_PROVIDER_VOLCENGINE: return NewVolcEngineApplicant(option), nil default: - return nil, fmt.Errorf("unsupported applicant type: %s", t) + return nil, fmt.Errorf("unsupported applicant provider type: %s", providerType) } } diff --git a/internal/applicant/aws.go b/internal/applicant/aws.go index 672ebaa5..41c2ee94 100644 --- a/internal/applicant/aws.go +++ b/internal/applicant/aws.go @@ -20,8 +20,8 @@ func NewAWSApplicant(option *ApplyOption) Applicant { } func (a *awsApplicant) Apply() (*Certificate, error) { - access := &domain.AwsAccess{} - json.Unmarshal([]byte(a.option.Access), access) + access := &domain.AWSAccessConfig{} + json.Unmarshal([]byte(a.option.AccessConfig), access) config := route53.NewDefaultConfig() config.AccessKeyID = access.AccessKeyId diff --git a/internal/applicant/cloudflare.go b/internal/applicant/cloudflare.go index dc7f0194..a7d6127d 100644 --- a/internal/applicant/cloudflare.go +++ b/internal/applicant/cloudflare.go @@ -20,8 +20,8 @@ func NewCloudflareApplicant(option *ApplyOption) Applicant { } func (a *cloudflareApplicant) Apply() (*Certificate, error) { - access := &domain.CloudflareAccess{} - json.Unmarshal([]byte(a.option.Access), access) + access := &domain.CloudflareAccessConfig{} + json.Unmarshal([]byte(a.option.AccessConfig), access) config := cloudflare.NewDefaultConfig() config.AuthToken = access.DnsApiToken diff --git a/internal/applicant/godaddy.go b/internal/applicant/godaddy.go index fd079cd1..4fb5cd13 100644 --- a/internal/applicant/godaddy.go +++ b/internal/applicant/godaddy.go @@ -20,8 +20,8 @@ func NewGoDaddyApplicant(option *ApplyOption) Applicant { } func (a *godaddyApplicant) Apply() (*Certificate, error) { - access := &domain.GodaddyAccess{} - json.Unmarshal([]byte(a.option.Access), access) + access := &domain.GoDaddyAccessConfig{} + json.Unmarshal([]byte(a.option.AccessConfig), access) config := godaddy.NewDefaultConfig() config.APIKey = access.ApiKey diff --git a/internal/applicant/huaweicloud.go b/internal/applicant/huaweicloud.go index a2f9fafe..05c48254 100644 --- a/internal/applicant/huaweicloud.go +++ b/internal/applicant/huaweicloud.go @@ -20,8 +20,8 @@ func NewHuaweiCloudApplicant(option *ApplyOption) Applicant { } func (a *huaweicloudApplicant) Apply() (*Certificate, error) { - access := &domain.HuaweiCloudAccess{} - json.Unmarshal([]byte(a.option.Access), access) + access := &domain.HuaweiCloudAccessConfig{} + json.Unmarshal([]byte(a.option.AccessConfig), access) region := access.Region if region == "" { diff --git a/internal/applicant/namedotcom.go b/internal/applicant/namedotcom.go index e2ccdad9..f3be2f71 100644 --- a/internal/applicant/namedotcom.go +++ b/internal/applicant/namedotcom.go @@ -19,8 +19,8 @@ func NewNameDotComApplicant(option *ApplyOption) Applicant { } func (a *nameDotComApplicant) Apply() (*Certificate, error) { - access := &domain.NameDotComAccess{} - json.Unmarshal([]byte(a.option.Access), access) + access := &domain.NameDotComAccessConfig{} + json.Unmarshal([]byte(a.option.AccessConfig), access) config := namedotcom.NewDefaultConfig() config.Username = access.Username diff --git a/internal/applicant/namesilo.go b/internal/applicant/namesilo.go index 4c45924c..8d3ce88f 100644 --- a/internal/applicant/namesilo.go +++ b/internal/applicant/namesilo.go @@ -20,8 +20,8 @@ func NewNamesiloApplicant(option *ApplyOption) Applicant { } func (a *namesiloApplicant) Apply() (*Certificate, error) { - access := &domain.NameSiloAccess{} - json.Unmarshal([]byte(a.option.Access), access) + access := &domain.NameSiloAccessConfig{} + json.Unmarshal([]byte(a.option.AccessConfig), access) config := namesilo.NewDefaultConfig() config.APIKey = access.ApiKey diff --git a/internal/applicant/powerdns.go b/internal/applicant/powerdns.go index 689dd7a5..36bce6f5 100644 --- a/internal/applicant/powerdns.go +++ b/internal/applicant/powerdns.go @@ -21,8 +21,8 @@ func NewPowerDNSApplicant(option *ApplyOption) Applicant { } func (a *powerdnsApplicant) Apply() (*Certificate, error) { - access := &domain.PdnsAccess{} - json.Unmarshal([]byte(a.option.Access), access) + access := &domain.PowerDNSAccessConfig{} + json.Unmarshal([]byte(a.option.AccessConfig), access) config := pdns.NewDefaultConfig() host, _ := url.Parse(access.ApiUrl) diff --git a/internal/applicant/tencentcloud.go b/internal/applicant/tencentcloud.go index 98f13a02..f273371d 100644 --- a/internal/applicant/tencentcloud.go +++ b/internal/applicant/tencentcloud.go @@ -20,8 +20,8 @@ func NewTencentCloudApplicant(option *ApplyOption) Applicant { } func (a *tencentcloudApplicant) Apply() (*Certificate, error) { - access := &domain.TencentAccess{} - json.Unmarshal([]byte(a.option.Access), access) + access := &domain.TencentCloudAccessConfig{} + json.Unmarshal([]byte(a.option.AccessConfig), access) config := tencentcloud.NewDefaultConfig() config.SecretID = access.SecretId diff --git a/internal/applicant/volcengine.go b/internal/applicant/volcengine.go index 3ed0fcf5..9367f4bc 100644 --- a/internal/applicant/volcengine.go +++ b/internal/applicant/volcengine.go @@ -19,8 +19,8 @@ func NewVolcEngineApplicant(option *ApplyOption) Applicant { } func (a *volcengineApplicant) Apply() (*Certificate, error) { - access := &domain.VolcEngineAccess{} - json.Unmarshal([]byte(a.option.Access), access) + access := &domain.VolcEngineAccessConfig{} + json.Unmarshal([]byte(a.option.AccessConfig), access) config := volcengine.NewDefaultConfig() config.AccessKey = access.AccessKeyId diff --git a/internal/deployer/deployer.go b/internal/deployer/deployer.go index 44fb4af6..0d915252 100644 --- a/internal/deployer/deployer.go +++ b/internal/deployer/deployer.go @@ -14,6 +14,7 @@ import ( /* 提供商部署目标常量值。 +短横线前的部分始终等于提供商类型。 注意:如果追加新的常量值,请保持以 ASCII 排序。 NOTICE: If you add new constant, please keep ASCII order. @@ -140,7 +141,7 @@ type proxyDeployer struct { } func (d *proxyDeployer) GetID() string { - return fmt.Sprintf("%s-%s", d.option.AccessRecord.GetString("name"), d.option.AccessRecord.Id) + return fmt.Sprintf("%s-%s", d.option.AccessRecord.Name, d.option.AccessRecord.Id) } func (d *proxyDeployer) GetInfos() []string { diff --git a/internal/deployer/factory.go b/internal/deployer/factory.go index d02800e1..4c46ea08 100644 --- a/internal/deployer/factory.go +++ b/internal/deployer/factory.go @@ -43,7 +43,7 @@ func createDeployer(target string, accessConfig string, deployConfig map[string] switch target { case targetAliyunALB, targetAliyunCDN, targetAliyunCLB, targetAliyunDCDN, targetAliyunNLB, targetAliyunOSS: { - access := &domain.AliyunAccess{} + access := &domain.AliyunAccessConfig{} if err := json.Unmarshal([]byte(accessConfig), access); err != nil { return nil, nil, fmt.Errorf("failed to unmarshal access config: %w", err) } @@ -115,7 +115,7 @@ func createDeployer(target string, accessConfig string, deployConfig map[string] case targetBaiduCloudCDN: { - access := &domain.BaiduCloudAccess{} + access := &domain.BaiduCloudAccessConfig{} if err := json.Unmarshal([]byte(accessConfig), access); err != nil { return nil, nil, fmt.Errorf("failed to unmarshal access config: %w", err) } @@ -130,7 +130,7 @@ func createDeployer(target string, accessConfig string, deployConfig map[string] case targetBytePlusCDN: { - access := &domain.ByteplusAccess{} + access := &domain.BytePlusAccessConfig{} if err := json.Unmarshal([]byte(accessConfig), access); err != nil { return nil, nil, fmt.Errorf("failed to unmarshal access config: %w", err) } @@ -145,7 +145,7 @@ func createDeployer(target string, accessConfig string, deployConfig map[string] case targetDogeCloudCDN: { - access := &domain.DogeCloudAccess{} + access := &domain.DogeCloudAccessConfig{} if err := json.Unmarshal([]byte(accessConfig), access); err != nil { return nil, nil, fmt.Errorf("failed to unmarshal access config: %w", err) } @@ -160,7 +160,7 @@ func createDeployer(target string, accessConfig string, deployConfig map[string] case targetHuaweiCloudCDN, targetHuaweiCloudELB: { - access := &domain.HuaweiCloudAccess{} + access := &domain.HuaweiCloudAccessConfig{} if err := json.Unmarshal([]byte(accessConfig), access); err != nil { return nil, nil, fmt.Errorf("failed to unmarshal access config: %w", err) } @@ -211,7 +211,7 @@ func createDeployer(target string, accessConfig string, deployConfig map[string] case targetK8sSecret: { - access := &domain.KubernetesAccess{} + access := &domain.KubernetesAccessConfig{} if err := json.Unmarshal([]byte(accessConfig), access); err != nil { return nil, nil, fmt.Errorf("failed to unmarshal access config: %w", err) } @@ -228,7 +228,7 @@ func createDeployer(target string, accessConfig string, deployConfig map[string] case targetQiniuCDN: { - access := &domain.QiniuAccess{} + access := &domain.QiniuAccessConfig{} if err := json.Unmarshal([]byte(accessConfig), access); err != nil { return nil, nil, fmt.Errorf("failed to unmarshal access config: %w", err) } @@ -243,7 +243,7 @@ func createDeployer(target string, accessConfig string, deployConfig map[string] case targetSSH: { - access := &domain.SSHAccess{} + access := &domain.SSHAccessConfig{} if err := json.Unmarshal([]byte(accessConfig), access); err != nil { return nil, nil, fmt.Errorf("failed to unmarshal access config: %w", err) } @@ -271,7 +271,7 @@ func createDeployer(target string, accessConfig string, deployConfig map[string] case targetTencentCloudCDN, targetTencentCloudCLB, targetTencentCloudCOS, targetTencentCloudECDN, targetTencentCloudEO: { - access := &domain.TencentAccess{} + access := &domain.TencentCloudAccessConfig{} if err := json.Unmarshal([]byte(accessConfig), access); err != nil { return nil, nil, fmt.Errorf("failed to unmarshal access config: %w", err) } @@ -331,7 +331,7 @@ func createDeployer(target string, accessConfig string, deployConfig map[string] case targetVolcEngineCDN, targetVolcEngineLive: { - access := &domain.VolcEngineAccess{} + access := &domain.VolcEngineAccessConfig{} if err := json.Unmarshal([]byte(accessConfig), access); err != nil { return nil, nil, fmt.Errorf("failed to unmarshal access config: %w", err) } @@ -339,16 +339,16 @@ func createDeployer(target string, accessConfig string, deployConfig map[string] switch target { case targetVolcEngineCDN: deployer, err := providerVolcEngineCDN.NewWithLogger(&providerVolcEngineCDN.VolcEngineCDNDeployerConfig{ - AccessKey: access.AccessKey, - SecretKey: access.SecretKey, + AccessKey: access.AccessKeyId, + SecretKey: access.SecretAccessKey, Domain: maps.GetValueAsString(deployConfig, "domain"), }, logger) return deployer, logger, err case targetVolcEngineLive: deployer, err := providerVolcEngineLive.NewWithLogger(&providerVolcEngineLive.VolcEngineLiveDeployerConfig{ - AccessKey: access.AccessKey, - SecretKey: access.SecretKey, + AccessKey: access.AccessKeyId, + SecretKey: access.SecretAccessKey, Domain: maps.GetValueAsString(deployConfig, "domain"), }, logger) return deployer, logger, err @@ -360,7 +360,7 @@ func createDeployer(target string, accessConfig string, deployConfig map[string] case targetWebhook: { - access := &domain.WebhookAccess{} + access := &domain.WebhookAccessConfig{} if err := json.Unmarshal([]byte(accessConfig), access); err != nil { return nil, nil, fmt.Errorf("failed to unmarshal access config: %w", err) } diff --git a/internal/domain/access.go b/internal/domain/access.go index 348e6c46..8b484a1e 100644 --- a/internal/domain/access.go +++ b/internal/domain/access.go @@ -4,109 +4,118 @@ import "time" type Access struct { Meta - Name string `json:"name"` - Config string `json:"config"` - ConfigType string `json:"configType"` - Deleted time.Time `json:"deleted"` - Usage string `json:"usage"` + Name string `json:"name" db:"name"` + ConfigType string `json:"configType" db:"configType"` + Config string `json:"config" db:"config"` + Usage string `json:"usage" db:"usage"` + DeletedAt time.Time `json:"deleted" db:"deleted"` } -// 兼容一下原 pocketbase 的 record -func (a *Access) GetString(key string) string { - switch key { - case "name": - return a.Name - default: - return "" - } -} +type AccessProviderType string -type AliyunAccess struct { - AccessKeyId string `json:"accessKeyId"` - AccessKeySecret string `json:"accessKeySecret"` -} +/* +提供商类型常量值。 -type ByteplusAccess struct { - AccessKey string `json:"accessKey"` - SecretKey string `json:"secretKey"` -} + 注意:如果追加新的常量值,请保持以 ASCII 排序。 + NOTICE: If you add new constant, please keep ASCII order. +*/ +const ( + ACCESS_PROVIDER_ACMEHTTPREQ = AccessProviderType("acmehttpreq") + ACCESS_PROVIDER_ALIYUN = AccessProviderType("aliyun") + ACCESS_PROVIDER_AWS = AccessProviderType("aws") + ACCESS_PROVIDER_BAIDUCLOUD = AccessProviderType("baiducloud") + ACCESS_PROVIDER_BYTEPLUS = AccessProviderType("byteplus") + ACCESS_PROVIDER_CLOUDFLARE = AccessProviderType("cloudflare") + ACCESS_PROVIDER_DOGECLOUD = AccessProviderType("dogecloud") + ACCESS_PROVIDER_GODADDY = AccessProviderType("godaddy") + ACCESS_PROVIDER_HUAWEICLOUD = AccessProviderType("huaweicloud") + ACCESS_PROVIDER_KUBERNETES = AccessProviderType("k8s") + ACCESS_PROVIDER_LOCAL = AccessProviderType("local") + ACCESS_PROVIDER_NAMEDOTCOM = AccessProviderType("namedotcom") + ACCESS_PROVIDER_NAMESILO = AccessProviderType("namesilo") + ACCESS_PROVIDER_POWERDNS = AccessProviderType("powerdns") + ACCESS_PROVIDER_QINIU = AccessProviderType("qiniu") + ACCESS_PROVIDER_SSH = AccessProviderType("ssh") + ACCESS_PROVIDER_TENCENTCLOUD = AccessProviderType("tencentcloud") + ACCESS_PROVIDER_VOLCENGINE = AccessProviderType("volcengine") + ACCESS_PROVIDER_WEBHOOK = AccessProviderType("webhook") +) -type TencentAccess struct { - SecretId string `json:"secretId"` - SecretKey string `json:"secretKey"` -} - -type HuaweiCloudAccess struct { - AccessKeyId string `json:"accessKeyId"` - SecretAccessKey string `json:"secretAccessKey"` - Region string `json:"region"` -} - -type BaiduCloudAccess struct { - AccessKeyId string `json:"accessKeyId"` - SecretAccessKey string `json:"secretAccessKey"` -} - -type AwsAccess struct { - AccessKeyId string `json:"accessKeyId"` - SecretAccessKey string `json:"secretAccessKey"` - Region string `json:"region"` - HostedZoneId string `json:"hostedZoneId"` -} - -type CloudflareAccess struct { - DnsApiToken string `json:"dnsApiToken"` -} - -type QiniuAccess struct { - AccessKey string `json:"accessKey"` - SecretKey string `json:"secretKey"` -} - -type DogeCloudAccess struct { - AccessKey string `json:"accessKey"` - SecretKey string `json:"secretKey"` -} - -type NameSiloAccess struct { - ApiKey string `json:"apiKey"` -} - -type GodaddyAccess struct { - ApiKey string `json:"apiKey"` - ApiSecret string `json:"apiSecret"` -} - -type NameDotComAccess struct { - Username string `json:"username"` - ApiToken string `json:"apiToken"` -} - -type PdnsAccess struct { - ApiUrl string `json:"apiUrl"` - ApiKey string `json:"apiKey"` -} - -type VolcEngineAccess struct { - AccessKey string `json:"accessKey"` - SecretKey string `json:"secretKey"` - - // Deprecated: Use [AccessKey] and [SecretKey] instead in the future - AccessKeyId string `json:"accessKeyId"` - // Deprecated: Use [AccessKey] and [SecretKey] instead in the future - SecretAccessKey string `json:"secretAccessKey"` -} - -type HttpreqAccess struct { +type ACMEHttpReqAccessConfig struct { Endpoint string `json:"endpoint"` Mode string `json:"mode"` Username string `json:"username"` Password string `json:"password"` } -type LocalAccess struct{} +type AliyunAccessConfig struct { + AccessKeyId string `json:"accessKeyId"` + AccessKeySecret string `json:"accessKeySecret"` +} -type SSHAccess struct { +type AWSAccessConfig struct { + AccessKeyId string `json:"accessKeyId"` + SecretAccessKey string `json:"secretAccessKey"` + Region string `json:"region"` + HostedZoneId string `json:"hostedZoneId"` +} + +type BaiduCloudAccessConfig struct { + AccessKeyId string `json:"accessKeyId"` + SecretAccessKey string `json:"secretAccessKey"` +} + +type BytePlusAccessConfig struct { + AccessKey string `json:"accessKey"` + SecretKey string `json:"secretKey"` +} + +type CloudflareAccessConfig struct { + DnsApiToken string `json:"dnsApiToken"` +} + +type DogeCloudAccessConfig struct { + AccessKey string `json:"accessKey"` + SecretKey string `json:"secretKey"` +} + +type GoDaddyAccessConfig struct { + ApiKey string `json:"apiKey"` + ApiSecret string `json:"apiSecret"` +} + +type HuaweiCloudAccessConfig struct { + AccessKeyId string `json:"accessKeyId"` + SecretAccessKey string `json:"secretAccessKey"` + Region string `json:"region"` +} + +type LocalAccessConfig struct{} + +type KubernetesAccessConfig struct { + KubeConfig string `json:"kubeConfig"` +} + +type NameDotComAccessConfig struct { + Username string `json:"username"` + ApiToken string `json:"apiToken"` +} + +type NameSiloAccessConfig struct { + ApiKey string `json:"apiKey"` +} + +type PowerDNSAccessConfig struct { + ApiUrl string `json:"apiUrl"` + ApiKey string `json:"apiKey"` +} + +type QiniuAccessConfig struct { + AccessKey string `json:"accessKey"` + SecretKey string `json:"secretKey"` +} + +type SSHAccessConfig struct { Host string `json:"host"` Port string `json:"port"` Username string `json:"username"` @@ -115,10 +124,16 @@ type SSHAccess struct { KeyPassphrase string `json:"keyPassphrase"` } -type WebhookAccess struct { - Url string `json:"url"` +type TencentCloudAccessConfig struct { + SecretId string `json:"secretId"` + SecretKey string `json:"secretKey"` } -type KubernetesAccess struct { - KubeConfig string `json:"kubeConfig"` +type VolcEngineAccessConfig struct { + AccessKeyId string `json:"accessKeyId"` + SecretAccessKey string `json:"secretAccessKey"` +} + +type WebhookAccessConfig struct { + Url string `json:"url"` } diff --git a/internal/domain/acme_accounts.go b/internal/domain/acme_accounts.go index 05e25e42..b4f88dc4 100644 --- a/internal/domain/acme_accounts.go +++ b/internal/domain/acme_accounts.go @@ -1,17 +1,13 @@ package domain import ( - "time" - "github.com/go-acme/lego/v4/registration" ) type AcmeAccount struct { - Id string - Ca string - Email string - Resource *registration.Resource - Key string - Created time.Time - Updated time.Time + Meta + CA string `json:"ca" db:"ca"` + Email string `json:"email" db:"email"` + Resource *registration.Resource `json:"resource" db:"resource"` + Key string `json:"key" db:"key"` } diff --git a/internal/domain/certificate.go b/internal/domain/certificate.go index b5ee0e0e..7e11a92e 100644 --- a/internal/domain/certificate.go +++ b/internal/domain/certificate.go @@ -12,13 +12,13 @@ type Certificate struct { IssuerCertificate string `json:"issuerCertificate" db:"issuerCertificate"` CertUrl string `json:"certUrl" db:"certUrl"` CertStableUrl string `json:"certStableUrl" db:"certStableUrl"` - Output string `json:"output" db:"output"` - Workflow string `json:"workflow" db:"workflow"` - ExpireAt time.Time `json:"ExpireAt" db:"expireAt"` - NodeId string `json:"nodeId" db:"nodeId"` + WorkflowId string `json:"workflow" db:"workflow"` + WorkflowNodeId string `json:"nodeId" db:"nodeId"` + WorkflowOutputId string `json:"output" db:"output"` + ExpireAt time.Time `json:"expireAt" db:"expireAt"` } -type MetaData struct { +type CertificateMeta struct { Version string `json:"version"` SerialNumber string `json:"serialNumber"` Validity CertificateValidity `json:"validity"` diff --git a/internal/domain/common.go b/internal/domain/common.go deleted file mode 100644 index 8ff8f221..00000000 --- a/internal/domain/common.go +++ /dev/null @@ -1,9 +0,0 @@ -package domain - -import "time" - -type Meta struct { - Id string `json:"id" db:"id"` - Created time.Time `json:"created" db:"created"` - Updated time.Time `json:"updated" db:"updated"` -} diff --git a/internal/domain/domains.go b/internal/domain/domains.go index b1078df3..f3521c5c 100644 --- a/internal/domain/domains.go +++ b/internal/domain/domains.go @@ -1,12 +1,6 @@ package domain -import ( - "encoding/json" - "strings" - - "github.com/usual2970/certimate/internal/pkg/utils/maps" -) - +// Deprecated: TODO: 即将废弃 type ApplyConfig struct { Email string `json:"email"` Access string `json:"access"` @@ -16,6 +10,7 @@ type ApplyConfig struct { DisableFollowCNAME bool `json:"disableFollowCNAME"` } +// Deprecated: TODO: 即将废弃 type DeployConfig struct { Id string `json:"id"` Access string `json:"access"` @@ -23,121 +18,7 @@ type DeployConfig struct { Config map[string]any `json:"config"` } -// Deprecated: 以字符串形式获取配置项。 -// -// 入参: -// - key: 配置项的键。 -// -// 出参: -// - 配置项的值。如果配置项不存在或者类型不是字符串,则返回空字符串。 -func (dc *DeployConfig) GetConfigAsString(key string) string { - return maps.GetValueAsString(dc.Config, key) -} - -// Deprecated: 以字符串形式获取配置项。 -// -// 入参: -// - key: 配置项的键。 -// - defaultValue: 默认值。 -// -// 出参: -// - 配置项的值。如果配置项不存在、类型不是字符串或者值为零值,则返回默认值。 -func (dc *DeployConfig) GetConfigOrDefaultAsString(key string, defaultValue string) string { - return maps.GetValueOrDefaultAsString(dc.Config, key, defaultValue) -} - -// Deprecated: 以 32 位整数形式获取配置项。 -// -// 入参: -// - key: 配置项的键。 -// -// 出参: -// - 配置项的值。如果配置项不存在或者类型不是 32 位整数,则返回 0。 -func (dc *DeployConfig) GetConfigAsInt32(key string) int32 { - return maps.GetValueAsInt32(dc.Config, key) -} - -// Deprecated: 以 32 位整数形式获取配置项。 -// -// 入参: -// - key: 配置项的键。 -// - defaultValue: 默认值。 -// -// 出参: -// - 配置项的值。如果配置项不存在、类型不是 32 位整数或者值为零值,则返回默认值。 -func (dc *DeployConfig) GetConfigOrDefaultAsInt32(key string, defaultValue int32) int32 { - return maps.GetValueOrDefaultAsInt32(dc.Config, key, defaultValue) -} - -// Deprecated: 以布尔形式获取配置项。 -// -// 入参: -// - key: 配置项的键。 -// -// 出参: -// - 配置项的值。如果配置项不存在或者类型不是布尔,则返回 false。 -func (dc *DeployConfig) GetConfigAsBool(key string) bool { - return maps.GetValueAsBool(dc.Config, key) -} - -// Deprecated: 以布尔形式获取配置项。 -// -// 入参: -// - key: 配置项的键。 -// - defaultValue: 默认值。 -// -// 出参: -// - 配置项的值。如果配置项不存在或者类型不是布尔,则返回默认值。 -func (dc *DeployConfig) GetConfigOrDefaultAsBool(key string, defaultValue bool) bool { - return maps.GetValueOrDefaultAsBool(dc.Config, key, defaultValue) -} - -// Deprecated: 以变量字典形式获取配置项。 -// -// 出参: -// - 变量字典。 -func (dc *DeployConfig) GetConfigAsVariables() map[string]string { - rs := make(map[string]string) - - if dc.Config != nil { - value, ok := dc.Config["variables"] - if !ok { - return rs - } - - kvs := make([]KV, 0) - bts, _ := json.Marshal(value) - if err := json.Unmarshal(bts, &kvs); err != nil { - return rs - } - - for _, kv := range kvs { - rs[kv.Key] = kv.Value - } - } - - return rs -} - -// Deprecated: GetDomain returns the domain from the deploy config, -// if the domain is a wildcard domain, and wildcard is true, return the wildcard domain -func (dc *DeployConfig) GetDomain(wildcard ...bool) string { - val := dc.GetConfigAsString("domain") - if val == "" { - return "" - } - - if !strings.HasPrefix(val, "*") { - return val - } - - if len(wildcard) > 0 && wildcard[0] { - return val - } - - return strings.TrimPrefix(val, "*") -} - +// Deprecated: TODO: 即将废弃 type KV struct { Key string `json:"key"` Value string `json:"value"` diff --git a/internal/domain/meta.go b/internal/domain/meta.go new file mode 100644 index 00000000..bbafb542 --- /dev/null +++ b/internal/domain/meta.go @@ -0,0 +1,9 @@ +package domain + +import "time" + +type Meta struct { + Id string `json:"id" db:"id"` + CreatedAt time.Time `json:"created" db:"created"` + UpdatedAt time.Time `json:"updated" db:"updated"` +} diff --git a/internal/domain/notify.go b/internal/domain/notify.go index e307600c..eb215939 100644 --- a/internal/domain/notify.go +++ b/internal/domain/notify.go @@ -1,5 +1,7 @@ package domain +type NotifyChannelType string + /* 消息通知渠道常量值。 @@ -7,14 +9,14 @@ package domain NOTICE: If you add new constant, please keep ASCII order. */ const ( - NotifyChannelBark = "bark" - NotifyChannelDingtalk = "dingtalk" - NotifyChannelEmail = "email" - NotifyChannelLark = "lark" - NotifyChannelServerChan = "serverchan" - NotifyChannelTelegram = "telegram" - NotifyChannelWebhook = "webhook" - NotifyChannelWeCom = "wecom" + NOTIFY_CHANNEL_BARK = NotifyChannelType("bark") + NOTIFY_CHANNEL_DINGTALK = NotifyChannelType("dingtalk") + NOTIFY_CHANNEL_EMAIL = NotifyChannelType("email") + NOTIFY_CHANNEL_LARK = NotifyChannelType("lark") + NOTIFY_CHANNEL_SERVERCHAN = NotifyChannelType("serverchan") + NOTIFY_CHANNEL_TELEGRAM = NotifyChannelType("telegram") + NOTIFY_CHANNEL_WEBHOOK = NotifyChannelType("webhook") + NOTIFY_CHANNEL_WECOM = NotifyChannelType("wecom") ) type NotifyTestPushReq struct { diff --git a/internal/domain/setting.go b/internal/domain/setting.go index 813b6aa4..697972ed 100644 --- a/internal/domain/setting.go +++ b/internal/domain/setting.go @@ -3,21 +3,18 @@ package domain import ( "encoding/json" "fmt" - "time" ) -type Setting struct { - ID string `json:"id"` - Name string `json:"name"` - Content string `json:"content"` - Created time.Time `json:"created"` - Updated time.Time `json:"updated"` +type Settings struct { + Meta + Name string `json:"name" db:"name"` + Content string `json:"content" db:"content"` } -type ChannelsConfig map[string]map[string]any +type NotifyChannelsConfig map[string]map[string]any -func (s *Setting) GetChannelContent(channel string) (map[string]any, error) { - conf := &ChannelsConfig{} +func (s *Settings) GetChannelContent(channel string) (map[string]any, error) { + conf := &NotifyChannelsConfig{} if err := json.Unmarshal([]byte(s.Content), conf); err != nil { return nil, err } diff --git a/internal/notify/factory.go b/internal/notify/factory.go index b77c7c91..ab613a17 100644 --- a/internal/notify/factory.go +++ b/internal/notify/factory.go @@ -16,25 +16,25 @@ import ( "github.com/usual2970/certimate/internal/pkg/utils/maps" ) -func createNotifier(channel string, channelConfig map[string]any) (notifier.Notifier, error) { +func createNotifier(channel domain.NotifyChannelType, channelConfig map[string]any) (notifier.Notifier, error) { /* 注意:如果追加新的常量值,请保持以 ASCII 排序。 NOTICE: If you add new constant, please keep ASCII order. */ switch channel { - case domain.NotifyChannelBark: + case domain.NOTIFY_CHANNEL_BARK: return providerBark.New(&providerBark.BarkNotifierConfig{ DeviceKey: maps.GetValueAsString(channelConfig, "deviceKey"), ServerUrl: maps.GetValueAsString(channelConfig, "serverUrl"), }) - case domain.NotifyChannelDingtalk: + case domain.NOTIFY_CHANNEL_DINGTALK: return providerDingTalk.New(&providerDingTalk.DingTalkNotifierConfig{ AccessToken: maps.GetValueAsString(channelConfig, "accessToken"), Secret: maps.GetValueAsString(channelConfig, "secret"), }) - case domain.NotifyChannelEmail: + case domain.NOTIFY_CHANNEL_EMAIL: return providerEmail.New(&providerEmail.EmailNotifierConfig{ SmtpHost: maps.GetValueAsString(channelConfig, "smtpHost"), SmtpPort: maps.GetValueAsInt32(channelConfig, "smtpPort"), @@ -45,28 +45,28 @@ func createNotifier(channel string, channelConfig map[string]any) (notifier.Noti ReceiverAddress: maps.GetValueAsString(channelConfig, "receiverAddress"), }) - case domain.NotifyChannelLark: + case domain.NOTIFY_CHANNEL_LARK: return providerLark.New(&providerLark.LarkNotifierConfig{ WebhookUrl: maps.GetValueAsString(channelConfig, "webhookUrl"), }) - case domain.NotifyChannelServerChan: + case domain.NOTIFY_CHANNEL_SERVERCHAN: return providerServerChan.New(&providerServerChan.ServerChanNotifierConfig{ Url: maps.GetValueAsString(channelConfig, "url"), }) - case domain.NotifyChannelTelegram: + case domain.NOTIFY_CHANNEL_TELEGRAM: return providerTelegram.New(&providerTelegram.TelegramNotifierConfig{ ApiToken: maps.GetValueAsString(channelConfig, "apiToken"), ChatId: maps.GetValueAsInt64(channelConfig, "chatId"), }) - case domain.NotifyChannelWebhook: + case domain.NOTIFY_CHANNEL_WEBHOOK: return providerWebhook.New(&providerWebhook.WebhookNotifierConfig{ Url: maps.GetValueAsString(channelConfig, "url"), }) - case domain.NotifyChannelWeCom: + case domain.NOTIFY_CHANNEL_WECOM: return providerWeCom.New(&providerWeCom.WeComNotifierConfig{ WebhookUrl: maps.GetValueAsString(channelConfig, "webhookUrl"), }) diff --git a/internal/notify/notify.go b/internal/notify/notify.go index 9d36c0ef..6e7432a4 100644 --- a/internal/notify/notify.go +++ b/internal/notify/notify.go @@ -7,6 +7,7 @@ import ( "golang.org/x/sync/errgroup" "github.com/usual2970/certimate/internal/app" + "github.com/usual2970/certimate/internal/domain" "github.com/usual2970/certimate/internal/pkg/core/notifier" "github.com/usual2970/certimate/internal/pkg/utils/maps" ) @@ -37,7 +38,7 @@ func SendToAllChannels(subject, message string) error { } func SendToChannel(subject, message string, channel string, channelConfig map[string]any) error { - notifier, err := createNotifier(channel, channelConfig) + notifier, err := createNotifier(domain.NotifyChannelType(channel), channelConfig) if err != nil { return err } @@ -63,7 +64,7 @@ func getEnabledNotifiers() ([]notifier.Notifier, error) { continue } - notifier, err := createNotifier(k, v) + notifier, err := createNotifier(domain.NotifyChannelType(k), v) if err != nil { continue } diff --git a/internal/notify/service.go b/internal/notify/service.go index 76162ff1..d5a49e4c 100644 --- a/internal/notify/service.go +++ b/internal/notify/service.go @@ -13,7 +13,7 @@ const ( ) type SettingRepository interface { - GetByName(ctx context.Context, name string) (*domain.Setting, error) + GetByName(ctx context.Context, name string) (*domain.Settings, error) } type NotifyService struct { diff --git a/internal/repository/access.go b/internal/repository/access.go index 2879a3d1..a0cca405 100644 --- a/internal/repository/access.go +++ b/internal/repository/access.go @@ -26,9 +26,9 @@ func (a *AccessRepository) GetById(ctx context.Context, id string) (*domain.Acce rs := &domain.Access{ Meta: domain.Meta{ - Id: record.GetId(), - Created: record.GetTime("created"), - Updated: record.GetTime("updated"), + Id: record.GetId(), + CreatedAt: record.GetTime("created"), + UpdatedAt: record.GetTime("updated"), }, Name: record.GetString("name"), Config: record.GetString("config"), diff --git a/internal/repository/acme_account.go b/internal/repository/acme_account.go index c6144a27..9e3cb92b 100644 --- a/internal/repository/acme_account.go +++ b/internal/repository/acme_account.go @@ -47,13 +47,15 @@ func (r *AcmeAccountRepository) GetByCAAndEmail(ca, email string) (*domain.AcmeA } return &domain.AcmeAccount{ - Id: record.GetString("id"), - Ca: record.GetString("ca"), + Meta: domain.Meta{ + Id: record.GetString("id"), + CreatedAt: record.GetTime("created"), + UpdatedAt: record.GetTime("updated"), + }, + CA: record.GetString("ca"), Email: record.GetString("email"), Key: record.GetString("key"), Resource: resource, - Created: record.GetTime("created"), - Updated: record.GetTime("updated"), }, nil } diff --git a/internal/repository/setting.go b/internal/repository/setting.go index 248ff310..84ee0263 100644 --- a/internal/repository/setting.go +++ b/internal/repository/setting.go @@ -3,6 +3,7 @@ package repository import ( "context" + "github.com/pocketbase/dbx" "github.com/usual2970/certimate/internal/app" "github.com/usual2970/certimate/internal/domain" ) @@ -13,18 +14,20 @@ func NewSettingRepository() *SettingRepository { return &SettingRepository{} } -func (s *SettingRepository) GetByName(ctx context.Context, name string) (*domain.Setting, error) { - resp, err := app.GetApp().Dao().FindFirstRecordByFilter("settings", "name='"+name+"'") +func (s *SettingRepository) GetByName(ctx context.Context, name string) (*domain.Settings, error) { + resp, err := app.GetApp().Dao().FindFirstRecordByFilter("settings", "name={:name}", dbx.Params{"name": name}) if err != nil { return nil, err } - rs := &domain.Setting{ - ID: resp.GetString("id"), + rs := &domain.Settings{ + Meta: domain.Meta{ + Id: resp.GetString("id"), + CreatedAt: resp.GetTime("created"), + UpdatedAt: resp.GetTime("updated"), + }, Name: resp.GetString("name"), Content: resp.GetString("content"), - Created: resp.GetTime("created"), - Updated: resp.GetTime("updated"), } return rs, nil diff --git a/internal/repository/workflow.go b/internal/repository/workflow.go index 778cb342..39f5823f 100644 --- a/internal/repository/workflow.go +++ b/internal/repository/workflow.go @@ -77,9 +77,9 @@ func record2Workflow(record *models.Record) (*domain.Workflow, error) { workflow := &domain.Workflow{ Meta: domain.Meta{ - Id: record.GetId(), - Created: record.GetTime("created"), - Updated: record.GetTime("updated"), + Id: record.GetId(), + CreatedAt: record.GetTime("created"), + UpdatedAt: record.GetTime("updated"), }, Name: record.GetString("name"), Description: record.GetString("description"), diff --git a/internal/repository/workflow_output.go b/internal/repository/workflow_output.go index 3da3b653..a5159a2c 100644 --- a/internal/repository/workflow_output.go +++ b/internal/repository/workflow_output.go @@ -42,9 +42,9 @@ func (w *WorkflowOutputRepository) Get(ctx context.Context, nodeId string) (*dom rs := &domain.WorkflowOutput{ Meta: domain.Meta{ - Id: record.GetId(), - Created: record.GetCreated().Time(), - Updated: record.GetUpdated().Time(), + Id: record.GetId(), + CreatedAt: record.GetCreated().Time(), + UpdatedAt: record.GetUpdated().Time(), }, Workflow: record.GetString("workflow"), NodeId: record.GetString("nodeId"), @@ -72,20 +72,20 @@ func (w *WorkflowOutputRepository) GetCertificate(ctx context.Context, nodeId st rs := &domain.Certificate{ Meta: domain.Meta{ - Id: record.GetId(), - Created: record.GetDateTime("created").Time(), - Updated: record.GetDateTime("updated").Time(), + Id: record.GetId(), + CreatedAt: record.GetDateTime("created").Time(), + UpdatedAt: record.GetDateTime("updated").Time(), }, Certificate: record.GetString("certificate"), PrivateKey: record.GetString("privateKey"), IssuerCertificate: record.GetString("issuerCertificate"), SAN: record.GetString("san"), - Output: record.GetString("output"), + WorkflowOutputId: record.GetString("output"), ExpireAt: record.GetDateTime("expireAt").Time(), CertUrl: record.GetString("certUrl"), CertStableUrl: record.GetString("certStableUrl"), - Workflow: record.GetString("workflow"), - NodeId: record.GetString("nodeId"), + WorkflowId: record.GetString("workflow"), + WorkflowNodeId: record.GetString("nodeId"), } return rs, nil } @@ -132,12 +132,12 @@ func (w *WorkflowOutputRepository) Save(ctx context.Context, output *domain.Work certRecord.Set("privateKey", certificate.PrivateKey) certRecord.Set("issuerCertificate", certificate.IssuerCertificate) certRecord.Set("san", certificate.SAN) - certRecord.Set("output", certificate.Output) + certRecord.Set("output", certificate.WorkflowOutputId) certRecord.Set("expireAt", certificate.ExpireAt) certRecord.Set("certUrl", certificate.CertUrl) certRecord.Set("certStableUrl", certificate.CertStableUrl) - certRecord.Set("workflow", certificate.Workflow) - certRecord.Set("nodeId", certificate.NodeId) + certRecord.Set("workflow", certificate.WorkflowId) + certRecord.Set("nodeId", certificate.WorkflowNodeId) if err := app.GetApp().Dao().SaveRecord(certRecord); err != nil { return err diff --git a/internal/workflow/node-processor/apply_node.go b/internal/workflow/node-processor/apply_node.go index 44257d4c..9ab4baa8 100644 --- a/internal/workflow/node-processor/apply_node.go +++ b/internal/workflow/node-processor/apply_node.go @@ -103,13 +103,13 @@ func (a *applyNode) Run(ctx context.Context) error { CertUrl: certificate.CertUrl, CertStableUrl: certificate.CertStableUrl, ExpireAt: cert.NotAfter, - Workflow: GetWorkflowId(ctx), - NodeId: a.node.Id, + WorkflowId: GetWorkflowId(ctx), + WorkflowNodeId: a.node.Id, } if err := a.outputRepo.Save(ctx, output, certificateRecord, func(id string) error { if certificateRecord != nil { - certificateRecord.Output = id + certificateRecord.WorkflowOutputId = id } return nil diff --git a/internal/workflow/node-processor/deploy_node.go b/internal/workflow/node-processor/deploy_node.go index 46c7df9f..787e9b76 100644 --- a/internal/workflow/node-processor/deploy_node.go +++ b/internal/workflow/node-processor/deploy_node.go @@ -53,7 +53,7 @@ func (d *deployNode) Run(ctx context.Context) error { // 部署过但是证书更新了,重新部署 // 部署过且证书未更新,直接返回 - if d.deployed(output) && cert.Created.Before(output.Updated) { + if d.deployed(output) && cert.CreatedAt.Before(output.UpdatedAt) { d.AddOutput(ctx, d.node.Name, "已部署过且证书未更新") return nil } diff --git a/internal/workflow/node-processor/notify_node.go b/internal/workflow/node-processor/notify_node.go index 7ef60a61..17f8d2f3 100644 --- a/internal/workflow/node-processor/notify_node.go +++ b/internal/workflow/node-processor/notify_node.go @@ -9,7 +9,7 @@ import ( ) type SettingRepository interface { - GetByName(ctx context.Context, name string) (*domain.Setting, error) + GetByName(ctx context.Context, name string) (*domain.Settings, error) } type notifyNode struct { node *domain.WorkflowNode diff --git a/ui/src/components/access/AccessEditForm.tsx b/ui/src/components/access/AccessEditForm.tsx index 6cfc34b9..cc629e28 100644 --- a/ui/src/components/access/AccessEditForm.tsx +++ b/ui/src/components/access/AccessEditForm.tsx @@ -6,7 +6,7 @@ import { createSchemaFieldRule } from "antd-zod"; import { z } from "zod"; import { useAntdForm } from "@/hooks"; -import { ACCESS_PROVIDER_TYPES, type AccessModel } from "@/domain/access"; +import { ACCESS_PROVIDERS, type AccessModel } from "@/domain/access"; import AccessTypeSelect from "./AccessTypeSelect"; import AccessEditFormACMEHttpReqConfig from "./AccessEditFormACMEHttpReqConfig"; import AccessEditFormAliyunConfig from "./AccessEditFormAliyunConfig"; @@ -55,7 +55,7 @@ const AccessEditForm = forwardRef(( .trim() .min(1, t("access.form.name.placeholder")) .max(64, t("common.errmsg.string_max", { max: 64 })), - configType: z.nativeEnum(ACCESS_PROVIDER_TYPES, { message: t("access.form.type.placeholder") }), + configType: z.nativeEnum(ACCESS_PROVIDERS, { message: t("access.form.type.placeholder") }), config: z.any(), }); const formRule = createSchemaFieldRule(formSchema); @@ -77,43 +77,43 @@ const AccessEditForm = forwardRef(( */ const configFormProps = { form: configFormInst, formName: configFormName, disabled: disabled, initialValues: initialValues?.config }; switch (configType) { - case ACCESS_PROVIDER_TYPES.ACMEHTTPREQ: + case ACCESS_PROVIDERS.ACMEHTTPREQ: return ; - case ACCESS_PROVIDER_TYPES.ALIYUN: + case ACCESS_PROVIDERS.ALIYUN: return ; - case ACCESS_PROVIDER_TYPES.AWS: + case ACCESS_PROVIDERS.AWS: return ; - case ACCESS_PROVIDER_TYPES.BAIDUCLOUD: + case ACCESS_PROVIDERS.BAIDUCLOUD: return ; - case ACCESS_PROVIDER_TYPES.BYTEPLUS: + case ACCESS_PROVIDERS.BYTEPLUS: return ; - case ACCESS_PROVIDER_TYPES.CLOUDFLARE: + case ACCESS_PROVIDERS.CLOUDFLARE: return ; - case ACCESS_PROVIDER_TYPES.DOGECLOUD: + case ACCESS_PROVIDERS.DOGECLOUD: return ; - case ACCESS_PROVIDER_TYPES.GODADDY: + case ACCESS_PROVIDERS.GODADDY: return ; - case ACCESS_PROVIDER_TYPES.HUAWEICLOUD: + case ACCESS_PROVIDERS.HUAWEICLOUD: return ; - case ACCESS_PROVIDER_TYPES.KUBERNETES: + case ACCESS_PROVIDERS.KUBERNETES: return ; - case ACCESS_PROVIDER_TYPES.LOCAL: + case ACCESS_PROVIDERS.LOCAL: return ; - case ACCESS_PROVIDER_TYPES.NAMEDOTCOM: + case ACCESS_PROVIDERS.NAMEDOTCOM: return ; - case ACCESS_PROVIDER_TYPES.NAMESILO: + case ACCESS_PROVIDERS.NAMESILO: return ; - case ACCESS_PROVIDER_TYPES.POWERDNS: + case ACCESS_PROVIDERS.POWERDNS: return ; - case ACCESS_PROVIDER_TYPES.QINIU: + case ACCESS_PROVIDERS.QINIU: return ; - case ACCESS_PROVIDER_TYPES.SSH: + case ACCESS_PROVIDERS.SSH: return ; - case ACCESS_PROVIDER_TYPES.TENCENTCLOUD: + case ACCESS_PROVIDERS.TENCENTCLOUD: return ; - case ACCESS_PROVIDER_TYPES.VOLCENGINE: + case ACCESS_PROVIDERS.VOLCENGINE: return ; - case ACCESS_PROVIDER_TYPES.WEBHOOK: + case ACCESS_PROVIDERS.WEBHOOK: return ; } }, [disabled, initialValues, configType, configFormInst, configFormName]); diff --git a/ui/src/components/access/AccessTypeSelect.tsx b/ui/src/components/access/AccessTypeSelect.tsx index 646c9d30..2a0da53d 100644 --- a/ui/src/components/access/AccessTypeSelect.tsx +++ b/ui/src/components/access/AccessTypeSelect.tsx @@ -2,7 +2,7 @@ import { memo } from "react"; import { useTranslation } from "react-i18next"; import { Avatar, Select, Space, Tag, Typography, type SelectProps } from "antd"; -import { ACCESS_PROVIDER_USAGES, accessProvidersMap } from "@/domain/access"; +import { ACCESS_USAGES, accessProvidersMap } from "@/domain/access"; export type AccessTypeSelectProps = Omit< SelectProps, @@ -29,17 +29,17 @@ const AccessTypeSelect = (props: AccessTypeSelectProps) => {
- {provider?.usage === ACCESS_PROVIDER_USAGES.APPLY && ( + {provider?.usage === ACCESS_USAGES.APPLY && ( <> {t("access.props.provider.usage.dns")} )} - {provider?.usage === ACCESS_PROVIDER_USAGES.DEPLOY && ( + {provider?.usage === ACCESS_USAGES.DEPLOY && ( <> {t("access.props.provider.usage.host")} )} - {provider?.usage === ACCESS_PROVIDER_USAGES.ALL && ( + {provider?.usage === ACCESS_USAGES.ALL && ( <> {t("access.props.provider.usage.dns")} {t("access.props.provider.usage.host")} diff --git a/ui/src/components/workflow/Node.tsx b/ui/src/components/workflow/Node.tsx index 05b6f979..e749ab1d 100644 --- a/ui/src/components/workflow/Node.tsx +++ b/ui/src/components/workflow/Node.tsx @@ -67,9 +67,9 @@ const Node = ({ data }: NodeProps) => { case WorkflowNodeType.Notify: { const channelLabel = notifyChannelsMap.get(data.config?.channel as string); return ( -
-
{t(channelLabel?.name ?? "")}
-
{(data.config?.title as string) ?? ""}
+
+
{t(channelLabel?.name ?? "")}
+
{(data.config?.subject as string) ?? ""}
); } diff --git a/ui/src/components/workflow/node/ApplyNodeForm.tsx b/ui/src/components/workflow/node/ApplyNodeForm.tsx index 7d5907d4..88052c5c 100644 --- a/ui/src/components/workflow/node/ApplyNodeForm.tsx +++ b/ui/src/components/workflow/node/ApplyNodeForm.tsx @@ -12,7 +12,7 @@ import ModalForm from "@/components/core/ModalForm"; import MultipleInput from "@/components/core/MultipleInput"; import { usePanel } from "../PanelProvider"; import { useAntdForm, useZustandShallowSelector } from "@/hooks"; -import { ACCESS_PROVIDER_USAGES, accessProvidersMap } from "@/domain/access"; +import { ACCESS_USAGES, accessProvidersMap } from "@/domain/access"; import { type WorkflowNode, type WorkflowNodeConfig } from "@/domain/workflow"; import { useContactStore } from "@/stores/contact"; import { useWorkflowStore } from "@/stores/workflow"; @@ -163,7 +163,7 @@ const ApplyNodeForm = ({ data }: ApplyNodeFormProps) => { } onSubmit={(record) => { const provider = accessProvidersMap.get(record.configType); - if (ACCESS_PROVIDER_USAGES.ALL === provider?.usage || ACCESS_PROVIDER_USAGES.APPLY === provider?.usage) { + if (ACCESS_USAGES.ALL === provider?.usage || ACCESS_USAGES.APPLY === provider?.usage) { formInst.setFieldValue("access", record.id); } }} @@ -176,7 +176,7 @@ const ApplyNodeForm = ({ data }: ApplyNodeFormProps) => { placeholder={t("workflow.nodes.apply.form.access.placeholder")} filter={(record) => { const provider = accessProvidersMap.get(record.configType); - return ACCESS_PROVIDER_USAGES.ALL === provider?.usage || ACCESS_PROVIDER_USAGES.APPLY === provider?.usage; + return ACCESS_USAGES.ALL === provider?.usage || ACCESS_USAGES.APPLY === provider?.usage; }} /> diff --git a/ui/src/domain/access.ts b/ui/src/domain/access.ts index 23adc541..5aa421e1 100644 --- a/ui/src/domain/access.ts +++ b/ui/src/domain/access.ts @@ -2,65 +2,65 @@ 注意:如果追加新的常量值,请保持以 ASCII 排序。 NOTICE: If you add new constant, please keep ASCII order. */ -export const ACCESS_PROVIDER_TYPE_ACMEHTTPREQ = "acmehttpreq" as const; -export const ACCESS_PROVIDER_TYPE_ALIYUN = "aliyun" as const; -export const ACCESS_PROVIDER_TYPE_AWS = "aws" as const; -export const ACCESS_PROVIDER_TYPE_BAIDUCLOUD = "baiducloud" as const; -export const ACCESS_PROVIDER_TYPE_BYTEPLUS = "byteplus" as const; -export const ACCESS_PROVIDER_TYPE_CLOUDFLARE = "cloudflare" as const; -export const ACCESS_PROVIDER_TYPE_DOGECLOUD = "dogecloud" as const; -export const ACCESS_PROVIDER_TYPE_GODADDY = "godaddy" as const; -export const ACCESS_PROVIDER_TYPE_HUAWEICLOUD = "huaweicloud" as const; -export const ACCESS_PROVIDER_TYPE_KUBERNETES = "k8s" as const; -export const ACCESS_PROVIDER_TYPE_LOCAL = "local" as const; -export const ACCESS_PROVIDER_TYPE_NAMEDOTCOM = "namedotcom" as const; -export const ACCESS_PROVIDER_TYPE_NAMESILO = "namesilo" as const; -export const ACCESS_PROVIDER_TYPE_POWERDNS = "powerdns" as const; -export const ACCESS_PROVIDER_TYPE_QINIU = "qiniu" as const; -export const ACCESS_PROVIDER_TYPE_SSH = "ssh" as const; -export const ACCESS_PROVIDER_TYPE_TENCENTCLOUD = "tencentcloud" as const; -export const ACCESS_PROVIDER_TYPE_VOLCENGINE = "volcengine" as const; -export const ACCESS_PROVIDER_TYPE_WEBHOOK = "webhook" as const; -export const ACCESS_PROVIDER_TYPES = Object.freeze({ - ACMEHTTPREQ: ACCESS_PROVIDER_TYPE_ACMEHTTPREQ, - ALIYUN: ACCESS_PROVIDER_TYPE_ALIYUN, - AWS: ACCESS_PROVIDER_TYPE_AWS, - BAIDUCLOUD: ACCESS_PROVIDER_TYPE_BAIDUCLOUD, - BYTEPLUS: ACCESS_PROVIDER_TYPE_BYTEPLUS, - CLOUDFLARE: ACCESS_PROVIDER_TYPE_CLOUDFLARE, - DOGECLOUD: ACCESS_PROVIDER_TYPE_DOGECLOUD, - GODADDY: ACCESS_PROVIDER_TYPE_GODADDY, - HUAWEICLOUD: ACCESS_PROVIDER_TYPE_HUAWEICLOUD, - KUBERNETES: ACCESS_PROVIDER_TYPE_KUBERNETES, - LOCAL: ACCESS_PROVIDER_TYPE_LOCAL, - NAMEDOTCOM: ACCESS_PROVIDER_TYPE_NAMEDOTCOM, - NAMESILO: ACCESS_PROVIDER_TYPE_NAMESILO, - POWERDNS: ACCESS_PROVIDER_TYPE_POWERDNS, - QINIU: ACCESS_PROVIDER_TYPE_QINIU, - SSH: ACCESS_PROVIDER_TYPE_SSH, - TENCENTCLOUD: ACCESS_PROVIDER_TYPE_TENCENTCLOUD, - VOLCENGINE: ACCESS_PROVIDER_TYPE_VOLCENGINE, - WEBHOOK: ACCESS_PROVIDER_TYPE_WEBHOOK, +export const ACCESS_PROVIDER_ACMEHTTPREQ = "acmehttpreq" as const; +export const ACCESS_PROVIDER_ALIYUN = "aliyun" as const; +export const ACCESS_PROVIDER_AWS = "aws" as const; +export const ACCESS_PROVIDER_BAIDUCLOUD = "baiducloud" as const; +export const ACCESS_PROVIDER_BYTEPLUS = "byteplus" as const; +export const ACCESS_PROVIDER_CLOUDFLARE = "cloudflare" as const; +export const ACCESS_PROVIDER_DOGECLOUD = "dogecloud" as const; +export const ACCESS_PROVIDER_GODADDY = "godaddy" as const; +export const ACCESS_PROVIDER_HUAWEICLOUD = "huaweicloud" as const; +export const ACCESS_PROVIDER_KUBERNETES = "k8s" as const; +export const ACCESS_PROVIDER_LOCAL = "local" as const; +export const ACCESS_PROVIDER_NAMEDOTCOM = "namedotcom" as const; +export const ACCESS_PROVIDER_NAMESILO = "namesilo" as const; +export const ACCESS_PROVIDER_POWERDNS = "powerdns" as const; +export const ACCESS_PROVIDER_QINIU = "qiniu" as const; +export const ACCESS_PROVIDER_SSH = "ssh" as const; +export const ACCESS_PROVIDER_TENCENTCLOUD = "tencentcloud" as const; +export const ACCESS_PROVIDER_VOLCENGINE = "volcengine" as const; +export const ACCESS_PROVIDER_WEBHOOK = "webhook" as const; +export const ACCESS_PROVIDERS = Object.freeze({ + ACMEHTTPREQ: ACCESS_PROVIDER_ACMEHTTPREQ, + ALIYUN: ACCESS_PROVIDER_ALIYUN, + AWS: ACCESS_PROVIDER_AWS, + BAIDUCLOUD: ACCESS_PROVIDER_BAIDUCLOUD, + BYTEPLUS: ACCESS_PROVIDER_BYTEPLUS, + CLOUDFLARE: ACCESS_PROVIDER_CLOUDFLARE, + DOGECLOUD: ACCESS_PROVIDER_DOGECLOUD, + GODADDY: ACCESS_PROVIDER_GODADDY, + HUAWEICLOUD: ACCESS_PROVIDER_HUAWEICLOUD, + KUBERNETES: ACCESS_PROVIDER_KUBERNETES, + LOCAL: ACCESS_PROVIDER_LOCAL, + NAMEDOTCOM: ACCESS_PROVIDER_NAMEDOTCOM, + NAMESILO: ACCESS_PROVIDER_NAMESILO, + POWERDNS: ACCESS_PROVIDER_POWERDNS, + QINIU: ACCESS_PROVIDER_QINIU, + SSH: ACCESS_PROVIDER_SSH, + TENCENTCLOUD: ACCESS_PROVIDER_TENCENTCLOUD, + VOLCENGINE: ACCESS_PROVIDER_VOLCENGINE, + WEBHOOK: ACCESS_PROVIDER_WEBHOOK, } as const); -export type AccessProviderTypes = (typeof ACCESS_PROVIDER_TYPES)[keyof typeof ACCESS_PROVIDER_TYPES]; +export type AccessProviderType = (typeof ACCESS_PROVIDERS)[keyof typeof ACCESS_PROVIDERS]; -export const ACCESS_PROVIDER_USAGE_ALL = "all" as const; -export const ACCESS_PROVIDER_USAGE_APPLY = "apply" as const; -export const ACCESS_PROVIDER_USAGE_DEPLOY = "deploy" as const; -export const ACCESS_PROVIDER_USAGES = Object.freeze({ - ALL: ACCESS_PROVIDER_USAGE_ALL, - APPLY: ACCESS_PROVIDER_USAGE_APPLY, - DEPLOY: ACCESS_PROVIDER_USAGE_DEPLOY, +export const ACCESS_USAGE_ALL = "all" as const; +export const ACCESS_USAGE_APPLY = "apply" as const; +export const ACCESS_USAGE_DEPLOY = "deploy" as const; +export const ACCESS_USAGES = Object.freeze({ + ALL: ACCESS_USAGE_ALL, + APPLY: ACCESS_USAGE_APPLY, + DEPLOY: ACCESS_USAGE_DEPLOY, } as const); -export type AccessProviderUsages = (typeof ACCESS_PROVIDER_USAGES)[keyof typeof ACCESS_PROVIDER_USAGES]; +export type AccessUsageType = (typeof ACCESS_USAGES)[keyof typeof ACCESS_USAGES]; // #region AccessModel export interface AccessModel extends BaseModel { name: string; configType: string; - usage: AccessProviderUsages; + usage: AccessUsageType; config: /* 注意:如果追加新的类型,请保持以 ASCII 排序。 NOTICE: If you add new type, please keep ASCII order. @@ -193,7 +193,7 @@ export type AccessProvider = { type: string; name: string; icon: string; - usage: AccessProviderUsages; + usage: AccessUsageType; }; export const accessProvidersMap: Map = new Map( @@ -202,25 +202,25 @@ export const accessProvidersMap: Map = n NOTICE: The following order determines the order displayed at the frontend. */ [ - [ACCESS_PROVIDER_TYPE_LOCAL, "common.provider.local", "/imgs/providers/local.svg", "deploy"], - [ACCESS_PROVIDER_TYPE_SSH, "common.provider.ssh", "/imgs/providers/ssh.svg", "deploy"], - [ACCESS_PROVIDER_TYPE_WEBHOOK, "common.provider.webhook", "/imgs/providers/webhook.svg", "deploy"], - [ACCESS_PROVIDER_TYPE_ALIYUN, "common.provider.aliyun", "/imgs/providers/aliyun.svg", "all"], - [ACCESS_PROVIDER_TYPE_TENCENTCLOUD, "common.provider.tencentcloud", "/imgs/providers/tencentcloud.svg", "all"], - [ACCESS_PROVIDER_TYPE_HUAWEICLOUD, "common.provider.huaweicloud", "/imgs/providers/huaweicloud.svg", "all"], - [ACCESS_PROVIDER_TYPE_BAIDUCLOUD, "common.provider.baiducloud", "/imgs/providers/baiducloud.svg", "all"], - [ACCESS_PROVIDER_TYPE_QINIU, "common.provider.qiniu", "/imgs/providers/qiniu.svg", "deploy"], - [ACCESS_PROVIDER_TYPE_DOGECLOUD, "common.provider.dogecloud", "/imgs/providers/dogecloud.svg", "deploy"], - [ACCESS_PROVIDER_TYPE_VOLCENGINE, "common.provider.volcengine", "/imgs/providers/volcengine.svg", "all"], - [ACCESS_PROVIDER_TYPE_BYTEPLUS, "common.provider.byteplus", "/imgs/providers/byteplus.svg", "all"], - [ACCESS_PROVIDER_TYPE_AWS, "common.provider.aws", "/imgs/providers/aws.svg", "apply"], - [ACCESS_PROVIDER_TYPE_CLOUDFLARE, "common.provider.cloudflare", "/imgs/providers/cloudflare.svg", "apply"], - [ACCESS_PROVIDER_TYPE_NAMEDOTCOM, "common.provider.namedotcom", "/imgs/providers/namedotcom.svg", "apply"], - [ACCESS_PROVIDER_TYPE_NAMESILO, "common.provider.namesilo", "/imgs/providers/namesilo.svg", "apply"], - [ACCESS_PROVIDER_TYPE_GODADDY, "common.provider.godaddy", "/imgs/providers/godaddy.svg", "apply"], - [ACCESS_PROVIDER_TYPE_POWERDNS, "common.provider.powerdns", "/imgs/providers/powerdns.svg", "apply"], - [ACCESS_PROVIDER_TYPE_KUBERNETES, "common.provider.kubernetes", "/imgs/providers/kubernetes.svg", "deploy"], - [ACCESS_PROVIDER_TYPE_ACMEHTTPREQ, "common.provider.acmehttpreq", "/imgs/providers/acmehttpreq.svg", "apply"], - ].map(([type, name, icon, usage]) => [type, { type, name, icon, usage: usage as AccessProviderUsages }]) + [ACCESS_PROVIDER_LOCAL, "common.provider.local", "/imgs/providers/local.svg", "deploy"], + [ACCESS_PROVIDER_SSH, "common.provider.ssh", "/imgs/providers/ssh.svg", "deploy"], + [ACCESS_PROVIDER_WEBHOOK, "common.provider.webhook", "/imgs/providers/webhook.svg", "deploy"], + [ACCESS_PROVIDER_ALIYUN, "common.provider.aliyun", "/imgs/providers/aliyun.svg", "all"], + [ACCESS_PROVIDER_TENCENTCLOUD, "common.provider.tencentcloud", "/imgs/providers/tencentcloud.svg", "all"], + [ACCESS_PROVIDER_HUAWEICLOUD, "common.provider.huaweicloud", "/imgs/providers/huaweicloud.svg", "all"], + [ACCESS_PROVIDER_BAIDUCLOUD, "common.provider.baiducloud", "/imgs/providers/baiducloud.svg", "all"], + [ACCESS_PROVIDER_QINIU, "common.provider.qiniu", "/imgs/providers/qiniu.svg", "deploy"], + [ACCESS_PROVIDER_DOGECLOUD, "common.provider.dogecloud", "/imgs/providers/dogecloud.svg", "deploy"], + [ACCESS_PROVIDER_VOLCENGINE, "common.provider.volcengine", "/imgs/providers/volcengine.svg", "all"], + [ACCESS_PROVIDER_BYTEPLUS, "common.provider.byteplus", "/imgs/providers/byteplus.svg", "all"], + [ACCESS_PROVIDER_AWS, "common.provider.aws", "/imgs/providers/aws.svg", "apply"], + [ACCESS_PROVIDER_CLOUDFLARE, "common.provider.cloudflare", "/imgs/providers/cloudflare.svg", "apply"], + [ACCESS_PROVIDER_NAMEDOTCOM, "common.provider.namedotcom", "/imgs/providers/namedotcom.svg", "apply"], + [ACCESS_PROVIDER_NAMESILO, "common.provider.namesilo", "/imgs/providers/namesilo.svg", "apply"], + [ACCESS_PROVIDER_GODADDY, "common.provider.godaddy", "/imgs/providers/godaddy.svg", "apply"], + [ACCESS_PROVIDER_POWERDNS, "common.provider.powerdns", "/imgs/providers/powerdns.svg", "apply"], + [ACCESS_PROVIDER_KUBERNETES, "common.provider.kubernetes", "/imgs/providers/kubernetes.svg", "deploy"], + [ACCESS_PROVIDER_ACMEHTTPREQ, "common.provider.acmehttpreq", "/imgs/providers/acmehttpreq.svg", "apply"], + ].map(([type, name, icon, usage]) => [type, { type, name, icon, usage: usage as AccessUsageType }]) ); // #endregion diff --git a/ui/src/domain/domain.ts b/ui/src/domain/domain.ts index 521e86e9..3a5fbbff 100644 --- a/ui/src/domain/domain.ts +++ b/ui/src/domain/domain.ts @@ -1,16 +1,16 @@ import { - ACCESS_PROVIDER_TYPE_ALIYUN, - ACCESS_PROVIDER_TYPE_BAIDUCLOUD, - ACCESS_PROVIDER_TYPE_BYTEPLUS, - ACCESS_PROVIDER_TYPE_DOGECLOUD, - ACCESS_PROVIDER_TYPE_HUAWEICLOUD, - ACCESS_PROVIDER_TYPE_KUBERNETES, - ACCESS_PROVIDER_TYPE_LOCAL, - ACCESS_PROVIDER_TYPE_QINIU, - ACCESS_PROVIDER_TYPE_SSH, - ACCESS_PROVIDER_TYPE_TENCENTCLOUD, - ACCESS_PROVIDER_TYPE_VOLCENGINE, - ACCESS_PROVIDER_TYPE_WEBHOOK, + ACCESS_PROVIDER_ALIYUN, + ACCESS_PROVIDER_BAIDUCLOUD, + ACCESS_PROVIDER_BYTEPLUS, + ACCESS_PROVIDER_DOGECLOUD, + ACCESS_PROVIDER_HUAWEICLOUD, + ACCESS_PROVIDER_KUBERNETES, + ACCESS_PROVIDER_LOCAL, + ACCESS_PROVIDER_QINIU, + ACCESS_PROVIDER_SSH, + ACCESS_PROVIDER_TENCENTCLOUD, + ACCESS_PROVIDER_VOLCENGINE, + ACCESS_PROVIDER_WEBHOOK, } from "./access"; export type KVType = { @@ -34,7 +34,7 @@ export type ApplyConfig = { email: string; keyAlgorithm?: string; nameservers?: string; - timeout?: number; + propagationTimeout?: number; disableFollowCNAME?: boolean; }; @@ -50,29 +50,29 @@ export const deployTargetList: string[][] = [ 注意:此处的顺序决定显示在前端的顺序。 NOTICE: The following order determines the order displayed at the frontend. */ - [`${ACCESS_PROVIDER_TYPE_LOCAL}`, "common.provider.local", "/imgs/providers/local.svg"], - [`${ACCESS_PROVIDER_TYPE_SSH}`, "common.provider.ssh", "/imgs/providers/ssh.svg"], - [`${ACCESS_PROVIDER_TYPE_WEBHOOK}`, "common.provider.webhook", "/imgs/providers/webhook.svg"], - [`${ACCESS_PROVIDER_TYPE_ALIYUN}-oss`, "common.provider.aliyun.oss", "/imgs/providers/aliyun.svg"], - [`${ACCESS_PROVIDER_TYPE_ALIYUN}-cdn`, "common.provider.aliyun.cdn", "/imgs/providers/aliyun.svg"], - [`${ACCESS_PROVIDER_TYPE_ALIYUN}-dcdn`, "common.provider.aliyun.dcdn", "/imgs/providers/aliyun.svg"], - [`${ACCESS_PROVIDER_TYPE_ALIYUN}-clb`, "common.provider.aliyun.clb", "/imgs/providers/aliyun.svg"], - [`${ACCESS_PROVIDER_TYPE_ALIYUN}-alb`, "common.provider.aliyun.alb", "/imgs/providers/aliyun.svg"], - [`${ACCESS_PROVIDER_TYPE_ALIYUN}-nlb`, "common.provider.aliyun.nlb", "/imgs/providers/aliyun.svg"], - [`${ACCESS_PROVIDER_TYPE_TENCENTCLOUD}-cdn`, "common.provider.tencentcloud.cdn", "/imgs/providers/tencentcloud.svg"], - [`${ACCESS_PROVIDER_TYPE_TENCENTCLOUD}-ecdn`, "common.provider.tencentcloud.ecdn", "/imgs/providers/tencentcloud.svg"], - [`${ACCESS_PROVIDER_TYPE_TENCENTCLOUD}-clb`, "common.provider.tencentcloud.clb", "/imgs/providers/tencentcloud.svg"], - [`${ACCESS_PROVIDER_TYPE_TENCENTCLOUD}-cos`, "common.provider.tencentcloud.cos", "/imgs/providers/tencentcloud.svg"], - [`${ACCESS_PROVIDER_TYPE_TENCENTCLOUD}-eo`, "common.provider.tencentcloud.eo", "/imgs/providers/tencentcloud.svg"], - [`${ACCESS_PROVIDER_TYPE_HUAWEICLOUD}-cdn`, "common.provider.huaweicloud.cdn", "/imgs/providers/huaweicloud.svg"], - [`${ACCESS_PROVIDER_TYPE_HUAWEICLOUD}-elb`, "common.provider.huaweicloud.elb", "/imgs/providers/huaweicloud.svg"], - [`${ACCESS_PROVIDER_TYPE_BAIDUCLOUD}-cdn`, "common.provider.baiducloud.cdn", "/imgs/providers/baiducloud.svg"], - [`${ACCESS_PROVIDER_TYPE_VOLCENGINE}-cdn`, "common.provider.volcengine.cdn", "/imgs/providers/volcengine.svg"], - [`${ACCESS_PROVIDER_TYPE_VOLCENGINE}-live`, "common.provider.volcengine.live", "/imgs/providers/volcengine.svg"], - [`${ACCESS_PROVIDER_TYPE_QINIU}-cdn`, "common.provider.qiniu.cdn", "/imgs/providers/qiniu.svg"], - [`${ACCESS_PROVIDER_TYPE_DOGECLOUD}-cdn`, "common.provider.dogecloud.cdn", "/imgs/providers/dogecloud.svg"], - [`${ACCESS_PROVIDER_TYPE_BYTEPLUS}-cdn`, "common.provider.byteplus.cdn", "/imgs/providers/byteplus.svg"], - [`${ACCESS_PROVIDER_TYPE_KUBERNETES}-secret`, "common.provider.kubernetes.secret", "/imgs/providers/kubernetes.svg"], + [`${ACCESS_PROVIDER_LOCAL}`, "common.provider.local", "/imgs/providers/local.svg"], + [`${ACCESS_PROVIDER_SSH}`, "common.provider.ssh", "/imgs/providers/ssh.svg"], + [`${ACCESS_PROVIDER_WEBHOOK}`, "common.provider.webhook", "/imgs/providers/webhook.svg"], + [`${ACCESS_PROVIDER_ALIYUN}-oss`, "common.provider.aliyun.oss", "/imgs/providers/aliyun.svg"], + [`${ACCESS_PROVIDER_ALIYUN}-cdn`, "common.provider.aliyun.cdn", "/imgs/providers/aliyun.svg"], + [`${ACCESS_PROVIDER_ALIYUN}-dcdn`, "common.provider.aliyun.dcdn", "/imgs/providers/aliyun.svg"], + [`${ACCESS_PROVIDER_ALIYUN}-clb`, "common.provider.aliyun.clb", "/imgs/providers/aliyun.svg"], + [`${ACCESS_PROVIDER_ALIYUN}-alb`, "common.provider.aliyun.alb", "/imgs/providers/aliyun.svg"], + [`${ACCESS_PROVIDER_ALIYUN}-nlb`, "common.provider.aliyun.nlb", "/imgs/providers/aliyun.svg"], + [`${ACCESS_PROVIDER_TENCENTCLOUD}-cdn`, "common.provider.tencentcloud.cdn", "/imgs/providers/tencentcloud.svg"], + [`${ACCESS_PROVIDER_TENCENTCLOUD}-ecdn`, "common.provider.tencentcloud.ecdn", "/imgs/providers/tencentcloud.svg"], + [`${ACCESS_PROVIDER_TENCENTCLOUD}-clb`, "common.provider.tencentcloud.clb", "/imgs/providers/tencentcloud.svg"], + [`${ACCESS_PROVIDER_TENCENTCLOUD}-cos`, "common.provider.tencentcloud.cos", "/imgs/providers/tencentcloud.svg"], + [`${ACCESS_PROVIDER_TENCENTCLOUD}-eo`, "common.provider.tencentcloud.eo", "/imgs/providers/tencentcloud.svg"], + [`${ACCESS_PROVIDER_HUAWEICLOUD}-cdn`, "common.provider.huaweicloud.cdn", "/imgs/providers/huaweicloud.svg"], + [`${ACCESS_PROVIDER_HUAWEICLOUD}-elb`, "common.provider.huaweicloud.elb", "/imgs/providers/huaweicloud.svg"], + [`${ACCESS_PROVIDER_BAIDUCLOUD}-cdn`, "common.provider.baiducloud.cdn", "/imgs/providers/baiducloud.svg"], + [`${ACCESS_PROVIDER_VOLCENGINE}-cdn`, "common.provider.volcengine.cdn", "/imgs/providers/volcengine.svg"], + [`${ACCESS_PROVIDER_VOLCENGINE}-live`, "common.provider.volcengine.live", "/imgs/providers/volcengine.svg"], + [`${ACCESS_PROVIDER_QINIU}-cdn`, "common.provider.qiniu.cdn", "/imgs/providers/qiniu.svg"], + [`${ACCESS_PROVIDER_DOGECLOUD}-cdn`, "common.provider.dogecloud.cdn", "/imgs/providers/dogecloud.svg"], + [`${ACCESS_PROVIDER_BYTEPLUS}-cdn`, "common.provider.byteplus.cdn", "/imgs/providers/byteplus.svg"], + [`${ACCESS_PROVIDER_KUBERNETES}-secret`, "common.provider.kubernetes.secret", "/imgs/providers/kubernetes.svg"], ]; export const deployTargetsMap: Map = new Map( diff --git a/ui/src/i18n/locales/en/nls.common.json b/ui/src/i18n/locales/en/nls.common.json index 3356ff58..aab8b37d 100644 --- a/ui/src/i18n/locales/en/nls.common.json +++ b/ui/src/i18n/locales/en/nls.common.json @@ -11,13 +11,6 @@ "common.button.save": "Save", "common.button.submit": "Submit", - "common.text.domain": "Domain", - "common.text.domain.empty": "No Domain", - "common.text.ip": "IP Address", - "common.text.ip.empty": "No IP address", - "common.text.dns": "Domain Name Server", - "common.text.dns.empty": "No DNS", - "common.text.ca": "Certificate Authority", "common.text.copied": "Copied", "common.text.nodata": "No data available", "common.text.operation_succeeded": "Operation succeeded", @@ -30,18 +23,12 @@ "common.menu.logout": "Logout", "common.menu.document": "Document", - "common.pagination.next": "Next", - "common.pagination.prev": "Previous", - "common.pagination.more": "More pages", - "common.theme.light": "Light", "common.theme.dark": "Dark", "common.theme.system": "System", "common.errmsg.string_max": "Please enter no more than {{max}} characters", - "common.errmsg.email_empty": "Please enter email", "common.errmsg.email_invalid": "Please enter a valid email address", - "common.errmsg.email_duplicate": "Email already exists", "common.errmsg.domain_invalid": "Please enter domain", "common.errmsg.host_invalid": "Please enter a valid domain name or IP", "common.errmsg.port_invalid": "Please enter a valid port", diff --git a/ui/src/i18n/locales/zh/nls.common.json b/ui/src/i18n/locales/zh/nls.common.json index 30140399..44d4e2ea 100644 --- a/ui/src/i18n/locales/zh/nls.common.json +++ b/ui/src/i18n/locales/zh/nls.common.json @@ -11,13 +11,6 @@ "common.button.save": "保存", "common.button.submit": "提交", - "common.text.domain": "域名", - "common.text.domain.empty": "无域名", - "common.text.ip": "IP 地址", - "common.text.ip.empty": "无 IP 地址", - "common.text.dns": "DNS(域名服务器)", - "common.text.dns.empty": "无 DNS 地址", - "common.text.ca": "CA(证书颁发机构)", "common.text.copied": "已复制", "common.text.nodata": "暂无数据", "common.text.operation_succeeded": "操作成功", @@ -30,18 +23,12 @@ "common.menu.logout": "退出登录", "common.menu.document": "文档", - "common.pagination.next": "下一页", - "common.pagination.prev": "上一页", - "common.pagination.more": "更多", - "common.theme.light": "浅色", "common.theme.dark": "暗黑", "common.theme.system": "跟随系统", "common.errmsg.string_max": "请输入不超过 {{max}} 个字符", - "common.errmsg.email_empty": "请输入邮箱", "common.errmsg.email_invalid": "请输入正确的邮箱", - "common.errmsg.email_duplicate": "邮箱已存在", "common.errmsg.domain_invalid": "请输入正确的域名", "common.errmsg.host_invalid": "请输入正确的域名或 IP 地址", "common.errmsg.port_invalid": "请输入正确的端口号",