Files
elmprodvpn/selective-vpn-api/app/dns_settings_state_upstreams_conf_store.go

43 lines
1.2 KiB
Go

package app
import (
"encoding/json"
"os"
"path/filepath"
dnscfgpkg "selective-vpn-api/app/dnscfg"
)
func loadDNSUpstreamsConfFile() DNSUpstreams {
data, err := os.ReadFile(dnsUpstreamsConf)
if err != nil {
return dnscfgUpstreamsToApp(dnscfgLegacyDefaults())
}
pkgCfg := dnscfgpkg.ParseUpstreamsConf(string(data), dnscfgLegacyDefaults(), normalizeDNSUpstream)
return dnscfgUpstreamsToApp(pkgCfg)
}
func saveDNSUpstreamsConfFile(cfg DNSUpstreams) error {
pkgCfg := dnscfgpkg.NormalizeUpstreams(dnscfgUpstreamsFromApp(cfg), dnscfgLegacyDefaults(), normalizeDNSUpstream)
cfg = dnscfgUpstreamsToApp(pkgCfg)
content := dnscfgpkg.RenderUpstreamsConf(pkgCfg)
if err := os.MkdirAll(filepath.Dir(dnsUpstreamsConf), 0o755); err != nil {
return err
}
tmp := dnsUpstreamsConf + ".tmp"
if err := os.WriteFile(tmp, []byte(content), 0o644); err != nil {
return err
}
if err := os.Rename(tmp, dnsUpstreamsConf); err != nil {
return err
}
// Legacy JSON mirror for backward compatibility with older UI/runtime bits.
_ = os.MkdirAll(stateDir, 0o755)
if b, err := json.MarshalIndent(cfg, "", " "); err == nil {
_ = os.WriteFile(dnsUpstreamsPath, b, 0o644)
}
return nil
}