91 lines
2.2 KiB
Go
91 lines
2.2 KiB
Go
package app
|
|
|
|
import (
|
|
"os"
|
|
appcli "selective-vpn-api/app/cli"
|
|
)
|
|
|
|
// EN: Application entrypoint and process bootstrap.
|
|
// EN: This file wires CLI modes and delegates API runtime bootstrap.
|
|
// RU: Точка входа приложения и bootstrap процесса.
|
|
// RU: Этот файл связывает CLI-режимы и делегирует запуск API-сервера.
|
|
func Run() {
|
|
if code, handled := runLegacyCLIMode(os.Args[1:]); handled {
|
|
if code != 0 {
|
|
os.Exit(code)
|
|
}
|
|
return
|
|
}
|
|
RunAPIServer()
|
|
}
|
|
|
|
// RunAPIServer starts the HTTP/SSE API server mode.
|
|
func RunAPIServer() {
|
|
runAPIServerAtAddr("127.0.0.1:8080")
|
|
}
|
|
|
|
// RunRoutesUpdateCLI executes one-shot routes update mode.
|
|
func RunRoutesUpdateCLI(args []string) int {
|
|
return appcli.RunRoutesUpdate(args, appcli.RoutesUpdateDeps{
|
|
LockFile: lockFile,
|
|
Update: func(iface string) (bool, string) {
|
|
res := routesUpdate(iface)
|
|
return res.OK, res.Message
|
|
},
|
|
Stdout: os.Stdout,
|
|
Stderr: os.Stderr,
|
|
})
|
|
}
|
|
|
|
// RunRoutesClearCLI executes one-shot routes clear mode.
|
|
func RunRoutesClearCLI(args []string) int {
|
|
return appcli.RunRoutesClear(args, appcli.RoutesClearDeps{
|
|
Clear: func() (bool, string) {
|
|
res := routesClear()
|
|
return res.OK, res.Message
|
|
},
|
|
Stdout: os.Stdout,
|
|
Stderr: os.Stderr,
|
|
})
|
|
}
|
|
|
|
// RunAutoloopCLI executes autoloop mode.
|
|
func RunAutoloopCLI(args []string) int {
|
|
return appcli.RunAutoloop(args, appcli.AutoloopDeps{
|
|
StateDirDefault: stateDir,
|
|
ResolveIface: func(flagIface string) string {
|
|
resolvedIface := normalizePreferredIface(flagIface)
|
|
if resolvedIface == "" {
|
|
resolvedIface, _ = resolveTrafficIface(loadTrafficModeState().PreferredIface)
|
|
}
|
|
return resolvedIface
|
|
},
|
|
Run: func(params appcli.AutoloopParams) {
|
|
runAutoloop(
|
|
params.Iface,
|
|
params.Table,
|
|
params.MTU,
|
|
params.StateDir,
|
|
params.DefaultLocation,
|
|
)
|
|
},
|
|
Stderr: os.Stderr,
|
|
})
|
|
}
|
|
|
|
func runLegacyCLIMode(args []string) (int, bool) {
|
|
if len(args) == 0 {
|
|
return 0, false
|
|
}
|
|
switch args[0] {
|
|
case "routes-update", "-routes-update":
|
|
return RunRoutesUpdateCLI(args[1:]), true
|
|
case "routes-clear":
|
|
return RunRoutesClearCLI(args[1:]), true
|
|
case "autoloop":
|
|
return RunAutoloopCLI(args[1:]), true
|
|
default:
|
|
return 0, false
|
|
}
|
|
}
|