summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
authormo khan <mo@mokhan.ca>2025-03-13 09:19:45 -0600
committermo khan <mo@mokhan.ca>2025-03-13 09:19:45 -0600
commit52ca752eb2f55f858a9b943441bdc0e6353dc128 (patch)
tree47e756739c567ff628b29b894ea6aa27690aa7a1 /cmd
parentfa141110137caafd40ab62d33fe8acc3048d4c84 (diff)
refactor: extract proxy package
Diffstat (limited to 'cmd')
-rw-r--r--cmd/gtwy/main.go41
1 files changed, 2 insertions, 39 deletions
diff --git a/cmd/gtwy/main.go b/cmd/gtwy/main.go
index 232d2f12..84c9f183 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",