diff --git a/cmd/gateway/main.go b/cmd/gateway/main.go index 28089aa..11d369b 100644 --- a/cmd/gateway/main.go +++ b/cmd/gateway/main.go @@ -98,8 +98,21 @@ func newProxy(targetURL, stripPrefix string) (*httputil.ReverseProxy, error) { proxy := httputil.NewSingleHostReverseProxy(target) originalDirector := proxy.Director proxy.Director = func(req *http.Request) { + // Store the custom headers before calling originalDirector + userSubject := req.Header.Get("X-User-Subject") + userRoles := req.Header.Get("X-User-Roles") + originalDirector(req) req.Host = target.Host + + // Re-apply custom headers after originalDirector (which may create a new header map) + if userSubject != "" { + req.Header.Set("X-User-Subject", userSubject) + } + if userRoles != "" { + req.Header.Set("X-User-Roles", userRoles) + } + if stripPrefix != "" { req.URL.Path = strings.TrimPrefix(req.URL.Path, stripPrefix) } @@ -182,6 +195,8 @@ func injectUserInfo(next http.Handler) http.Handler { } logger.Info("Injecting user info into headers", "subject", r.Header.Get("X-User-Subject"), "roles", r.Header.Get("X-User-Roles")) } + // NOTE: The Authorization header is already present in r.Header and will be + // automatically forwarded by the reverse proxy to downstream services next.ServeHTTP(w, r) }) } @@ -210,6 +225,7 @@ func main() { "http://localhost:3000", "http://127.0.0.1:3000", "https://techtorque.vercel.app", + "https://techtorque.randitha.net", }, AllowedMethods: []string{"GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"}, AllowedHeaders: []string{"Accept", "Authorization", "Content-Type", "X-CSRF-Token"}, diff --git a/config.yaml b/config.yaml index 4c841d8..dc2027c 100644 --- a/config.yaml +++ b/config.yaml @@ -115,6 +115,7 @@ services: - name: "ai" path_prefix: "/api/v1/ai/" - target_url: "http://localhost:8089" # Assuming a future port for the FastAPI service - strip_prefix: "/api/v1/ai" - auth_required: true \ No newline at end of file + target_url: "http://localhost:8091" # Agent Bot service (Python FastAPI) + strip_prefix: "/api/v1/ai" # Strip to match Agent Bot's internal routing + auth_required: true + env_var: "AGENT_BOT_SERVICE_URL" \ No newline at end of file