platform: modularize api/gui, add docs-tests-web foundation, and refresh root config

This commit is contained in:
beckline
2026-03-26 22:40:54 +03:00
parent 0e2d7f61ea
commit 6a56d734c2
562 changed files with 70151 additions and 16423 deletions

View File

@@ -0,0 +1,104 @@
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))
}