diff --git a/pkg/api/domain/link.go b/pkg/api/domain/link.go index ca56b90..053a3f7 100644 --- a/pkg/api/domain/link.go +++ b/pkg/api/domain/link.go @@ -1,11 +1,12 @@ package domain import ( - "net/http" - "log" - "strconv" - "github.com/Ennovar/gPanel/pkg/database" "encoding/json" + "log" + "net/http" + "strconv" + + "github.com/Ennovar/gPanel/pkg/database" ) func Link(res http.ResponseWriter, req *http.Request, logger *log.Logger, PublicPort int) bool { @@ -27,7 +28,7 @@ func Link(res http.ResponseWriter, req *http.Request, logger *log.Logger, Public return false } - ds, err := database.Open("server/"+database.DB_DOMAINS) + ds, err := database.Open("server/" + database.DB_DOMAINS) if err != nil || ds == nil { logger.Println(req.URL.Path + "::" + err.Error()) http.Error(res, err.Error(), http.StatusInternalServerError) diff --git a/pkg/api/domain/unlink.go b/pkg/api/domain/unlink.go index b621909..245cc5e 100644 --- a/pkg/api/domain/unlink.go +++ b/pkg/api/domain/unlink.go @@ -1,10 +1,11 @@ package domain import ( - "net/http" - "log" - "strconv" "encoding/json" + "log" + "net/http" + "strconv" + "github.com/Ennovar/gPanel/pkg/database" ) @@ -26,7 +27,7 @@ func Unlink(res http.ResponseWriter, req *http.Request, logger *log.Logger) bool return false } - ds, err := database.Open("server/"+database.DB_DOMAINS) + ds, err := database.Open("server/" + database.DB_DOMAINS) if err != nil || ds == nil { logger.Println(req.URL.Path + "::" + err.Error()) http.Error(res, err.Error(), http.StatusInternalServerError) diff --git a/pkg/gpaccount/toggle.go b/pkg/gpaccount/toggle.go index 9cdecba..6179fef 100644 --- a/pkg/gpaccount/toggle.go +++ b/pkg/gpaccount/toggle.go @@ -4,7 +4,7 @@ package gpaccount import ( "context" "errors" - "fmt" + "log" ) func (con *Controller) Start() error { @@ -14,7 +14,7 @@ func (con *Controller) Start() error { con.Status = 1 go httpserver.ListenAndServe() - fmt.Printf("gPanel account server now serving out of %s%s on port %d\n", con.Directory, con.DocumentRoot, con.Port) + log.Printf("gPanel account server now serving out of %s%s on port %d\n", con.Directory, con.DocumentRoot, con.Port) return nil } @@ -28,7 +28,7 @@ func (con *Controller) Stop(graceful bool) error { return nil } - fmt.Printf("Graceful shutdown failed attempting forced: %v\n", err) + log.Printf("Graceful shutdown failed attempting forced: %v\n", err) } if err := httpserver.Close(); err != nil { diff --git a/pkg/public/toggle.go b/pkg/public/toggle.go index 608ede1..fa39307 100644 --- a/pkg/public/toggle.go +++ b/pkg/public/toggle.go @@ -4,7 +4,7 @@ package public import ( "context" "errors" - "fmt" + "log" ) // Start function starts listening on the public server @@ -15,7 +15,7 @@ func (con *Controller) Start() error { con.Status = 1 go server.ListenAndServe() - fmt.Printf("Public server now serving out of %s on port %d\n", con.Directory+"public/", con.Port) + log.Printf("Public server now serving out of %s on port %d\n", con.Directory+"public/", con.Port) return nil } @@ -30,7 +30,7 @@ func (con *Controller) Stop(graceful bool) error { return nil } - fmt.Printf("Graceful shutdown failed attempting forced: %v\n", err) + log.Printf("Graceful shutdown failed attempting forced: %v\n", err) } if err := server.Close(); err != nil { diff --git a/pkg/router/router.go b/pkg/router/router.go index d4f9da2..060ba51 100644 --- a/pkg/router/router.go +++ b/pkg/router/router.go @@ -2,10 +2,13 @@ package router import ( "net/http" + "net/http/httputil" "strconv" "time" + "github.com/Ennovar/gPanel/pkg/database" - "net/http/httputil" + "log" + "sync" ) type Router struct { @@ -13,7 +16,9 @@ type Router struct { } var server http.Server -var domainToPort = make(map[string]int) +var domainToPort map[string]int + +var mutex = &sync.Mutex{} func RefreshMap() bool { ds, err := database.Open("server/" + database.DB_DOMAINS) @@ -29,9 +34,12 @@ func RefreshMap() bool { return false } + mutex.Lock() + domainToPort = make(map[string]int) for k, v := range client { domainToPort[k] = v.PublicPort } + mutex.Unlock() return true } @@ -46,13 +54,13 @@ func New() *Router { } server = http.Server{ - Addr: "localhost:" + strconv.Itoa(r.Port), - Handler: &httputil.ReverseProxy{ + Addr: "localhost:" + strconv.Itoa(r.Port), + Handler: &httputil.ReverseProxy{ Director: func(req *http.Request) { if d, ok := domainToPort[req.Host]; ok { req.Header.Set("Host", req.Host) req.URL.Scheme = "http" - req.URL.Host = "127.0.0.1:"+strconv.Itoa(d) + req.URL.Host = "127.0.0.1:" + strconv.Itoa(d) } }, }, @@ -61,9 +69,25 @@ func New() *Router { MaxHeaderBytes: 0, } + // Start scheduled map refresher + ticker := time.NewTicker(15 * time.Second) + go func() { + for { + select { + case <- ticker.C: + if !RefreshMap() { + ticker.Stop() + log.Fatal("Error refreshing domain/bundle pairing for router") + return + } + log.Print("Successfully refreshed domain/bundle pairing map") + } + } + }() + return &r } func (r *Router) Start() { go server.ListenAndServe() -} \ No newline at end of file +}