platform: modularize api/gui, add docs-tests-web foundation, and refresh root config
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
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))
|
||||
}
|
||||
Reference in New Issue
Block a user