aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-03-24 18:10:40 +0100
committerDimitri Sokolyuk <demon@dim13.org>2016-03-24 18:10:40 +0100
commitaee5dfa31c94b7b637121e9fcd5816ce193246f1 (patch)
treec563ed59134856e5623fe90c8a6ec399f7939eff
parent17b0a372a3d59de5dc8f6a59c7268a3846d88515 (diff)
Clenup
-rw-r--r--goxyctl/main.go74
1 files 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)
}
}