105 lines
3.0 KiB
Go
105 lines
3.0 KiB
Go
package app
|
|
|
|
import dnscfgpkg "selective-vpn-api/app/dnscfg"
|
|
|
|
func dnscfgPoolItemsFromApp(items []DNSUpstreamPoolItem) []dnscfgpkg.UpstreamPoolItem {
|
|
out := make([]dnscfgpkg.UpstreamPoolItem, 0, len(items))
|
|
for _, item := range items {
|
|
out = append(out, dnscfgpkg.UpstreamPoolItem{
|
|
Addr: item.Addr,
|
|
Enabled: item.Enabled,
|
|
})
|
|
}
|
|
return out
|
|
}
|
|
|
|
func dnscfgPoolItemsToApp(items []dnscfgpkg.UpstreamPoolItem) []DNSUpstreamPoolItem {
|
|
out := make([]DNSUpstreamPoolItem, 0, len(items))
|
|
for _, item := range items {
|
|
out = append(out, DNSUpstreamPoolItem{
|
|
Addr: item.Addr,
|
|
Enabled: item.Enabled,
|
|
})
|
|
}
|
|
return out
|
|
}
|
|
|
|
func dnscfgUpstreamsFromApp(cfg DNSUpstreams) dnscfgpkg.Upstreams {
|
|
return dnscfgpkg.Upstreams{
|
|
Default1: cfg.Default1,
|
|
Default2: cfg.Default2,
|
|
Meta1: cfg.Meta1,
|
|
Meta2: cfg.Meta2,
|
|
}
|
|
}
|
|
|
|
func dnscfgUpstreamsToApp(cfg dnscfgpkg.Upstreams) DNSUpstreams {
|
|
return DNSUpstreams{
|
|
Default1: cfg.Default1,
|
|
Default2: cfg.Default2,
|
|
Meta1: cfg.Meta1,
|
|
Meta2: cfg.Meta2,
|
|
}
|
|
}
|
|
|
|
func dnscfgLegacyDefaults() dnscfgpkg.Upstreams {
|
|
return dnscfgpkg.Upstreams{
|
|
Default1: defaultDNS1,
|
|
Default2: defaultDNS2,
|
|
Meta1: defaultMeta1,
|
|
Meta2: defaultMeta2,
|
|
}
|
|
}
|
|
|
|
func normalizeDNSUpstreamPoolItems(items []DNSUpstreamPoolItem) []DNSUpstreamPoolItem {
|
|
return dnscfgPoolItemsToApp(
|
|
dnscfgpkg.NormalizeUpstreamPoolItems(dnscfgPoolItemsFromApp(items), normalizeDNSUpstream),
|
|
)
|
|
}
|
|
|
|
func dnsUpstreamPoolFromLegacy(cfg DNSUpstreams) []DNSUpstreamPoolItem {
|
|
return dnscfgPoolItemsToApp(
|
|
dnscfgpkg.UpstreamPoolFromLegacy(dnscfgUpstreamsFromApp(cfg), normalizeDNSUpstream),
|
|
)
|
|
}
|
|
|
|
func dnsUpstreamPoolToLegacy(items []DNSUpstreamPoolItem) DNSUpstreams {
|
|
return dnscfgUpstreamsToApp(
|
|
dnscfgpkg.UpstreamPoolToLegacy(
|
|
dnscfgPoolItemsFromApp(items),
|
|
dnscfgLegacyDefaults(),
|
|
normalizeDNSUpstream,
|
|
),
|
|
)
|
|
}
|
|
|
|
func loadEnabledDNSUpstreamPool() []string {
|
|
items := loadDNSUpstreamPoolState()
|
|
return uniqueStrings(
|
|
dnscfgpkg.EnabledPool(dnscfgPoolItemsFromApp(items), normalizeDNSUpstream),
|
|
)
|
|
}
|
|
|
|
// ---------------------------------------------------------------------
|
|
// EN: `loadDNSUpstreamsConf` loads dns upstreams conf from storage or config.
|
|
// RU: `loadDNSUpstreamsConf` - загружает dns upstreams conf из хранилища или конфига.
|
|
// ---------------------------------------------------------------------
|
|
func loadDNSUpstreamsConf() DNSUpstreams {
|
|
pool := loadDNSUpstreamPoolState()
|
|
if len(pool) > 0 {
|
|
return dnsUpstreamPoolToLegacy(pool)
|
|
}
|
|
return loadDNSUpstreamsConfFile()
|
|
}
|
|
|
|
// ---------------------------------------------------------------------
|
|
// EN: `saveDNSUpstreamsConf` saves dns upstreams conf to persistent storage.
|
|
// RU: `saveDNSUpstreamsConf` - сохраняет dns upstreams conf в постоянное хранилище.
|
|
// ---------------------------------------------------------------------
|
|
func saveDNSUpstreamsConf(cfg DNSUpstreams) error {
|
|
if err := saveDNSUpstreamsConfFile(cfg); err != nil {
|
|
return err
|
|
}
|
|
return saveDNSUpstreamPoolFile(dnsUpstreamPoolFromLegacy(cfg))
|
|
}
|