From aee5dfa31c94b7b637121e9fcd5816ce193246f1 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Thu, 24 Mar 2016 18:10:40 +0100 Subject: Clenup --- goxyctl/main.go | 74 ++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 47 insertions(+), 27 deletions(-) diff --git a/goxyctl/main.go b/goxyctl/main.go index e999466..f955bc6 100644 --- a/goxyctl/main.go +++ b/goxyctl/main.go @@ -9,11 +9,10 @@ import ( 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") - crtfile = flag.String("cert", "", "TLS Cert file") - remove = flag.Bool("remove", false, "Remove Server") + servername = flag.String("host", "", "ServerName (required)") + upstream = flag.String("upstream", "", "Upstream URL (removes route if emty)") + keyfile = flag.String("key", "", "TLS Key file (requires cert flag)") + certfile = flag.String("cert", "", "TLS Cert file (requires key flag)") ) // Entry contains routing settings @@ -24,43 +23,64 @@ type Entry struct { Key []byte } -func main() { - flag.Parse() - - e := Entry{ - ServerName: *servername, - Upstream: *upstream, +func (e Entry) String() string { + ret := e.ServerName + " → " + e.Upstream + if e.Cert != nil && e.Key != nil { + ret += " with TLS" } + return ret +} - if *keyfile != "" && *crtfile != "" { - var err error - if e.Cert, err = ioutil.ReadFile(*crtfile); err != nil { - log.Fatal(err) - } - if e.Key, err = ioutil.ReadFile(*keyfile); err != nil { - log.Fatal(err) - } +func loadCert(certFile, keyFile string) ([]byte, []byte) { + if certFile == "" || keyFile == "" { + return nil, nil } - - client, err := rpc.DialHTTP("tcp", *rpcserver) + 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 Entry) error { + client, err := rpc.DialHTTP("tcp", server) + if err != nil { + return err + } defer client.Close() switch { case e.ServerName != "" && e.Upstream != "": - err = client.Call("GoXY.Add", e, nil) - case e.ServerName != "" && *remove: - err = client.Call("GoXY.Del", e, nil) + log.Println("Add", e) + return client.Call("GoXY.Add", e, nil) + case e.ServerName != "" && e.Upstream == "": + log.Println("Del", e) + return client.Call("GoXY.Del", e, nil) default: var r []Entry err = client.Call("GoXY.List", struct{}{}, &r) - for _, v := range r { - log.Println(v.ServerName, "→", v.Upstream) + if err != nil { + return err + } + for _, e := range r { + log.Println(e) } } - if err != nil { + return nil +} + +func main() { + var e Entry + flag.Parse() + + e.ServerName, e.Upstream = *servername, *upstream + e.Cert, e.Key = loadCert(*certfile, *keyfile) + + if err := send(*rpcserver, e); err != nil { log.Fatal(err) } } -- cgit v1.2.3