aboutsummaryrefslogtreecommitdiff
path: root/cmd/goxyctl/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/goxyctl/main.go')
-rw-r--r--cmd/goxyctl/main.go74
1 files changed, 74 insertions, 0 deletions
diff --git a/cmd/goxyctl/main.go b/cmd/goxyctl/main.go
new file mode 100644
index 0000000..dd7c86d
--- /dev/null
+++ b/cmd/goxyctl/main.go
@@ -0,0 +1,74 @@
+package main
+
+import (
+ "flag"
+ "io/ioutil"
+ "log"
+
+ "dim13.org/goxy"
+)
+
+var (
+ rpcserver = flag.String("server", ":http-alt", "RPC Server")
+ host = flag.String("host", "", "Host URL")
+ upstream = flag.String("up", "", "Upstream URL")
+ keyfile = flag.String("key", "", "TLS Key file")
+ certfile = flag.String("cert", "", "TLS Cert file")
+ remove = flag.Bool("remove", false, "Remove host")
+)
+
+func getEntry() (e goxy.Entry, err error) {
+ e.Host = *host
+ e.Upstream = *upstream
+ if *certfile != "" && *keyfile != "" {
+ e.Cert, err = ioutil.ReadFile(*certfile)
+ if err != nil {
+ return
+ }
+ e.Key, err = ioutil.ReadFile(*keyfile)
+ if err != nil {
+ return
+ }
+ }
+ return
+}
+
+func send(server string, e goxy.Entry, del bool) error {
+ client, err := goxy.DialRPC(server)
+ if err != nil {
+ return err
+ }
+ defer client.Close()
+
+ switch {
+ case e.Host != "" && e.Upstream != "":
+ log.Println("Add", e)
+ return client.Call("GoXY.Add", e, nil)
+ case e.Host != "" && del:
+ log.Println("Del", e.Host)
+ return client.Call("GoXY.Del", e.Host, nil)
+ default:
+ var r goxy.Route
+ err := client.Call("GoXY.List", struct{}{}, &r)
+ if err != nil {
+ return err
+ }
+ for k, v := range r {
+ log.Println(k, v)
+ }
+ }
+ return nil
+}
+
+func main() {
+ flag.Parse()
+
+ e, err := getEntry()
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ if err := send(*rpcserver, e, *remove); err != nil {
+ log.Fatal(err)
+ }
+}