From d548648e11fd5e1a3a43877b53e63325be1bc159 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 3 Apr 2016 20:08:36 +0200 Subject: NewRoute --- route.go | 28 ++++++---------------------- rpc.go | 29 ++--------------------------- server.go | 1 + 3 files changed, 9 insertions(+), 49 deletions(-) diff --git a/route.go b/route.go index cc5bc05..a13c111 100644 --- a/route.go +++ b/route.go @@ -2,12 +2,10 @@ package goxy import ( "crypto/tls" - "encoding/json" "errors" "fmt" "net/http" "net/url" - "os" ) // Routes defines a set of routes including correspondent TLS certificates @@ -38,26 +36,6 @@ func (r Routes) GetCertificate(h *tls.ClientHelloInfo) (*tls.Certificate, error) return nil, errors.New("no cert for " + host) } -// Save routes to persistent file -func (r Routes) Save(fname string) error { - fd, err := os.Create(fname) - if err != nil { - return err - } - defer fd.Close() - return json.NewEncoder(fd).Encode(r) -} - -// Load routes from persistent file -func (r *Routes) Load(fname string) error { - fd, err := os.Open(fname) - if err != nil { - return err - } - defer fd.Close() - return json.NewDecoder(fd).Decode(r) -} - func (r Routes) ServeHTTP(w http.ResponseWriter, _ *http.Request) { for _, v := range r { fmt.Fprintln(w, v) @@ -74,6 +52,12 @@ func NewRoute(e Entry) (Route, error) { if err != nil { return fail(err) } + if host.Host == "" || up.Host == "" { + return fail(ErrNoHost) + } + if host.Path == "" { + host.Path = "/" + } r := Route{ ServerName: host, Upstream: up, diff --git a/rpc.go b/rpc.go index a96bb61..29a5a93 100644 --- a/rpc.go +++ b/rpc.go @@ -1,7 +1,6 @@ package goxy import ( - "crypto/tls" "encoding/json" "errors" "fmt" @@ -46,36 +45,12 @@ 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) + r, err := NewRoute(e) 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.Routes[host.Host] = r + s.server.Routes[r.ServerName.Host] = r return s.server.Update() } diff --git a/server.go b/server.go index da541c0..d10c615 100644 --- a/server.go +++ b/server.go @@ -9,6 +9,7 @@ import ( type Server struct { DataFile string Routes + Entries wwwServer http.Server tlsServer http.Server rpcServer http.Server -- cgit v1.2.3