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)) }