54 lines
1.3 KiB
Go
54 lines
1.3 KiB
Go
package app
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
func saveDNSUpstreamPoolFile(items []DNSUpstreamPoolItem) error {
|
|
state := DNSUpstreamPoolState{Items: normalizeDNSUpstreamPoolItems(items)}
|
|
if err := os.MkdirAll(filepath.Dir(dnsUpstreamPool), 0o755); err != nil {
|
|
return err
|
|
}
|
|
tmp := dnsUpstreamPool + ".tmp"
|
|
b, err := json.MarshalIndent(state, "", " ")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if err := os.WriteFile(tmp, b, 0o644); err != nil {
|
|
return err
|
|
}
|
|
return os.Rename(tmp, dnsUpstreamPool)
|
|
}
|
|
|
|
func loadDNSUpstreamPoolState() []DNSUpstreamPoolItem {
|
|
data, err := os.ReadFile(dnsUpstreamPool)
|
|
if err == nil {
|
|
var st DNSUpstreamPoolState
|
|
if json.Unmarshal(data, &st) == nil {
|
|
items := normalizeDNSUpstreamPoolItems(st.Items)
|
|
if len(items) > 0 {
|
|
return items
|
|
}
|
|
}
|
|
}
|
|
legacy := loadDNSUpstreamsConfFile()
|
|
items := dnsUpstreamPoolFromLegacy(legacy)
|
|
if len(items) > 0 {
|
|
_ = saveDNSUpstreamPoolFile(items)
|
|
}
|
|
return items
|
|
}
|
|
|
|
func saveDNSUpstreamPoolState(items []DNSUpstreamPoolItem) error {
|
|
items = normalizeDNSUpstreamPoolItems(items)
|
|
if len(items) == 0 {
|
|
items = dnsUpstreamPoolFromLegacy(loadDNSUpstreamsConfFile())
|
|
}
|
|
if err := saveDNSUpstreamPoolFile(items); err != nil {
|
|
return err
|
|
}
|
|
return saveDNSUpstreamsConfFile(dnsUpstreamPoolToLegacy(items))
|
|
}
|