diff options
| author | mo khan <mo@mokhan.ca> | 2025-03-13 09:19:45 -0600 |
|---|---|---|
| committer | mo khan <mo@mokhan.ca> | 2025-03-13 09:19:45 -0600 |
| commit | 52ca752eb2f55f858a9b943441bdc0e6353dc128 (patch) | |
| tree | 47e756739c567ff628b29b894ea6aa27690aa7a1 /cmd/gtwy | |
| parent | fa141110137caafd40ab62d33fe8acc3048d4c84 (diff) | |
refactor: extract proxy package
Diffstat (limited to 'cmd/gtwy')
| -rw-r--r-- | cmd/gtwy/main.go | 41 |
1 files changed, 2 insertions, 39 deletions
diff --git a/cmd/gtwy/main.go b/cmd/gtwy/main.go index 232d2f1..84c9f18 100644 --- a/cmd/gtwy/main.go +++ b/cmd/gtwy/main.go @@ -1,55 +1,18 @@ package main import ( - "fmt" "log" "net/http" - "net/http/httputil" - "strings" - "github.com/casbin/casbin/v2" "github.com/xlgmokha/x/pkg/env" - "github.com/xlgmokha/x/pkg/x" "gitlab.com/mokhax/spike/pkg/cfg" + "gitlab.com/mokhax/spike/pkg/prxy" "gitlab.com/mokhax/spike/pkg/srv" ) -func NewRouter(routes map[string]string) http.Handler { - authz := x.Must(casbin.NewEnforcer("model.conf", "policy.csv")) - - return &httputil.ReverseProxy{ - Director: func(r *http.Request) { - segments := strings.SplitN(r.Host, ":", 2) - host := segments[0] - destinationHost := routes[host] - - log.Printf("%v (from: %v to: %v)\n", r.URL, host, destinationHost) - - subject := "71cbc18e-bd41-4229-9ad2-749546a2a4a7" // TODO:: unpack sub claim in JWT - if x.Must(authz.Enforce(subject, host, r.Method, r.URL.Path)) { - r.URL.Scheme = "http" // TODO:: use TLS - r.Host = destinationHost - r.URL.Host = destinationHost - } else { - log.Println("UNAUTHORIZED") // TODO:: Return forbidden, unauthorized or not found status code - } - }, - Transport: http.DefaultTransport, - FlushInterval: -1, - ErrorLog: nil, - ModifyResponse: func(r *http.Response) error { - r.Header.Add("Via", fmt.Sprintf("%v gtwy", r.Proto)) - return nil - }, - ErrorHandler: func(w http.ResponseWriter, r *http.Request, err error) { - log.Println(err) - }, - } -} - func main() { mux := http.NewServeMux() - mux.Handle("/", NewRouter(map[string]string{ + mux.Handle("/", prxy.New(map[string]string{ "idp.example.com": "localhost:8282", "ui.example.com": "localhost:8283", "api.example.com": "localhost:8284", |
