重构项目

This commit is contained in:
2025-10-30 18:26:02 +08:00
parent fbc8bcd089
commit 7e10e2d2da
39 changed files with 728 additions and 464 deletions

View File

@ -0,0 +1,60 @@
package DNSProvider
import (
"github.com/go-acme/lego/v4/challenge"
"github.com/go-acme/lego/v4/providers/dns/alidns"
"github.com/go-acme/lego/v4/providers/dns/dode"
"github.com/go-acme/lego/v4/providers/dns/huaweicloud"
"github.com/go-acme/lego/v4/providers/dns/rainyun"
"github.com/go-acme/lego/v4/providers/dns/tencentcloud"
"github.com/go-acme/lego/v4/providers/dns/westcn"
)
func (tencent TencentCloud) Provider() (challenge.Provider, error) {
cfg := tencentcloud.NewDefaultConfig()
cfg.SecretID = tencent.SecretID
cfg.SecretKey = tencent.SecretKey
p, err := tencentcloud.NewDNSProviderConfig(cfg)
return p, err
}
func (ali AliCloud) Provider() (challenge.Provider, error) {
cfg := alidns.NewDefaultConfig()
cfg.SecurityToken = ali.STSToken
cfg.SecretKey = ali.AccessKeySecret
cfg.RAMRole = ali.RAMRole
cfg.APIKey = ali.AccessKeyId
p, err := alidns.NewDNSProviderConfig(cfg)
return p, err
}
func (huawei HuaweiCloud) Provider() (challenge.Provider, error) {
cfg := huaweicloud.NewDefaultConfig()
cfg.Region = huawei.Region
cfg.AccessKeyID = huawei.AccessKeyId
cfg.SecretAccessKey = huawei.SecretAccessKey
p, err := huaweicloud.NewDNSProviderConfig(cfg)
return p, err
}
func (west WestCN) Provider() (challenge.Provider, error) {
cfg := westcn.NewDefaultConfig()
cfg.Username = west.Username
cfg.Password = west.Password
p, err := westcn.NewDNSProviderConfig(cfg)
return p, err
}
func (rain RainYun) Provider() (challenge.Provider, error) {
cfg := rainyun.NewDefaultConfig()
cfg.APIKey = rain.ApiKey
p, err := rainyun.NewDNSProviderConfig(cfg)
return p, err
}
func (Dode Dode) Provider() (challenge.Provider, error) {
cfg := dode.NewDefaultConfig()
cfg.Token = Dode.Token
p, err := dode.NewDNSProviderConfig(cfg)
return p, err
}

View File

@ -0,0 +1,32 @@
package DNSProvider
type TencentCloud struct {
SecretID string `json:"SecretId,omitempty"`
SecretKey string `json:"SecretKey,omitempty"`
}
type AliCloud struct {
AccessKeyId string `json:"AccessKeyId,omitempty"`
AccessKeySecret string `json:"AccessKeySecret,omitempty"`
RAMRole string `json:"RAMRole,omitempty"`
STSToken string `json:"STSToken,omitempty"`
}
type HuaweiCloud struct {
AccessKeyId string `json:"AccessKeyId,omitempty"`
Region string `json:"Region,omitempty"`
SecretAccessKey string `json:"SecretAccessKey,omitempty"`
}
type WestCN struct {
Username string `json:"Username,omitempty"`
Password string `json:"Password,omitempty"`
}
type RainYun struct {
ApiKey string `json:"ApiKey,omitempty"`
}
type Dode struct {
Token string `json:"Token,omitempty"`
}

View File

@ -0,0 +1,43 @@
package DNSProvider
import (
"reflect"
"github.com/go-acme/lego/v4/challenge"
)
type DNSProvider struct {
TencentCloud TencentCloud `json:"TencentCloud,omitempty"`
AliCloud AliCloud `json:"AliCloud,omitempty"`
HuaweiCloud HuaweiCloud `json:"HuaweiCloud,omitempty"`
WestCN WestCN `json:"WestCN,omitempty"`
RainYun RainYun `json:"RainYun,omitempty"`
Dode Dode `json:"Dode,omitempty"`
}
func (dnsProvider *DNSProvider) Choose() ([]challenge.Provider, []error) {
var Providers []challenge.Provider
var Errors []error
v := reflect.ValueOf(dnsProvider).Elem()
for i := 0; i < v.NumField(); i++ {
field := v.Field(i)
if field.Kind() == reflect.Struct {
for ii := 0; ii < field.NumField(); ii++ {
if field.Field(ii).String() != "" {
method, _ := field.Type().MethodByName("Provider")
results := method.Func.Call([]reflect.Value{field})
err, _ := results[1].Interface().(error)
if err != nil {
Errors = append(Errors, err)
} else {
Providers = append(Providers, results[0].Interface().(challenge.Provider))
}
break
}
}
}
}
return Providers, Errors
}

View File

@ -0,0 +1,9 @@
package DNSProvider
import "github.com/go-acme/lego/v4/challenge"
type Result struct {
Provider challenge.Provider
Error error
}
type Msg map[string]Result