44 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package DNSProvider
 | 
						|
 | 
						|
import (
 | 
						|
	"reflect"
 | 
						|
 | 
						|
	"github.com/go-acme/lego/v4/challenge"
 | 
						|
)
 | 
						|
 | 
						|
type Object 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 *Object) 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
 | 
						|
}
 |