aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-04-04 01:44:47 +0200
committerDimitri Sokolyuk <demon@dim13.org>2016-04-04 01:44:47 +0200
commit7f73b75d3ff5b3af9a9719adfaa777358b191c03 (patch)
treeb2b703aaa87a625ce215bfbb0204a84c947ec476
parent1c32da0018346b076eaa3fcfc45dcd07f4b9b227 (diff)
Remove parsed parts from Route entry
-rw-r--r--route.go6
-rw-r--r--server.go34
2 files changed, 17 insertions, 23 deletions
diff --git a/route.go b/route.go
index c6794cb..7e54650 100644
--- a/route.go
+++ b/route.go
@@ -16,16 +16,14 @@ type Routes map[string]Route
type Route struct {
Host, Upstream string
Cert, Key []byte
- serverName *url.URL
- upstream *url.URL
certificate *tls.Certificate
}
func (r Route) String() string {
if r.certificate != nil {
- return fmt.Sprintf("%v → %v with TLS", r.serverName, r.upstream)
+ return fmt.Sprintf("%v → %v with TLS", r.Host, r.Upstream)
}
- return fmt.Sprintf("%v → %v", r.serverName, r.upstream)
+ return fmt.Sprintf("%v → %v", r.Host, r.Upstream)
}
// GetCertificate returns certificate for SNI negotiation
diff --git a/server.go b/server.go
index 88f712d..694751c 100644
--- a/server.go
+++ b/server.go
@@ -50,22 +50,17 @@ func (s *Server) UpdateMux() error {
wwwMux := http.NewServeMux()
tlsMux := http.NewServeMux()
for host, r := range s.Routes {
- var err error
- if r.serverName == nil {
- r.serverName, err = url.Parse(r.Host)
- if err != nil {
- return err
- }
- s.Routes[host] = r
+ serverName, err := url.Parse(r.Host)
+ if err != nil {
+ return err
}
- if r.upstream == nil {
- r.upstream, err = url.Parse(r.Upstream)
- if err != nil {
- return err
- }
- s.Routes[host] = r
+
+ upstream, err := url.Parse(r.Upstream)
+ if err != nil {
+ return err
}
- if r.certificate == nil && r.serverName.Scheme == "https" {
+
+ if r.certificate == nil && serverName.Scheme == "https" {
cert, err := tls.X509KeyPair(r.Cert, r.Key)
if err != nil {
return err
@@ -73,17 +68,18 @@ func (s *Server) UpdateMux() error {
r.certificate = &cert
s.Routes[host] = r
}
- switch r.serverName.Scheme {
+
+ switch serverName.Scheme {
case "http", "":
- wwwMux.Handle(host, NewReverseProxy(r.upstream))
+ wwwMux.Handle(host, NewReverseProxy(upstream))
case "https":
wwwMux.Handle(host, NewRedirect("https://"+host))
- tlsMux.Handle(host, NewReverseProxy(r.upstream))
+ tlsMux.Handle(host, NewReverseProxy(upstream))
case "ws":
- wwwMux.Handle(host, NewWebSocketProxy(r.upstream))
+ wwwMux.Handle(host, NewWebSocketProxy(upstream))
case "wss":
wwwMux.Handle(host, NewRedirect("wss://"+host))
- tlsMux.Handle(host, NewWebSocketProxy(r.upstream))
+ tlsMux.Handle(host, NewWebSocketProxy(upstream))
}
}
s.wwwServer.Handler = wwwMux