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,109 @@
package app
import "embed"
// EN: Centralized runtime configuration constants and embedded seed assets used
// EN: across the API server, route updater, VPN helpers, and background workers.
// RU: Централизованные runtime-константы и встроенные seed-ресурсы,
// RU: используемые API-сервером, апдейтером маршрутов, VPN-хелперами и воркерами.
// ---------------------------------------------------------------------
// runtime constants
// ---------------------------------------------------------------------
const (
stateDir = "/var/lib/selective-vpn"
statusFilePath = stateDir + "/status.json"
dnsModePath = stateDir + "/dns-mode.json"
trafficModePath = stateDir + "/traffic-mode.json"
traceLogPath = stateDir + "/trace.log"
smartdnsLogPath = stateDir + "/smartdns.log"
lastIPsPath = stateDir + "/last-ips.txt"
lastIPsMapPath = stateDir + "/last-ips-map.txt"
lastIPsDirect = stateDir + "/last-ips-direct.txt"
lastIPsDyn = stateDir + "/last-ips-dyn.txt"
lastIPsMapDirect = stateDir + "/last-ips-map-direct.txt"
lastIPsMapDyn = stateDir + "/last-ips-map-wildcard.txt"
routesCacheMeta = stateDir + "/routes-clear-cache.json"
routesCacheIPs = stateDir + "/routes-clear-cache-ips.txt"
routesCacheDyn = stateDir + "/routes-clear-cache-ips-dyn.txt"
routesCacheMap = stateDir + "/routes-clear-cache-ips-map.txt"
routesCacheRT = stateDir + "/routes-clear-cache-routes.txt"
autoloopLogPath = stateDir + "/adguard-autoloop.log"
loginStatePath = stateDir + "/adguard-login.json"
dnsUpstreamsPath = stateDir + "/dns-upstreams.json"
smartdnsWLPath = stateDir + "/smartdns-wildcards.json"
smartdnsRTPath = stateDir + "/smartdns-runtime.json"
desiredLocation = stateDir + "/adguard-location.txt"
adgvpnCLI = "/usr/local/bin/adguardvpn-cli-root"
// маршруты v2
routesServiceTemplate = "selective-vpn2@%s.service"
routesTimerTemplate = "selective-vpn2@%s.timer"
routesServiceEnv = "SELECTIVE_VPN_ROUTES_UNIT"
routesTimerEnv = "SELECTIVE_VPN_ROUTES_TIMER"
// юнит автоконнекта AdGuard VPN
adgvpnUnit = "adguardvpn-autoconnect.service"
// доменные файлы / пути
domainDir = "/etc/selective-vpn/domains"
dnsUpstreamsConf = "/etc/selective-vpn/dns-upstreams.conf"
smartdnsDomainsFile = "/etc/selective-vpn/smartdns.conf"
smartdnsMainConfig = "/opt/stack/adguardapp/smartdns.conf"
staticIPsFile = "/etc/selective-vpn/static-ips.txt"
heartbeatFile = stateDir + "/heartbeat"
lockFile = "/run/lock/selective-vpn.lock"
MARK = "0x66"
defaultDNS1 = "94.140.14.14"
defaultDNS2 = "94.140.15.15"
defaultMeta1 = "46.243.231.30"
defaultMeta2 = "46.243.231.41"
smartDNSDefaultAddr = "127.0.0.1#6053"
smartDNSAddrEnv = "SVPN_SMARTDNS_ADDR"
smartDNSForceEnv = "SVPN_SMARTDNS_FORCE"
policyRouteMTU = "1380"
defaultTraceTailMax = 800
defaultEventsCapacity = 512
defaultPollStatusMs = 2000
defaultPollLoginMs = 2500
defaultPollAutoloopMs = 2500
defaultPollSystemdMs = 3000
defaultPollTraceMs = 1500
defaultHeartbeatSeconds = 15
)
// ---------------------------------------------------------------------
// domain expansion lists
// ---------------------------------------------------------------------
// EN: Domain expansion lists used by routes update to build selective targets.
// RU: Списки доменов для расширения селективных целей при обновлении маршрутов.
var googleLikeDomains = []string{
"google.com", "googleapis.com", "gstatic.com", "googleusercontent.com",
"1e100.net", "gvt1.com", "gvt2.com", "gvt3.com",
}
// EN: Extra Twitter subdomains that should be forced through selective routing.
// RU: Дополнительные поддомены Twitter, которые принудительно идут через селективный маршрут.
var twitterSpecial = []string{
"ton", "pay", "caps", "sms", "cert", "tdweb", "p", "ma-0.twimg", "si0.twimg",
"syndication", "tweetdeck", "stream", "userstream", "sitestream", "betastream",
"music", "ms1", "ms3", "urls-real.api", "music-partner", "partner-stream",
}
// ---------------------------------------------------------------------
// embedded assets
// ---------------------------------------------------------------------
// EN: Embedded default domain files used as seed content when runtime files are absent.
// RU: Встроенные файлы доменов по умолчанию для первичного seed, если runtime-файлы отсутствуют.
//
//go:embed assets/domains/*
var embeddedDomains embed.FS