aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-04-03 20:08:36 +0200
committerDimitri Sokolyuk <demon@dim13.org>2016-04-03 20:08:36 +0200
commitd548648e11fd5e1a3a43877b53e63325be1bc159 (patch)
tree0f2b8806a20130369c81a7b8e5d1600a803555dc
parentfa3272edca41882027f6b22f70bc61d9a182bd0d (diff)
NewRoute
-rw-r--r--route.go28
-rw-r--r--rpc.go29
-rw-r--r--server.go1
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