aboutsummaryrefslogtreecommitdiff
path: root/rpc.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-03-31 14:43:29 +0200
committerDimitri Sokolyuk <demon@dim13.org>2016-03-31 14:43:29 +0200
commit7cb7f7d4d90714d50331c68e97fc5169c4f67991 (patch)
tree37f04d81512323ee4aa20262396b7dfe5d6f4c58 /rpc.go
parent56b132f7dbd9668426d934a6feaa70f3252ed040 (diff)
Rewrite Test, pass HTTP
Diffstat (limited to 'rpc.go')
-rw-r--r--rpc.go44
1 files changed, 42 insertions, 2 deletions
diff --git a/rpc.go b/rpc.go
index e6a674d..cd524c9 100644
--- a/rpc.go
+++ b/rpc.go
@@ -1,6 +1,16 @@
package goxy
-import "net/rpc"
+import (
+ "crypto/tls"
+ "errors"
+ "net/rpc"
+ "net/url"
+)
+
+var (
+ ErrNoHost = errors.New("Both Host and Upstream are required")
+ ErrNoCert = errors.New("Certificate and Key are required")
+)
type GoXY struct {
server *Server
@@ -20,8 +30,36 @@ func DialRPC(server string) (*rpc.Client, error) {
// Add adds a new route
func (s *GoXY) Add(e Entry, _ *struct{}) error {
+ host, err := url.Parse(e.Host)
+ if err != nil {
+ return err
+ }
+ up, err := url.Parse(e.Upstream)
+ if err != nil {
+ return err
+ }
+ if host.Host == "" || up.Host == "" {
+ return ErrNoHost
+ }
+ if host.Path == "" {
+ host.Path = "/"
+ }
+ r := route{
+ ServerName: host,
+ Upstream: up,
+ }
+ if host.Scheme == "https" {
+ if e.Cert == nil || e.Key == nil {
+ return ErrNoCert
+ }
+ crt, err := tls.X509KeyPair(e.Cert, e.Key)
+ if err != nil {
+ return err
+ }
+ r.Certificate = &crt
+ }
defer s.server.Save(s.server.DataFile)
- s.server.Route[e.Host] = e
+ s.server.Route[host.Host] = r
return s.server.Update()
}
@@ -32,6 +70,7 @@ func (s *GoXY) Del(host string, _ *struct{}) error {
return s.server.Update()
}
+/*
// Get returns Entry
func (s *GoXY) Get(host string, e *Entry) error {
*e = s.server.Route[host]
@@ -43,3 +82,4 @@ func (s GoXY) List(_ struct{}, r *Route) error {
*r = s.server.Route
return nil
}
+*/