From fcc0b0d089aaa72d4a88947350f5641762f94a36 Mon Sep 17 00:00:00 2001 From: Evgeny Kovalev Date: Mon, 21 Nov 2022 17:45:59 +0300 Subject: [PATCH] refactoring to golden standards --- internal/{Domains => domains}/domains.go | 18 +++++++++++++-- .../healthReporter}/healthReporter.go | 0 .../management}/management.go | 10 +++++---- .../management}/memento.go | 0 .../management}/webserver.go | 22 +++++++++---------- {Proxy => internal/proxy}/proxy.go | 12 ++++++---- Utils/Jsonlog.go => internal/utils/jsonlog.go | 2 +- Utils/Utils.go => internal/utils/utils.go | 2 +- internal/workerpool/task.go | 18 +++++++++++++++ internal/workerpool/worker.go | 6 +++++ shield.go | 15 ++++++++----- static/domains.html | 7 +++--- static/template.html | 2 +- 13 files changed, 81 insertions(+), 33 deletions(-) rename internal/{Domains => domains}/domains.go (68%) rename {HealthReporter => internal/healthReporter}/healthReporter.go (100%) rename {Management => internal/management}/management.go (95%) rename {Management => internal/management}/memento.go (100%) rename {Management => internal/management}/webserver.go (93%) rename {Proxy => internal/proxy}/proxy.go (88%) rename Utils/Jsonlog.go => internal/utils/jsonlog.go (99%) rename Utils/Utils.go => internal/utils/utils.go (95%) create mode 100644 internal/workerpool/task.go create mode 100644 internal/workerpool/worker.go diff --git a/internal/Domains/domains.go b/internal/domains/domains.go similarity index 68% rename from internal/Domains/domains.go rename to internal/domains/domains.go index 3a6789b..e87ca35 100644 --- a/internal/Domains/domains.go +++ b/internal/domains/domains.go @@ -3,14 +3,28 @@ package domains var Names T_Domains type T_Domains struct { - Domains []T_Domain `json:"Domains"` + Domains []T_Domain `json:"Domains"` + Backends []T_Backend `json:"Backedns"` + Hosts []string `json:"Hosts"` } type T_Domain struct { DomainName string `json:"DomainName"` RealServer string `json:"RealServer"` RealPort string `json:"RealPort"` - Status string `json:"Satus"` + + HTTPS bool `json:"HTTPS"` + AddForwarded bool `json:"AddForwarded"` + + KeyFile string `json:"KeyFile"` + CertFile string `json:"CertFile"` + + Status string `json:"Satus"` +} + +type T_Backend struct { + Name string `json:"Name"` + ConnectString string `json:"ConnectString"` } const ( diff --git a/HealthReporter/healthReporter.go b/internal/healthReporter/healthReporter.go similarity index 100% rename from HealthReporter/healthReporter.go rename to internal/healthReporter/healthReporter.go diff --git a/Management/management.go b/internal/management/management.go similarity index 95% rename from Management/management.go rename to internal/management/management.go index 1f38355..31c21c1 100644 --- a/Management/management.go +++ b/internal/management/management.go @@ -10,15 +10,17 @@ import ( "time" "github.com/asaskevich/govalidator" - domains "github.com/cr3a70r/shield/internal/Domains" + "github.com/cr3a70r/shield/internal/domains" ) var Settings T_Management type T_Management struct { - Users []T_User `json:"Users"` - Domains []domains.T_Domain `json:"Names"` - Debug bool `json:"Debug"` + Users []T_User `json:"Users"` + Domains []domains.T_Domain `json:"Names"` + Backends []domains.T_Backend `json:"Backedns"` + Hosts []string `json:"Hosts"` + Debug bool `json:"Debug"` } type T_User struct { diff --git a/Management/memento.go b/internal/management/memento.go similarity index 100% rename from Management/memento.go rename to internal/management/memento.go diff --git a/Management/webserver.go b/internal/management/webserver.go similarity index 93% rename from Management/webserver.go rename to internal/management/webserver.go index b13ab57..0e854e8 100644 --- a/Management/webserver.go +++ b/internal/management/webserver.go @@ -10,11 +10,11 @@ import ( "text/template" "github.com/asaskevich/govalidator" - "github.com/cr3a70r/shield/Utils" + "github.com/cr3a70r/shield/internal/domains" + "github.com/cr3a70r/shield/internal/utils" + "github.com/gorilla/mux" "github.com/gorilla/securecookie" - - domains "github.com/cr3a70r/shield/internal/Domains" ) var hashKey = []byte("ckjstkldx-rlkjcmskl-rdlskjtmd") @@ -41,7 +41,7 @@ func StartWebserver(addr string) { } func health(writer http.ResponseWriter, req *http.Request) { - Utils.RespondJSON("Unknown state", 200, writer) + utils.RespondJSON("Unknown state", 200, writer) } func renderIndex(w http.ResponseWriter, r *http.Request) { @@ -231,17 +231,17 @@ func requireAuth(h http.Handler) http.Handler { func api_domains(w http.ResponseWriter, r *http.Request) { if r.Method == "GET" { - Utils.RespondJSON(Settings.Domains, http.StatusOK, w) + utils.RespondJSON(Settings.Domains, http.StatusOK, w) } if r.Method == "POST" { - var msgJSON Utils.Msg + var msgJSON utils.Msg var req domains.T_Domain err := json.NewDecoder(r.Body).Decode(&req) if err != nil { log.Println("webserver.api_domains: " + err.Error()) msgJSON.Msg = err.Error() - Utils.RespondJSON(msgJSON, http.StatusBadRequest, w) + utils.RespondJSON(msgJSON, http.StatusBadRequest, w) } Settings.AddDomainByDomain(req) @@ -251,11 +251,11 @@ func api_domains(w http.ResponseWriter, r *http.Request) { log.Println("webserver.api_domains: " + err.Error()) msgJSON.Msg = err.Error() - Utils.RespondJSON(msgJSON, http.StatusBadRequest, w) + utils.RespondJSON(msgJSON, http.StatusBadRequest, w) } msgJSON.Msg = "OK" - Utils.RespondJSON(msgJSON, http.StatusOK, w) + utils.RespondJSON(msgJSON, http.StatusOK, w) } } @@ -264,8 +264,8 @@ func api_domain(w http.ResponseWriter, r *http.Request) { httpVars := mux.Vars(r) id := httpVars["id"] - var msgJSON Utils.Msg + var msgJSON utils.Msg msgJSON.Msg = id - Utils.RespondJSON(msgJSON, http.StatusBadRequest, w) + utils.RespondJSON(msgJSON, http.StatusBadRequest, w) } diff --git a/Proxy/proxy.go b/internal/proxy/proxy.go similarity index 88% rename from Proxy/proxy.go rename to internal/proxy/proxy.go index e81bb7e..b34a277 100644 --- a/Proxy/proxy.go +++ b/internal/proxy/proxy.go @@ -9,21 +9,22 @@ import ( "net/http/httputil" "net/url" - logger "github.com/cr3a70r/shield/Utils" + "github.com/cr3a70r/shield/internal/utils" ) +// --- type ProxyHttpServer struct { ctx context.Context http.Server AddressAndPort string Name string - logger *logger.Logger + logger *utils.Logger } type ReverseProxy struct { url *url.URL proxy *httputil.ReverseProxy - logger *logger.Logger + logger *utils.Logger port string } @@ -40,7 +41,7 @@ type Config struct { Override Override } -func NewProxy(urlString string, transport http.RoundTripper, director *httputil.ReverseProxy, logger *logger.Logger, port string) *ReverseProxy { +func NewProxy(urlString string, transport http.RoundTripper, director *httputil.ReverseProxy, logger *utils.Logger, port string) *ReverseProxy { providedUrl, err := url.Parse(urlString) if err != nil { @@ -80,6 +81,9 @@ func (p *ReverseProxy) Handler(w http.ResponseWriter, r *http.Request) { }) } + //We may load balance here: + //r.Host = balanced IP. + p.proxy.ServeHTTP(w, r) } diff --git a/Utils/Jsonlog.go b/internal/utils/jsonlog.go similarity index 99% rename from Utils/Jsonlog.go rename to internal/utils/jsonlog.go index 23a1a81..4fd9caf 100644 --- a/Utils/Jsonlog.go +++ b/internal/utils/jsonlog.go @@ -1,4 +1,4 @@ -package Utils +package utils import ( "encoding/json" diff --git a/Utils/Utils.go b/internal/utils/utils.go similarity index 95% rename from Utils/Utils.go rename to internal/utils/utils.go index 0034a67..9a78889 100644 --- a/Utils/Utils.go +++ b/internal/utils/utils.go @@ -1,4 +1,4 @@ -package Utils +package utils import ( "encoding/json" diff --git a/internal/workerpool/task.go b/internal/workerpool/task.go new file mode 100644 index 0000000..e744930 --- /dev/null +++ b/internal/workerpool/task.go @@ -0,0 +1,18 @@ +package workerpool + +import "fmt" + +type Task struct { + Err error + Data interface{} + f func(interface{}) error +} + +func NewTask(f func(interface{}) error, data interface{}) *Task { + return &Task{f: f, Data: data} +} + +func process(workerID int, task *Task) { + fmt.Println("Worker %d processes task %v\n", workerID, task.Data) + task.Err = task.f(task.Data) +} diff --git a/internal/workerpool/worker.go b/internal/workerpool/worker.go new file mode 100644 index 0000000..1ae398a --- /dev/null +++ b/internal/workerpool/worker.go @@ -0,0 +1,6 @@ +package workerpool + +type Worker struct { + ID int + taskChan chan *Task +} diff --git a/shield.go b/shield.go index 0545bd5..1c24f0c 100644 --- a/shield.go +++ b/shield.go @@ -10,9 +10,9 @@ import ( "runtime" "time" - management "github.com/cr3a70r/shield/Management" - proxy "github.com/cr3a70r/shield/Proxy" - "github.com/cr3a70r/shield/Utils" + "github.com/cr3a70r/shield/internal/management" + "github.com/cr3a70r/shield/internal/proxy" + "github.com/cr3a70r/shield/internal/utils" "github.com/xlab/closer" ) @@ -27,7 +27,7 @@ func main() { closer.Bind(cleanup) - logger := Utils.New(os.Stdout, Utils.LevelInfo) + logger := utils.New(os.Stdout, utils.LevelInfo) test := workingProxyForDomain(logger, "test.dev.corp.daydev.org", "10.10.20.40", "9090") http.HandleFunc("/", test.Handler) @@ -46,6 +46,11 @@ func main() { management.Settings.Initialize() + //Building hosts from configured domains + for _, d := range management.Settings.Domains { + management.Settings.Hosts = append(management.Settings.Hosts, d.DomainName) + } + fmt.Println(runtime.NumGoroutine()) go management.StartWebserver("0.0.0.0:8080") @@ -57,7 +62,7 @@ func cleanup() { fmt.Println("Closing Application") } -func workingProxyForDomain(logger *Utils.Logger, domain string, realServer string, port string) *proxy.ReverseProxy { +func workingProxyForDomain(logger *utils.Logger, domain string, realServer string, port string) *proxy.ReverseProxy { transport := &http.Transport{ DialContext: (&net.Dialer{ Timeout: 5 * time.Second, diff --git a/static/domains.html b/static/domains.html index e3df2d1..060b211 100755 --- a/static/domains.html +++ b/static/domains.html @@ -9,7 +9,7 @@ Protection | Shield Domain - Server + Backend Port Action @@ -57,7 +57,7 @@ Protection | Shield