diff --git a/cmd/helloserver/gopreload.go b/cmd/helloserver/gopreload.go new file mode 100644 index 0000000..6829ae5 --- /dev/null +++ b/cmd/helloserver/gopreload.go @@ -0,0 +1,9 @@ +// gopreload.go +package main + +/* + This file is separate to make it very easy to both add into an application, but + also very easy to remove. +*/ + +import _ "github.com/Xe/gopreload" diff --git a/plugins/autohttpagent/main.go b/plugins/autohttpagent/main.go new file mode 100644 index 0000000..87ccc4d --- /dev/null +++ b/plugins/autohttpagent/main.go @@ -0,0 +1,59 @@ +package main + +import ( + "crypto/tls" + "log" + "os" + "time" + + "git.xeserv.us/xena/route/lib/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() { + cfg := &tun2.ClientConfig{ + TLSConfig: &tls.Config{}, + ConnType: connMethod, + ServerAddr: serverAddr, + Token: token, + Domain: domain, + BackendURL: backend, + } + + client, _ := tun2.NewClient(cfg) + err := client.Connect() + if err != nil { + ln.Error(err, ln.F{ + "action": "client_running", + }) + + time.Sleep(5 * time.Second) + + doHttpAgent() + } + }() +} + +func init() { + doHttpAgent() +}