1
0
mirror of https://github.com/go-acme/lego.git synced 2024-12-23 09:15:11 +02:00
lego/internal/dns/descriptors/descriptors.go

77 lines
1.6 KiB
Go

package descriptors
import (
"os"
"path/filepath"
"github.com/BurntSushi/toml"
)
type Providers struct {
Providers []Provider
}
type Provider struct {
Name string // Real name of the DNS provider
Code string // DNS code
Aliases []string // DNS code aliases (for compatibility/deprecation)
Since string // First lego version
URL string // DNS provider URL
Description string // Provider summary
Example string // CLI example
Configuration *Configuration // Environment variables
Links *Links // Links
Additional string // Extra documentation
GeneratedFrom string // Source file
}
type Configuration struct {
Credentials map[string]string
Additional map[string]string
}
type Links struct {
API string
GoClient string
}
// GetProviderInformation extract provider information from TOML description files.
func GetProviderInformation(root string) (*Providers, error) {
models := &Providers{}
err := filepath.Walk(filepath.Join(root, "providers", "dns"), walker(root, models))
if err != nil {
return nil, err
}
return models, nil
}
func walker(root string, prs *Providers) func(string, os.FileInfo, error) error {
return func(path string, _ os.FileInfo, err error) error {
if err != nil {
return err
}
if filepath.Ext(path) != ".toml" {
return nil
}
m := Provider{}
m.GeneratedFrom, err = filepath.Rel(root, path)
if err != nil {
return err
}
_, err = toml.DecodeFile(path, &m)
if err != nil {
return err
}
prs.Providers = append(prs.Providers, m)
return nil
}
}