44 lines
1.1 KiB
Go
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
|
|
}
|