MVP including features: * Detect IP change * Configurable/generic external IP provider * Configurable/generic DNS provider * Impl. of plain external IP provider * Impl. of Ionos DNS provider Reviewed-on: #1 Co-authored-by: Timo Behrendt <t.behrendt@t00n.de> Co-committed-by: Timo Behrendt <t.behrendt@t00n.de>
44 lines
936 B
Go
44 lines
936 B
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
|
|
"gopkg.in/yaml.v3"
|
|
)
|
|
|
|
type DomainConfig struct {
|
|
TLD string `yaml:"tld"`
|
|
Subdomains []string `yaml:"subdomains"`
|
|
}
|
|
|
|
type Config struct {
|
|
ExternalIPProvider ExternalIpProviderConfig `yaml:"ip_provider"`
|
|
DNSProvider DNSProviderConfig `yaml:"dns_provider"`
|
|
Domains []DomainConfig `yaml:"domains"`
|
|
CheckInterval string `yaml:"check_interval"`
|
|
}
|
|
|
|
type ExternalIpProviderConfig struct {
|
|
Type string `yaml:"type"`
|
|
ProviderConfig yaml.Node `yaml:"config"`
|
|
}
|
|
|
|
type DNSProviderConfig struct {
|
|
Type string `yaml:"type"`
|
|
ProviderConfig yaml.Node `yaml:"config"`
|
|
}
|
|
|
|
func (c *Config) Load(filePath string) error {
|
|
err := yaml.Unmarshal([]byte(filePath), c)
|
|
if err != nil {
|
|
inputConfig, err := os.ReadFile(filePath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return yaml.Unmarshal(inputConfig, c)
|
|
}
|
|
|
|
return err
|
|
}
|