aboutsummaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-03-27 20:44:30 +0200
committerDimitri Sokolyuk <demon@dim13.org>2016-03-27 20:44:30 +0200
commit0824f4bcd9a31add8e7cfa1662d2cb40900de073 (patch)
tree63a152cd81992a9815fc8e3f23d873f2c562c505 /cmd
parent24ba33d974cf651df195d2912b00238e6eeb2ed8 (diff)
Encapsulate in package
Diffstat (limited to 'cmd')
-rw-r--r--cmd/goxy/main.go28
-rw-r--r--cmd/goxyctl/main.go73
2 files changed, 101 insertions, 0 deletions
diff --git a/cmd/goxy/main.go b/cmd/goxy/main.go
new file mode 100644
index 0000000..fc122e0
--- /dev/null
+++ b/cmd/goxy/main.go
@@ -0,0 +1,28 @@
+package main
+
+import (
+ "flag"
+ "log"
+ "net/http"
+
+ "dim13.org/goxy"
+
+ _ "net/http/pprof"
+)
+
+var data = flag.String("data", "data/goxy.gob", "persistent storage file")
+
+func main() {
+ flag.Parse()
+
+ server, err := goxy.NewServer(*data)
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ errc := make(chan error, 3)
+ go func() { errc <- server.ListenAndServe() }()
+ go func() { errc <- server.ListenAndServeTLS("", "") }()
+ go func() { errc <- http.ListenAndServe(":http-alt", nil) }()
+ log.Fatal(<-errc)
+}
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)
+ }
+}