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.go73
1 files changed, 73 insertions, 0 deletions
diff --git a/cmd/goxyctl/main.go b/cmd/goxyctl/main.go
new file mode 100644
index 0000000..1057fd4
--- /dev/null
+++ b/cmd/goxyctl/main.go
@@ -0,0 +1,73 @@
+package main
+
+import (
+ "flag"
+ "io/ioutil"
+ "log"
+ "net/rpc"
+
+ "dim13.org/goxy"
+)
+
+var (
+ rpcserver = flag.String("server", ":http-alt", "RPC Server port")
+ servername = flag.String("host", "", "ServerName")
+ upstream = flag.String("upstream", "", "Upstream URL")
+ keyfile = flag.String("key", "", "TLS Key file")
+ certfile = flag.String("cert", "", "TLS Cert file")
+ remove = flag.Bool("remove", false, "Remove route")
+)
+
+func loadCert(certFile, keyFile string) ([]byte, []byte) {
+ if certFile == "" || keyFile == "" {
+ return nil, nil
+ }
+ cert, err := ioutil.ReadFile(certFile)
+ if err != nil {
+ log.Fatal(err)
+ }
+ key, err := ioutil.ReadFile(keyFile)
+ if err != nil {
+ log.Fatal(err)
+ }
+ return cert, key
+}
+
+func send(server string, e goxy.Entry, del bool) error {
+ client, err := rpc.DialHTTP("tcp", server)
+ if err != nil {
+ return err
+ }
+ defer client.Close()
+
+ switch {
+ case e.ServerName != "" && e.Upstream != "":
+ log.Println("Add", e)
+ return client.Call("GoXY.Add", e, nil)
+ case e.ServerName != "" && del:
+ log.Println("Del", e)
+ return client.Call("GoXY.Del", e, 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() {
+ var e goxy.Entry
+ flag.Parse()
+
+ e.ServerName, e.Upstream = *servername, *upstream
+ e.Cert, e.Key = loadCert(*certfile, *keyfile)
+
+ if err := send(*rpcserver, e, *remove); err != nil {
+ log.Fatal(err)
+ }
+}