aboutsummaryrefslogtreecommitdiff
path: root/server.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-04-04 01:33:02 +0200
committerDimitri Sokolyuk <demon@dim13.org>2016-04-04 01:33:02 +0200
commite4324fd473bf878306b3df387bd1bea08cdd604c (patch)
treef3005edbe48d10ed1958d8eef399cc51a0f70a7f /server.go
parentb9b8a680bae0590bfaeb954aee56b2057db41b1a (diff)
kiss
Diffstat (limited to 'server.go')
-rw-r--r--server.go62
1 files changed, 28 insertions, 34 deletions
diff --git a/server.go b/server.go
index e686fe4..64b98ad 100644
--- a/server.go
+++ b/server.go
@@ -10,7 +10,6 @@ import (
type Server struct {
DataFile string
Routes
- Entries
wwwServer http.Server
tlsServer http.Server
rpcServer http.Server
@@ -23,7 +22,6 @@ func NewServer(dataFile, listenWWW, listenTLS, listenRPC string) (*Server, error
server := &Server{
DataFile: dataFile,
Routes: make(Routes),
- Entries: make(Entries),
wwwServer: http.Server{Addr: listenWWW},
tlsServer: http.Server{Addr: listenTLS},
rpcServer: http.Server{Addr: listenRPC},
@@ -52,17 +50,40 @@ func (s *Server) UpdateMux() error {
wwwMux := http.NewServeMux()
tlsMux := http.NewServeMux()
for host, r := range s.Routes {
- switch r.ServerName.Scheme {
+ var err error
+ if r.serverName == nil {
+ r.serverName, err = url.Parse(r.Host)
+ if err != nil {
+ return err
+ }
+ s.Routes[host] = r
+ }
+ if r.upstream == nil {
+ r.upstream, err = url.Parse(r.Upstream)
+ if err != nil {
+ return err
+ }
+ s.Routes[host] = r
+ }
+ if r.serverName.Scheme == "https" {
+ cert, err := tls.X509KeyPair(r.Cert, r.Key)
+ if err != nil {
+ return err
+ }
+ r.certificate = &cert
+ s.Routes[host] = r
+ }
+ switch r.serverName.Scheme {
case "http", "":
- wwwMux.Handle(host, NewReverseProxy(r.Upstream))
+ wwwMux.Handle(host, NewReverseProxy(r.upstream))
case "https":
wwwMux.Handle(host, NewRedirect("https://"+host))
- tlsMux.Handle(host, NewReverseProxy(r.Upstream))
+ tlsMux.Handle(host, NewReverseProxy(r.upstream))
case "ws":
- wwwMux.Handle(host, NewWebSocketProxy(r.Upstream))
+ wwwMux.Handle(host, NewWebSocketProxy(r.upstream))
case "wss":
wwwMux.Handle(host, NewRedirect("wss://"+host))
- tlsMux.Handle(host, NewWebSocketProxy(r.Upstream))
+ tlsMux.Handle(host, NewWebSocketProxy(r.upstream))
}
}
s.wwwServer.Handler = wwwMux
@@ -70,33 +91,6 @@ func (s *Server) UpdateMux() error {
return nil
}
-func (s *Server) AddEntry(e Entry) error {
- r, err := NewRoute(e)
- if err != nil {
- return err
- }
- defer s.Save(s.DataFile)
- host := r.ServerName.Host + r.ServerName.Path
- s.Entries[host] = e
- s.Routes[host] = r
- return s.UpdateMux()
-}
-
-func (s *Server) DelEntry(host string) error {
- h, err := url.Parse(host)
- if err != nil {
- return err
- }
- if h.Path == "" {
- h.Path = "/"
- }
- host = h.Host + h.Path
- defer s.Save(s.DataFile)
- delete(s.Entries, host)
- delete(s.Routes, host)
- return s.UpdateMux()
-}
-
func (s *Server) Start() error {
errc := make(chan error)
go func() { errc <- s.wwwServer.ListenAndServe() }()