Files
SafelineAPI/internal/class/DNSProvider/Objects.go
2025-10-30 18:26:02 +08:00

44 lines
1.1 KiB
Go

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
}