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
 | |
| }
 |