diff --git a/internal/applicant/applicant.go b/internal/applicant/applicant.go index 3a3998ce..ecb5218e 100644 --- a/internal/applicant/applicant.go +++ b/internal/applicant/applicant.go @@ -54,7 +54,7 @@ func NewWithWorkflowNode(config ApplicantWithWorkflowNodeConfig) (Applicant, err options := &applicantProviderOptions{ Domains: sliceutil.Filter(strings.Split(nodeConfig.Domains, ";"), func(s string) bool { return s != "" }), ContactEmail: nodeConfig.ContactEmail, - Provider: domain.AcmeDns01ProviderType(nodeConfig.Provider), + Provider: domain.ACMEDns01ProviderType(nodeConfig.Provider), ProviderAccessConfig: make(map[string]any), ProviderExtendedConfig: nodeConfig.ProviderConfig, CAProvider: domain.CAProviderType(nodeConfig.CAProvider), diff --git a/internal/applicant/providers.go b/internal/applicant/providers.go index b0fc7299..c54d1fe2 100644 --- a/internal/applicant/providers.go +++ b/internal/applicant/providers.go @@ -41,7 +41,7 @@ import ( type applicantProviderOptions struct { Domains []string ContactEmail string - Provider domain.AcmeDns01ProviderType + Provider domain.ACMEDns01ProviderType ProviderAccessConfig map[string]any ProviderExtendedConfig map[string]any CAProvider domain.CAProviderType @@ -62,7 +62,7 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi NOTICE: If you add new constant, please keep ASCII order. */ switch options.Provider { - case domain.AcmeDns01ProviderTypeACMEHttpReq: + case domain.ACMEDns01ProviderTypeACMEHttpReq: { access := domain.AccessConfigForACMEHttpReq{} if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil { @@ -79,7 +79,7 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi return applicant, err } - case domain.AcmeDns01ProviderTypeAliyun, domain.AcmeDns01ProviderTypeAliyunDNS: + case domain.ACMEDns01ProviderTypeAliyun, domain.ACMEDns01ProviderTypeAliyunDNS: { access := domain.AccessConfigForAliyun{} if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil { @@ -95,7 +95,7 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi return applicant, err } - case domain.AcmeDns01ProviderTypeAWS, domain.AcmeDns01ProviderTypeAWSRoute53: + case domain.ACMEDns01ProviderTypeAWS, domain.ACMEDns01ProviderTypeAWSRoute53: { access := domain.AccessConfigForAWS{} if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil { @@ -113,7 +113,7 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi return applicant, err } - case domain.AcmeDns01ProviderTypeAzure, domain.AcmeDns01ProviderTypeAzureDNS: + case domain.ACMEDns01ProviderTypeAzure, domain.ACMEDns01ProviderTypeAzureDNS: { access := domain.AccessConfigForAzure{} if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil { @@ -131,7 +131,7 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi return applicant, err } - case domain.AcmeDns01ProviderTypeBaiduCloud, domain.AcmeDns01ProviderTypeBaiduCloudDNS: + case domain.ACMEDns01ProviderTypeBaiduCloud, domain.ACMEDns01ProviderTypeBaiduCloudDNS: { access := domain.AccessConfigForBaiduCloud{} if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil { @@ -147,7 +147,7 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi return applicant, err } - case domain.AcmeDns01ProviderTypeBunny: + case domain.ACMEDns01ProviderTypeBunny: { access := domain.AccessConfigForBunny{} if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil { @@ -162,7 +162,7 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi return applicant, err } - case domain.AcmeDns01ProviderTypeCloudflare: + case domain.ACMEDns01ProviderTypeCloudflare: { access := domain.AccessConfigForCloudflare{} if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil { @@ -178,7 +178,7 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi return applicant, err } - case domain.AcmeDns01ProviderTypeClouDNS: + case domain.ACMEDns01ProviderTypeClouDNS: { access := domain.AccessConfigForClouDNS{} if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil { @@ -194,7 +194,7 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi return applicant, err } - case domain.AcmeDns01ProviderTypeCMCCCloud: + case domain.ACMEDns01ProviderTypeCMCCCloud: { access := domain.AccessConfigForCMCCCloud{} if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil { @@ -210,7 +210,7 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi return applicant, err } - case domain.AcmeDns01ProviderTypeDeSEC: + case domain.ACMEDns01ProviderTypeDeSEC: { access := domain.AccessConfigForDeSEC{} if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil { @@ -225,7 +225,7 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi return applicant, err } - case domain.AcmeDns01ProviderTypeDNSLA: + case domain.ACMEDns01ProviderTypeDNSLA: { access := domain.AccessConfigForDNSLA{} if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil { @@ -241,7 +241,7 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi return applicant, err } - case domain.AcmeDns01ProviderTypeDynv6: + case domain.ACMEDns01ProviderTypeDynv6: { access := domain.AccessConfigForDynv6{} if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil { @@ -256,7 +256,7 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi return applicant, err } - case domain.AcmeDns01ProviderTypeGcore: + case domain.ACMEDns01ProviderTypeGcore: { access := domain.AccessConfigForGcore{} if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil { @@ -271,7 +271,7 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi return applicant, err } - case domain.AcmeDns01ProviderTypeGname: + case domain.ACMEDns01ProviderTypeGname: { access := domain.AccessConfigForGname{} if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil { @@ -287,7 +287,7 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi return applicant, err } - case domain.AcmeDns01ProviderTypeGoDaddy: + case domain.ACMEDns01ProviderTypeGoDaddy: { access := domain.AccessConfigForGoDaddy{} if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil { @@ -303,7 +303,7 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi return applicant, err } - case domain.AcmeDns01ProviderTypeHuaweiCloud, domain.AcmeDns01ProviderTypeHuaweiCloudDNS: + case domain.ACMEDns01ProviderTypeHuaweiCloud, domain.ACMEDns01ProviderTypeHuaweiCloudDNS: { access := domain.AccessConfigForHuaweiCloud{} if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil { @@ -320,7 +320,7 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi return applicant, err } - case domain.AcmeDns01ProviderTypeJDCloud, domain.AcmeDns01ProviderTypeJDCloudDNS: + case domain.ACMEDns01ProviderTypeJDCloud, domain.ACMEDns01ProviderTypeJDCloudDNS: { access := domain.AccessConfigForJDCloud{} if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil { @@ -337,7 +337,7 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi return applicant, err } - case domain.AcmeDns01ProviderTypeNamecheap: + case domain.ACMEDns01ProviderTypeNamecheap: { access := domain.AccessConfigForNamecheap{} if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil { @@ -353,7 +353,7 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi return applicant, err } - case domain.AcmeDns01ProviderTypeNameDotCom: + case domain.ACMEDns01ProviderTypeNameDotCom: { access := domain.AccessConfigForNameDotCom{} if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil { @@ -369,7 +369,7 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi return applicant, err } - case domain.AcmeDns01ProviderTypeNameSilo: + case domain.ACMEDns01ProviderTypeNameSilo: { access := domain.AccessConfigForNameSilo{} if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil { @@ -384,7 +384,7 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi return applicant, err } - case domain.AcmeDns01ProviderTypeNS1: + case domain.ACMEDns01ProviderTypeNS1: { access := domain.AccessConfigForNS1{} if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil { @@ -399,7 +399,7 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi return applicant, err } - case domain.AcmeDns01ProviderTypePorkbun: + case domain.ACMEDns01ProviderTypePorkbun: { access := domain.AccessConfigForPorkbun{} if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil { @@ -415,7 +415,7 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi return applicant, err } - case domain.AcmeDns01ProviderTypePowerDNS: + case domain.ACMEDns01ProviderTypePowerDNS: { access := domain.AccessConfigForPowerDNS{} if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil { @@ -431,7 +431,7 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi return applicant, err } - case domain.AcmeDns01ProviderTypeRainYun: + case domain.ACMEDns01ProviderTypeRainYun: { access := domain.AccessConfigForRainYun{} if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil { @@ -446,7 +446,7 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi return applicant, err } - case domain.AcmeDns01ProviderTypeTencentCloud, domain.AcmeDns01ProviderTypeTencentCloudDNS, domain.AcmeDns01ProviderTypeTencentCloudEO: + case domain.ACMEDns01ProviderTypeTencentCloud, domain.ACMEDns01ProviderTypeTencentCloudDNS, domain.ACMEDns01ProviderTypeTencentCloudEO: { access := domain.AccessConfigForTencentCloud{} if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil { @@ -454,7 +454,7 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi } switch options.Provider { - case domain.AcmeDns01ProviderTypeTencentCloud, domain.AcmeDns01ProviderTypeTencentCloudDNS: + case domain.ACMEDns01ProviderTypeTencentCloud, domain.ACMEDns01ProviderTypeTencentCloudDNS: applicant, err := pTencentCloud.NewChallengeProvider(&pTencentCloud.ChallengeProviderConfig{ SecretId: access.SecretId, SecretKey: access.SecretKey, @@ -463,7 +463,7 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi }) return applicant, err - case domain.AcmeDns01ProviderTypeTencentCloudEO: + case domain.ACMEDns01ProviderTypeTencentCloudEO: applicant, err := pTencentCloudEO.NewChallengeProvider(&pTencentCloudEO.ChallengeProviderConfig{ SecretId: access.SecretId, SecretKey: access.SecretKey, @@ -478,7 +478,7 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi } } - case domain.AcmeDns01ProviderTypeVercel: + case domain.ACMEDns01ProviderTypeVercel: { access := domain.AccessConfigForVercel{} if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil { @@ -494,7 +494,7 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi return applicant, err } - case domain.AcmeDns01ProviderTypeVolcEngine, domain.AcmeDns01ProviderTypeVolcEngineDNS: + case domain.ACMEDns01ProviderTypeVolcEngine, domain.ACMEDns01ProviderTypeVolcEngineDNS: { access := domain.AccessConfigForVolcEngine{} if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil { @@ -510,7 +510,7 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi return applicant, err } - case domain.AcmeDns01ProviderTypeWestcn: + case domain.ACMEDns01ProviderTypeWestcn: { access := domain.AccessConfigForWestcn{} if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil { diff --git a/internal/domain/access.go b/internal/domain/access.go index fdceae48..1fdea54d 100644 --- a/internal/domain/access.go +++ b/internal/domain/access.go @@ -116,6 +116,16 @@ type AccessConfigForEdgio struct { ClientSecret string `json:"clientSecret"` } +type AccessConfigForEmail struct { + SmtpHost string `json:"smtpHost"` + SmtpPort int32 `json:"smtpPort"` + SmtpTls bool `json:"smtpTls"` + Username string `json:"username"` + Password string `json:"password"` + DefaultSenderAddress string `json:"defaultSenderAddress,omitempty"` + DefaultReceiverAddress string `json:"defaultReceiverAddress,omitempty"` +} + type AccessConfigForGcore struct { ApiToken string `json:"apiToken"` } @@ -149,6 +159,13 @@ type AccessConfigForKubernetes struct { KubeConfig string `json:"kubeConfig,omitempty"` } +type AccessConfigForMattermost struct { + ServerUrl string `json:"serverUrl"` + Username string `json:"username"` + Password string `json:"password"` + DefaultChannelId string `json:"defaultChannelId,omitempty"` +} + type AccessConfigForNamecheap struct { Username string `json:"username"` ApiKey string `json:"apiKey"` @@ -206,6 +223,11 @@ type AccessConfigForSSLCom struct { EabHmacKey string `json:"eabHmacKey"` } +type AccessConfigForTelegram struct { + BotToken string `json:"botToken"` + DefaultChatId int64 `json:"defaultChatId,omitempty"` +} + type AccessConfigForTencentCloud struct { SecretId string `json:"secretId"` SecretKey string `json:"secretKey"` diff --git a/internal/domain/provider.go b/internal/domain/provider.go index 71404fb2..ca9fb9df 100644 --- a/internal/domain/provider.go +++ b/internal/domain/provider.go @@ -33,6 +33,7 @@ const ( AccessProviderTypeDogeCloud = AccessProviderType("dogecloud") AccessProviderTypeDynv6 = AccessProviderType("dynv6") AccessProviderTypeEdgio = AccessProviderType("edgio") + AccessProviderTypeEmail = AccessProviderType("email") AccessProviderTypeFastly = AccessProviderType("fastly") // Fastly(预留) AccessProviderTypeGname = AccessProviderType("gname") AccessProviderTypeGcore = AccessProviderType("gcore") @@ -45,6 +46,7 @@ const ( AccessProviderTypeLetsEncrypt = AccessProviderType("letsencrypt") AccessProviderTypeLetsEncryptStaging = AccessProviderType("letsencryptstaging") AccessProviderTypeLocal = AccessProviderType("local") + AccessProviderTypeMattermost = AccessProviderType("mattermost") AccessProviderTypeNamecheap = AccessProviderType("namecheap") AccessProviderTypeNameDotCom = AccessProviderType("namedotcom") AccessProviderTypeNameSilo = AccessProviderType("namesilo") @@ -57,6 +59,7 @@ const ( AccessProviderTypeSafeLine = AccessProviderType("safeline") AccessProviderTypeSSH = AccessProviderType("ssh") AccessProviderTypeSSLCOM = AccessProviderType("sslcom") + AccessProviderTypeTelegram = AccessProviderType("telegram") AccessProviderTypeTencentCloud = AccessProviderType("tencentcloud") AccessProviderTypeUCloud = AccessProviderType("ucloud") AccessProviderTypeUpyun = AccessProviderType("upyun") @@ -86,7 +89,7 @@ const ( CAProviderTypeZeroSSL = CAProviderType(AccessProviderTypeZeroSSL) ) -type AcmeDns01ProviderType string +type ACMEDns01ProviderType string /* ACME DNS-01 提供商常量值。 @@ -96,43 +99,43 @@ ACME DNS-01 提供商常量值。 NOTICE: If you add new constant, please keep ASCII order. */ const ( - AcmeDns01ProviderTypeACMEHttpReq = AcmeDns01ProviderType(AccessProviderTypeACMEHttpReq) - AcmeDns01ProviderTypeAliyun = AcmeDns01ProviderType(AccessProviderTypeAliyun) // 兼容旧值,等同于 [AcmeDns01ProviderTypeAliyunDNS] - AcmeDns01ProviderTypeAliyunDNS = AcmeDns01ProviderType(AccessProviderTypeAliyun + "-dns") - AcmeDns01ProviderTypeAWS = AcmeDns01ProviderType(AccessProviderTypeAWS) // 兼容旧值,等同于 [AcmeDns01ProviderTypeAWSRoute53] - AcmeDns01ProviderTypeAWSRoute53 = AcmeDns01ProviderType(AccessProviderTypeAWS + "-route53") - AcmeDns01ProviderTypeAzure = AcmeDns01ProviderType(AccessProviderTypeAzure) // 兼容旧值,等同于 [AcmeDns01ProviderTypeAzure] - AcmeDns01ProviderTypeAzureDNS = AcmeDns01ProviderType(AccessProviderTypeAzure + "-dns") - AcmeDns01ProviderTypeBaiduCloud = AcmeDns01ProviderType(AccessProviderTypeBaiduCloud) // 兼容旧值,等同于 [AcmeDns01ProviderTypeBaiduCloudDNS] - AcmeDns01ProviderTypeBaiduCloudDNS = AcmeDns01ProviderType(AccessProviderTypeBaiduCloud + "-dns") - AcmeDns01ProviderTypeBunny = AcmeDns01ProviderType(AccessProviderTypeBunny) - AcmeDns01ProviderTypeCloudflare = AcmeDns01ProviderType(AccessProviderTypeCloudflare) - AcmeDns01ProviderTypeClouDNS = AcmeDns01ProviderType(AccessProviderTypeClouDNS) - AcmeDns01ProviderTypeCMCCCloud = AcmeDns01ProviderType(AccessProviderTypeCMCCCloud) - AcmeDns01ProviderTypeDeSEC = AcmeDns01ProviderType(AccessProviderTypeDeSEC) - AcmeDns01ProviderTypeDNSLA = AcmeDns01ProviderType(AccessProviderTypeDNSLA) - AcmeDns01ProviderTypeDynv6 = AcmeDns01ProviderType(AccessProviderTypeDynv6) - AcmeDns01ProviderTypeGcore = AcmeDns01ProviderType(AccessProviderTypeGcore) - AcmeDns01ProviderTypeGname = AcmeDns01ProviderType(AccessProviderTypeGname) - AcmeDns01ProviderTypeGoDaddy = AcmeDns01ProviderType(AccessProviderTypeGoDaddy) - AcmeDns01ProviderTypeHuaweiCloud = AcmeDns01ProviderType(AccessProviderTypeHuaweiCloud) // 兼容旧值,等同于 [AcmeDns01ProviderTypeHuaweiCloudDNS] - AcmeDns01ProviderTypeHuaweiCloudDNS = AcmeDns01ProviderType(AccessProviderTypeHuaweiCloud + "-dns") - AcmeDns01ProviderTypeJDCloud = AcmeDns01ProviderType(AccessProviderTypeJDCloud) // 兼容旧值,等同于 [AcmeDns01ProviderTypeJDCloudDNS] - AcmeDns01ProviderTypeJDCloudDNS = AcmeDns01ProviderType(AccessProviderTypeJDCloud + "-dns") - AcmeDns01ProviderTypeNamecheap = AcmeDns01ProviderType(AccessProviderTypeNamecheap) - AcmeDns01ProviderTypeNameDotCom = AcmeDns01ProviderType(AccessProviderTypeNameDotCom) - AcmeDns01ProviderTypeNameSilo = AcmeDns01ProviderType(AccessProviderTypeNameSilo) - AcmeDns01ProviderTypeNS1 = AcmeDns01ProviderType(AccessProviderTypeNS1) - AcmeDns01ProviderTypePorkbun = AcmeDns01ProviderType(AccessProviderTypePorkbun) - AcmeDns01ProviderTypePowerDNS = AcmeDns01ProviderType(AccessProviderTypePowerDNS) - AcmeDns01ProviderTypeRainYun = AcmeDns01ProviderType(AccessProviderTypeRainYun) - AcmeDns01ProviderTypeTencentCloud = AcmeDns01ProviderType(AccessProviderTypeTencentCloud) // 兼容旧值,等同于 [AcmeDns01ProviderTypeTencentCloudDNS] - AcmeDns01ProviderTypeTencentCloudDNS = AcmeDns01ProviderType(AccessProviderTypeTencentCloud + "-dns") - AcmeDns01ProviderTypeTencentCloudEO = AcmeDns01ProviderType(AccessProviderTypeTencentCloud + "-eo") - AcmeDns01ProviderTypeVercel = AcmeDns01ProviderType(AccessProviderTypeVercel) - AcmeDns01ProviderTypeVolcEngine = AcmeDns01ProviderType(AccessProviderTypeVolcEngine) // 兼容旧值,等同于 [AcmeDns01ProviderTypeVolcEngineDNS] - AcmeDns01ProviderTypeVolcEngineDNS = AcmeDns01ProviderType(AccessProviderTypeVolcEngine + "-dns") - AcmeDns01ProviderTypeWestcn = AcmeDns01ProviderType(AccessProviderTypeWestcn) + ACMEDns01ProviderTypeACMEHttpReq = ACMEDns01ProviderType(AccessProviderTypeACMEHttpReq) + ACMEDns01ProviderTypeAliyun = ACMEDns01ProviderType(AccessProviderTypeAliyun) // 兼容旧值,等同于 [ACMEDns01ProviderTypeAliyunDNS] + ACMEDns01ProviderTypeAliyunDNS = ACMEDns01ProviderType(AccessProviderTypeAliyun + "-dns") + ACMEDns01ProviderTypeAWS = ACMEDns01ProviderType(AccessProviderTypeAWS) // 兼容旧值,等同于 [ACMEDns01ProviderTypeAWSRoute53] + ACMEDns01ProviderTypeAWSRoute53 = ACMEDns01ProviderType(AccessProviderTypeAWS + "-route53") + ACMEDns01ProviderTypeAzure = ACMEDns01ProviderType(AccessProviderTypeAzure) // 兼容旧值,等同于 [ACMEDns01ProviderTypeAzure] + ACMEDns01ProviderTypeAzureDNS = ACMEDns01ProviderType(AccessProviderTypeAzure + "-dns") + ACMEDns01ProviderTypeBaiduCloud = ACMEDns01ProviderType(AccessProviderTypeBaiduCloud) // 兼容旧值,等同于 [ACMEDns01ProviderTypeBaiduCloudDNS] + ACMEDns01ProviderTypeBaiduCloudDNS = ACMEDns01ProviderType(AccessProviderTypeBaiduCloud + "-dns") + ACMEDns01ProviderTypeBunny = ACMEDns01ProviderType(AccessProviderTypeBunny) + ACMEDns01ProviderTypeCloudflare = ACMEDns01ProviderType(AccessProviderTypeCloudflare) + ACMEDns01ProviderTypeClouDNS = ACMEDns01ProviderType(AccessProviderTypeClouDNS) + ACMEDns01ProviderTypeCMCCCloud = ACMEDns01ProviderType(AccessProviderTypeCMCCCloud) + ACMEDns01ProviderTypeDeSEC = ACMEDns01ProviderType(AccessProviderTypeDeSEC) + ACMEDns01ProviderTypeDNSLA = ACMEDns01ProviderType(AccessProviderTypeDNSLA) + ACMEDns01ProviderTypeDynv6 = ACMEDns01ProviderType(AccessProviderTypeDynv6) + ACMEDns01ProviderTypeGcore = ACMEDns01ProviderType(AccessProviderTypeGcore) + ACMEDns01ProviderTypeGname = ACMEDns01ProviderType(AccessProviderTypeGname) + ACMEDns01ProviderTypeGoDaddy = ACMEDns01ProviderType(AccessProviderTypeGoDaddy) + ACMEDns01ProviderTypeHuaweiCloud = ACMEDns01ProviderType(AccessProviderTypeHuaweiCloud) // 兼容旧值,等同于 [ACMEDns01ProviderTypeHuaweiCloudDNS] + ACMEDns01ProviderTypeHuaweiCloudDNS = ACMEDns01ProviderType(AccessProviderTypeHuaweiCloud + "-dns") + ACMEDns01ProviderTypeJDCloud = ACMEDns01ProviderType(AccessProviderTypeJDCloud) // 兼容旧值,等同于 [ACMEDns01ProviderTypeJDCloudDNS] + ACMEDns01ProviderTypeJDCloudDNS = ACMEDns01ProviderType(AccessProviderTypeJDCloud + "-dns") + ACMEDns01ProviderTypeNamecheap = ACMEDns01ProviderType(AccessProviderTypeNamecheap) + ACMEDns01ProviderTypeNameDotCom = ACMEDns01ProviderType(AccessProviderTypeNameDotCom) + ACMEDns01ProviderTypeNameSilo = ACMEDns01ProviderType(AccessProviderTypeNameSilo) + ACMEDns01ProviderTypeNS1 = ACMEDns01ProviderType(AccessProviderTypeNS1) + ACMEDns01ProviderTypePorkbun = ACMEDns01ProviderType(AccessProviderTypePorkbun) + ACMEDns01ProviderTypePowerDNS = ACMEDns01ProviderType(AccessProviderTypePowerDNS) + ACMEDns01ProviderTypeRainYun = ACMEDns01ProviderType(AccessProviderTypeRainYun) + ACMEDns01ProviderTypeTencentCloud = ACMEDns01ProviderType(AccessProviderTypeTencentCloud) // 兼容旧值,等同于 [ACMEDns01ProviderTypeTencentCloudDNS] + ACMEDns01ProviderTypeTencentCloudDNS = ACMEDns01ProviderType(AccessProviderTypeTencentCloud + "-dns") + ACMEDns01ProviderTypeTencentCloudEO = ACMEDns01ProviderType(AccessProviderTypeTencentCloud + "-eo") + ACMEDns01ProviderTypeVercel = ACMEDns01ProviderType(AccessProviderTypeVercel) + ACMEDns01ProviderTypeVolcEngine = ACMEDns01ProviderType(AccessProviderTypeVolcEngine) // 兼容旧值,等同于 [ACMEDns01ProviderTypeVolcEngineDNS] + ACMEDns01ProviderTypeVolcEngineDNS = ACMEDns01ProviderType(AccessProviderTypeVolcEngine + "-dns") + ACMEDns01ProviderTypeWestcn = ACMEDns01ProviderType(AccessProviderTypeWestcn) ) type DeploymentProviderType string @@ -231,5 +234,8 @@ type NotificationProviderType string NOTICE: If you add new constant, please keep ASCII order. */ const ( - NotificationProviderTypeWebhook = NotificationProviderType(AccessProviderTypeWebhook) + NotificationProviderTypeEmail = NotificationProviderType(AccessProviderTypeEmail) + NotificationProviderTypeMattermost = NotificationProviderType(AccessProviderTypeMattermost) + NotificationProviderTypeTelegram = NotificationProviderType(AccessProviderTypeTelegram) + NotificationProviderTypeWebhook = NotificationProviderType(AccessProviderTypeWebhook) ) diff --git a/internal/notify/providers_deprecated.go b/internal/notify/providers_deprecated.go index 31e0071b..d554da0d 100644 --- a/internal/notify/providers_deprecated.go +++ b/internal/notify/providers_deprecated.go @@ -43,7 +43,7 @@ func createNotifierProviderUseGlobalSettings(channel domain.NotifyChannelType, c return pEmail.NewNotifier(&pEmail.NotifierConfig{ SmtpHost: maputil.GetString(channelConfig, "smtpHost"), SmtpPort: maputil.GetInt32(channelConfig, "smtpPort"), - SmtpTLS: maputil.GetOrDefaultBool(channelConfig, "smtpTLS", true), + SmtpTls: maputil.GetOrDefaultBool(channelConfig, "smtpTLS", true), Username: maputil.GetOrDefaultString(channelConfig, "username", maputil.GetString(channelConfig, "senderAddress")), Password: maputil.GetString(channelConfig, "password"), SenderAddress: maputil.GetString(channelConfig, "senderAddress"), @@ -88,7 +88,7 @@ func createNotifierProviderUseGlobalSettings(channel domain.NotifyChannelType, c case domain.NotifyChannelTypeTelegram: return pTelegram.NewNotifier(&pTelegram.NotifierConfig{ - ApiToken: maputil.GetString(channelConfig, "apiToken"), + BotToken: maputil.GetString(channelConfig, "apiToken"), ChatId: maputil.GetInt64(channelConfig, "chatId"), }) diff --git a/internal/pkg/core/notifier/providers/email/email.go b/internal/pkg/core/notifier/providers/email/email.go index d16603fa..0e78ba04 100644 --- a/internal/pkg/core/notifier/providers/email/email.go +++ b/internal/pkg/core/notifier/providers/email/email.go @@ -19,7 +19,7 @@ type NotifierConfig struct { // 零值时根据是否启用 TLS 决定。 SmtpPort int32 `json:"smtpPort"` // 是否启用 TLS。 - SmtpTLS bool `json:"smtpTLS"` + SmtpTls bool `json:"smtpTls"` // 用户名。 Username string `json:"username"` // 密码。 @@ -64,7 +64,7 @@ func (n *NotifierProvider) Notify(ctx context.Context, subject string, message s var smtpAddr string if n.config.SmtpPort == 0 { - if n.config.SmtpTLS { + if n.config.SmtpTls { smtpAddr = fmt.Sprintf("%s:465", n.config.SmtpHost) } else { smtpAddr = fmt.Sprintf("%s:25", n.config.SmtpHost) @@ -74,7 +74,7 @@ func (n *NotifierProvider) Notify(ctx context.Context, subject string, message s } var yak *mailyak.MailYak - if n.config.SmtpTLS { + if n.config.SmtpTls { yak, err = mailyak.NewWithTLS(smtpAddr, smtpAuth, newTlsConfig()) if err != nil { return nil, err diff --git a/internal/pkg/core/notifier/providers/email/email_test.go b/internal/pkg/core/notifier/providers/email/email_test.go index 1828a674..30bfba07 100644 --- a/internal/pkg/core/notifier/providers/email/email_test.go +++ b/internal/pkg/core/notifier/providers/email/email_test.go @@ -67,7 +67,7 @@ func TestNotify(t *testing.T) { notifier, err := provider.NewNotifier(&provider.NotifierConfig{ SmtpHost: fSmtpHost, SmtpPort: int32(fSmtpPort), - SmtpTLS: fSmtpTLS, + SmtpTls: fSmtpTLS, Username: fUsername, Password: fPassword, SenderAddress: fSenderAddress, diff --git a/internal/pkg/core/notifier/providers/mattermost/mattermost.go b/internal/pkg/core/notifier/providers/mattermost/mattermost.go index c6ed748d..397864e9 100644 --- a/internal/pkg/core/notifier/providers/mattermost/mattermost.go +++ b/internal/pkg/core/notifier/providers/mattermost/mattermost.go @@ -7,20 +7,21 @@ import ( "io" "log/slog" "net/http" + "strings" "github.com/nikoksr/notify/service/mattermost" "github.com/usual2970/certimate/internal/pkg/core/notifier" ) type NotifierConfig struct { - // Mattermost 服务地址。 + // 服务地址。 ServerUrl string `json:"serverUrl"` - // 频道ID - ChannelId string `json:"channelId"` - // 用户名 + // 用户名。 Username string `json:"username"` - // 密码 + // 密码。 Password string `json:"password"` + // 频道 ID。 + ChannelId string `json:"channelId"` } type NotifierProvider struct { @@ -50,7 +51,7 @@ func (n *NotifierProvider) WithLogger(logger *slog.Logger) notifier.Notifier { } func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (res *notifier.NotifyResult, err error) { - srv := mattermost.New(n.config.ServerUrl) + srv := mattermost.New(strings.TrimRight(n.config.ServerUrl, "/")) if err := srv.LoginWithCredentials(ctx, n.config.Username, n.config.Password); err != nil { return nil, err diff --git a/internal/pkg/core/notifier/providers/telegram/telegram.go b/internal/pkg/core/notifier/providers/telegram/telegram.go index 631369e6..7bcfe8e6 100644 --- a/internal/pkg/core/notifier/providers/telegram/telegram.go +++ b/internal/pkg/core/notifier/providers/telegram/telegram.go @@ -10,8 +10,8 @@ import ( ) type NotifierConfig struct { - // Telegram API Token。 - ApiToken string `json:"apiToken"` + // Telegram Bot API Token。 + BotToken string `json:"botToken"` // Telegram Chat ID。 ChatId int64 `json:"chatId"` } @@ -43,7 +43,7 @@ func (n *NotifierProvider) WithLogger(logger *slog.Logger) notifier.Notifier { } func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (res *notifier.NotifyResult, err error) { - srv, err := telegram.New(n.config.ApiToken) + srv, err := telegram.New(n.config.BotToken) if err != nil { return nil, err } diff --git a/internal/pkg/core/notifier/providers/telegram/telegram_test.go b/internal/pkg/core/notifier/providers/telegram/telegram_test.go index 8a83fa4b..e9a7d10b 100644 --- a/internal/pkg/core/notifier/providers/telegram/telegram_test.go +++ b/internal/pkg/core/notifier/providers/telegram/telegram_test.go @@ -45,7 +45,7 @@ func TestNotify(t *testing.T) { }, "\n")) notifier, err := provider.NewNotifier(&provider.NotifierConfig{ - ApiToken: fApiToken, + BotToken: fApiToken, ChatId: fChartId, }) if err != nil { diff --git a/ui/src/components/provider/AcmeDns01ProviderPicker.tsx b/ui/src/components/provider/ACMEDns01ProviderPicker.tsx similarity index 91% rename from ui/src/components/provider/AcmeDns01ProviderPicker.tsx rename to ui/src/components/provider/ACMEDns01ProviderPicker.tsx index 570c5d14..7f99cf6a 100644 --- a/ui/src/components/provider/AcmeDns01ProviderPicker.tsx +++ b/ui/src/components/provider/ACMEDns01ProviderPicker.tsx @@ -5,7 +5,7 @@ import { Avatar, Card, Col, Empty, Flex, Input, type InputRef, Row, Typography } import Show from "@/components/Show"; import { acmeDns01ProvidersMap } from "@/domain/provider"; -export type AcmeDns01ProviderPickerProps = { +export type ACMEDns01ProviderPickerProps = { className?: string; style?: React.CSSProperties; autoFocus?: boolean; @@ -13,7 +13,7 @@ export type AcmeDns01ProviderPickerProps = { onSelect?: (value: string) => void; }; -const AcmeDns01ProviderPicker = ({ className, style, autoFocus, placeholder, onSelect }: AcmeDns01ProviderPickerProps) => { +const ACMEDns01ProviderPicker = ({ className, style, autoFocus, placeholder, onSelect }: ACMEDns01ProviderPickerProps) => { const { t } = useTranslation(); const [keyword, setKeyword] = useState(); @@ -72,4 +72,4 @@ const AcmeDns01ProviderPicker = ({ className, style, autoFocus, placeholder, onS ); }; -export default memo(AcmeDns01ProviderPicker); +export default memo(ACMEDns01ProviderPicker); diff --git a/ui/src/components/provider/AcmeDns01ProviderSelect.tsx b/ui/src/components/provider/ACMEDns01ProviderSelect.tsx similarity index 84% rename from ui/src/components/provider/AcmeDns01ProviderSelect.tsx rename to ui/src/components/provider/ACMEDns01ProviderSelect.tsx index a2a2217a..b03adf7b 100644 --- a/ui/src/components/provider/AcmeDns01ProviderSelect.tsx +++ b/ui/src/components/provider/ACMEDns01ProviderSelect.tsx @@ -2,19 +2,19 @@ import { memo, useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { Avatar, Select, type SelectProps, Space, Typography } from "antd"; -import { type AcmeDns01Provider, acmeDns01ProvidersMap } from "@/domain/provider"; +import { type ACMEDns01Provider, acmeDns01ProvidersMap } from "@/domain/provider"; -export type AcmeDns01ProviderSelectProps = Omit< +export type ACMEDns01ProviderSelectProps = Omit< SelectProps, "filterOption" | "filterSort" | "labelRender" | "options" | "optionFilterProp" | "optionLabelProp" | "optionRender" > & { - filter?: (record: AcmeDns01Provider) => boolean; + filter?: (record: ACMEDns01Provider) => boolean; }; -const AcmeDns01ProviderSelect = ({ filter, ...props }: AcmeDns01ProviderSelectProps) => { +const ACMEDns01ProviderSelect = ({ filter, ...props }: ACMEDns01ProviderSelectProps) => { const { t } = useTranslation(); - const [options, setOptions] = useState>([]); + const [options, setOptions] = useState>([]); useEffect(() => { const allItems = Array.from(acmeDns01ProvidersMap.values()); const filteredItems = filter != null ? allItems.filter(filter) : allItems; @@ -64,4 +64,4 @@ const AcmeDns01ProviderSelect = ({ filter, ...props }: AcmeDns01ProviderSelectPr ); }; -export default memo(AcmeDns01ProviderSelect); +export default memo(ACMEDns01ProviderSelect); diff --git a/ui/src/components/workflow/node/ApplyNodeConfigForm.tsx b/ui/src/components/workflow/node/ApplyNodeConfigForm.tsx index c198b61c..08d2ffc5 100644 --- a/ui/src/components/workflow/node/ApplyNodeConfigForm.tsx +++ b/ui/src/components/workflow/node/ApplyNodeConfigForm.tsx @@ -31,7 +31,7 @@ import AccessEditModal from "@/components/access/AccessEditModal"; import AccessSelect from "@/components/access/AccessSelect"; import ModalForm from "@/components/ModalForm"; import MultipleInput from "@/components/MultipleInput"; -import AcmeDns01ProviderSelect from "@/components/provider/AcmeDns01ProviderSelect"; +import ACMEDns01ProviderSelect from "@/components/provider/ACMEDns01ProviderSelect"; import CAProviderSelect from "@/components/provider/CAProviderSelect"; import Show from "@/components/Show"; import { ACCESS_USAGES, ACME_DNS01_PROVIDERS, accessProvidersMap, acmeDns01ProvidersMap, caProvidersMap } from "@/domain/provider"; @@ -328,7 +328,7 @@ const ApplyNodeConfigForm = forwardRef