mirror of
https://github.com/donl/gPanel.git
synced 2026-05-26 22:06:36 -06:00
98 lines
1.7 KiB
Go
98 lines
1.7 KiB
Go
package router
|
|
|
|
import (
|
|
"net/http"
|
|
"net/http/httputil"
|
|
"strconv"
|
|
"time"
|
|
|
|
"log"
|
|
"sync"
|
|
|
|
"github.com/kentonh/gPanel/pkg/database"
|
|
)
|
|
|
|
type Router struct {
|
|
InsecurePort int
|
|
SecurePort int
|
|
}
|
|
|
|
var secureServer http.Server
|
|
var insecureServer http.Server
|
|
|
|
var domainToPort map[string]database.Struct_Domain
|
|
var mutex = &sync.Mutex{}
|
|
|
|
func RefreshMap() bool {
|
|
ds, err := database.Open("server/" + database.DB_DOMAINS)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
defer ds.Close()
|
|
|
|
var client map[string]database.Struct_Domain
|
|
|
|
client, err = ds.ListDomains("*")
|
|
if err != nil {
|
|
return false
|
|
}
|
|
|
|
mutex.Lock()
|
|
domainToPort = make(map[string]database.Struct_Domain)
|
|
for k, v := range client {
|
|
domainToPort[k] = v
|
|
}
|
|
mutex.Unlock()
|
|
|
|
return true
|
|
}
|
|
|
|
func New(insecure, secure int) *Router {
|
|
if !RefreshMap() {
|
|
return nil
|
|
}
|
|
|
|
r := Router{
|
|
InsecurePort: insecure,
|
|
SecurePort: secure,
|
|
}
|
|
|
|
insecureServer = http.Server{
|
|
Addr: "localhost:" + strconv.Itoa(r.InsecurePort),
|
|
Handler: &httputil.ReverseProxy{
|
|
Director: proxyDirectorInsecure,
|
|
Transport: customTrip{},
|
|
},
|
|
}
|
|
|
|
secureServer = http.Server{
|
|
Addr: "localhost:" + strconv.Itoa(r.SecurePort),
|
|
Handler: &httputil.ReverseProxy{
|
|
Director: proxyDirectorSecure,
|
|
Transport: customTrip{},
|
|
},
|
|
}
|
|
|
|
// Start scheduled map refresher
|
|
ticker := time.NewTicker(15 * time.Minute)
|
|
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 insecureServer.ListenAndServe()
|
|
go secureServer.ListenAndServe()
|
|
}
|