route/plugins/autohttpagent/main.go

64 lines
1.1 KiB
Go

// +build linux
package main
import (
"context"
"crypto/tls"
"log"
"os"
"time"
"git.xeserv.us/xena/route/internal/tun2"
"github.com/Xe/ln"
)
var (
token = mustEnv("ROUTE_TOKEN", "")
domain = mustEnv("ROUTE_DOMAIN", "")
backend = mustEnv("ROUTE_BACKEND", "")
method = mustEnv("ROUTE_METHOD", "")
serverAddr = mustEnv("ROUTE_LOAD_BALANCER", "")
connMethod = mustEnv("ROUTE_METHOD", "tcp")
)
func mustEnv(key string, def string) string {
val := os.Getenv(key)
if val == "" {
log.Printf("autohttpagent: %s not found, things may not work", key)
return def
}
return val
}
func doHTTPAgent() {
go func() {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
cfg := &tun2.ClientConfig{
TLSConfig: &tls.Config{},
ConnType: connMethod,
ServerAddr: serverAddr,
Token: token,
Domain: domain,
BackendURL: backend,
}
client, _ := tun2.NewClient(cfg)
err := client.Connect(ctx)
if err != nil {
ln.Error(ctx, err, ln.Action("client connection error, restarting"))
time.Sleep(5 * time.Second)
doHTTPAgent()
}
}()
}
func init() {
doHTTPAgent()
}