aboutsummaryrefslogtreecommitdiff
path: root/goxyctl
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-03-23 16:05:38 +0100
committerDimitri Sokolyuk <demon@dim13.org>2016-03-23 16:05:38 +0100
commit62fa5c31ba39ebf968f98a7ee46525f14c0ea97c (patch)
treead67f424dec70a538635542127e96bb95ffe801a /goxyctl
parent955e9ff0855feeb94d8e83c97362c172ced2c663 (diff)
Rewrite into config-les setup
Diffstat (limited to 'goxyctl')
-rw-r--r--goxyctl/main.go68
1 files changed, 68 insertions, 0 deletions
diff --git a/goxyctl/main.go b/goxyctl/main.go
new file mode 100644
index 0000000..824f892
--- /dev/null
+++ b/goxyctl/main.go
@@ -0,0 +1,68 @@
+package main
+
+import (
+ "crypto/rsa"
+ "crypto/tls"
+ "encoding/gob"
+ "flag"
+ "log"
+ "net/rpc"
+)
+
+var (
+ rpcserver = flag.String("server", ":http-alt", "RPC Server port")
+ servername = flag.String("servername", "", "from")
+ upstream = flag.String("upstream", "", "to")
+ keyfile = flag.String("keyfile", "", "TLS Key file")
+ crtfile = flag.String("crtfile", "", "TLC Crt file")
+ remove = flag.Bool("remove", false, "remove entry")
+)
+
+type Entry struct {
+ ServerName string
+ Upstream string
+ Cert *tls.Certificate
+}
+
+func init() {
+ gob.Register(rsa.PrivateKey{})
+}
+
+func main() {
+ flag.Parse()
+
+ e := Entry{
+ ServerName: *servername,
+ Upstream: *upstream,
+ }
+
+ if *keyfile != "" && *crtfile != "" {
+ crt, err := tls.LoadX509KeyPair(*crtfile, *keyfile)
+ if err != nil {
+ log.Fatal(err)
+ }
+ e.Cert = &crt
+ }
+
+ client, err := rpc.DialHTTP("tcp", *rpcserver)
+ if err != nil {
+ log.Fatal(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)
+ default:
+ var r map[string]Entry
+ err = client.Call("GoXY.List", struct{}{}, &r)
+ for k, v := range r {
+ log.Println(k, v)
+ }
+ }
+ if err != nil {
+ log.Fatal(err)
+ }
+}