From 0824f4bcd9a31add8e7cfa1662d2cb40900de073 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 27 Mar 2016 20:44:30 +0200 Subject: Encapsulate in package --- cmd/goxyctl/main.go | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 cmd/goxyctl/main.go (limited to 'cmd/goxyctl') 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) + } +} -- cgit v1.2.3