baseline: api+gui traffic mode + candidates picker

Snapshot before app-launcher (cgroup/mark) work; ignore binaries/backups.
This commit is contained in:
beckline
2026-02-14 15:32:25 +03:00
parent 50e2999cad
commit 10a10f44a8
55 changed files with 16488 additions and 0 deletions

View File

@@ -0,0 +1,47 @@
package app
import (
"fmt"
"io/fs"
"os"
)
// ---------------------------------------------------------------------
// seed-файлы и bootstrap
// ---------------------------------------------------------------------
// EN: Bootstrap seed files on first run so the API can start with sane defaults
// EN: even when runtime configuration files do not exist yet.
// RU: Инициализация seed-файлов при первом запуске, чтобы API стартовал
// RU: с корректными значениями по умолчанию при отсутствии runtime-конфигов.
// ---------------------------------------------------------------------
// seed initializer
// ---------------------------------------------------------------------
func ensureSeeds() {
_ = os.MkdirAll(domainDir, 0o755)
_ = os.MkdirAll("/etc/selective-vpn", 0o755)
_ = os.MkdirAll(stateDir, 0o755)
seedFile := func(name string, path string) {
if _, err := os.Stat(path); err == nil {
return
}
data, err := fs.ReadFile(embeddedDomains, "assets/domains/"+name)
if err != nil {
data = []byte{}
}
_ = os.WriteFile(path, data, 0o644)
}
seedFile("bases.txt", domainDir+"/bases.txt")
seedFile("subs.txt", domainDir+"/subs.txt")
seedFile("meta-special.txt", domainDir+"/meta-special.txt")
seedFile("static-ips.txt", staticIPsFile)
if _, err := os.Stat(dnsUpstreamsConf); err != nil {
content := fmt.Sprintf("default %s %s\nmeta %s %s\n", defaultDNS1, defaultDNS2, defaultMeta1, defaultMeta2)
_ = os.WriteFile(dnsUpstreamsConf, []byte(content), 0o644)
}
}