aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-03-28 19:49:29 +0200
committerDimitri Sokolyuk <demon@dim13.org>2016-03-28 19:49:29 +0200
commit1c6056b6fcc22e4335683f6e0f28b7d73b2013e9 (patch)
tree3e779bb0606ac7877027552a896c65918ac8e44f
parentdbb5e2ce7f1ff71e29d4065957d0ab603d2157c0 (diff)
Cleanup
-rw-r--r--route.go50
-rw-r--r--server.go33
2 files changed, 33 insertions, 50 deletions
diff --git a/route.go b/route.go
index 8f77120..7596023 100644
--- a/route.go
+++ b/route.go
@@ -3,10 +3,6 @@ package goxy
import (
"crypto/tls"
"errors"
- "net/http"
- "net/http/httputil"
- "net/url"
- "strings"
)
// Route defines a set of routes including correspondent TLS certificates
@@ -36,49 +32,3 @@ func (e Entry) String() string {
}
return ret
}
-
-func NewReverseProxy(target *url.URL) *httputil.ReverseProxy {
- director := func(req *http.Request) {
- //log.Println("director", req)
- req.URL.Scheme = target.Scheme
- req.URL.Host = target.Host
- }
- return &httputil.ReverseProxy{Director: director}
-}
-
-// Restore and update routes from in-memory state
-func (s *Server) Restore() error {
- mux := http.NewServeMux()
- for k, v := range s.Route {
- if v.Cert != nil && v.Key != nil {
- cert, err := tls.X509KeyPair(v.Cert, v.Key)
- if err != nil {
- return err
- }
- v.cert = &cert
- s.Route[k] = v
- }
- up, err := url.Parse(v.Upstream)
- if err != nil {
- return err
- }
- if !strings.Contains(v.ServerName, "/") {
- v.ServerName += "/"
- }
- //mux.Handle(v.ServerName, httputil.NewSingleHostReverseProxy(up))
- switch up.Scheme {
- case "ws":
- //log.Println("ws", v.ServerName, up)
- mux.Handle(v.ServerName, NewWebSocketProxy(up))
- default:
- //log.Println("http", v.ServerName, up)
- mux.Handle(v.ServerName, NewReverseProxy(up))
- }
- mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
- //log.Printf("%+v\n", r)
- http.Error(w, "gone", http.StatusGone)
- })
- }
- s.Server.Handler = mux
- return nil
-}
diff --git a/server.go b/server.go
index 0f0bdad..437df4d 100644
--- a/server.go
+++ b/server.go
@@ -5,7 +5,10 @@ import (
"encoding/gob"
"log"
"net/http"
+ "net/http/httputil"
+ "net/url"
"os"
+ "strings"
)
type Server struct {
@@ -54,6 +57,36 @@ func (s *Server) Load() error {
return nil
}
+// Restore and update routes from in-memory state
+func (s *Server) Restore() error {
+ mux := http.NewServeMux()
+ for k, v := range s.Route {
+ if v.Cert != nil && v.Key != nil {
+ cert, err := tls.X509KeyPair(v.Cert, v.Key)
+ if err != nil {
+ return err
+ }
+ v.cert = &cert
+ s.Route[k] = v
+ }
+ up, err := url.Parse(v.Upstream)
+ if err != nil {
+ return err
+ }
+ if !strings.Contains(v.ServerName, "/") {
+ v.ServerName += "/"
+ }
+ switch up.Scheme {
+ case "ws":
+ mux.Handle(v.ServerName, httputil.NewSingleHostReverseProxy(up))
+ default:
+ mux.Handle(v.ServerName, NewReverseProxy(up))
+ }
+ }
+ s.Server.Handler = mux
+ return nil
+}
+
func (s *Server) Start() <-chan error {
errc := make(chan error, 3)
go func() { errc <- s.ListenAndServe() }()