All import paths updated to git.wntrmute.dev/mc/. Bumps mcdsl to v1.2.0. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
mcdslconfig "git.wntrmute.dev/mc/mcdsl/config"
|
|
)
|
|
|
|
// Config is the top-level MCNS configuration.
|
|
type Config struct {
|
|
mcdslconfig.Base
|
|
DNS DNSConfig `toml:"dns"`
|
|
}
|
|
|
|
// DNSConfig holds the DNS server settings.
|
|
type DNSConfig struct {
|
|
ListenAddr string `toml:"listen_addr"`
|
|
Upstreams []string `toml:"upstreams"`
|
|
}
|
|
|
|
// Load reads a TOML config file, applies environment variable overrides
|
|
// (MCNS_ prefix), sets defaults, and validates required fields.
|
|
func Load(path string) (*Config, error) {
|
|
cfg, err := mcdslconfig.Load[Config](path, "MCNS")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Apply DNS defaults.
|
|
if cfg.DNS.ListenAddr == "" {
|
|
cfg.DNS.ListenAddr = ":53"
|
|
}
|
|
if len(cfg.DNS.Upstreams) == 0 {
|
|
cfg.DNS.Upstreams = []string{"1.1.1.1:53", "8.8.8.8:53"}
|
|
}
|
|
|
|
return cfg, nil
|
|
}
|
|
|
|
// Validate implements the mcdsl config.Validator interface.
|
|
func (c *Config) Validate() error {
|
|
if c.Database.Path == "" {
|
|
return fmt.Errorf("database.path is required")
|
|
}
|
|
if c.MCIAS.ServerURL == "" {
|
|
return fmt.Errorf("mcias.server_url is required")
|
|
}
|
|
if c.Server.TLSCert == "" {
|
|
return fmt.Errorf("server.tls_cert is required")
|
|
}
|
|
if c.Server.TLSKey == "" {
|
|
return fmt.Errorf("server.tls_key is required")
|
|
}
|
|
return nil
|
|
}
|