diff --git a/server/internal/http/legacy/handler.go b/server/internal/http/legacy/handler.go index bfd29f3a..263f70fd 100644 --- a/server/internal/http/legacy/handler.go +++ b/server/internal/http/legacy/handler.go @@ -8,6 +8,7 @@ import ( "net" "net/http" "net/url" + "path" "strings" "time" @@ -41,17 +42,19 @@ var ( type LegacyHandler struct { logger zerolog.Logger serverAddr string + pathPrefix string bannedIPs map[string]struct{} sessionIPs map[string]string wsDialer *websocket.Dialer } -func New(serverAddr string) *LegacyHandler { +func New(serverAddr, pathPrefix string) *LegacyHandler { // Init return &LegacyHandler{ logger: log.With().Str("module", "legacy").Logger(), serverAddr: serverAddr, + pathPrefix: pathPrefix, bannedIPs: make(map[string]struct{}), sessionIPs: make(map[string]string), wsDialer: &websocket.Dialer{ @@ -102,7 +105,7 @@ func (h *LegacyHandler) Route(r types.Router) { defer s.destroy() // dial to the remote backend - connBackend, _, err := h.wsDialer.Dial("ws://"+h.serverAddr+"/api/ws?token="+url.QueryEscape(s.token), nil) + connBackend, _, err := h.wsDialer.Dial("ws://"+h.serverAddr+path.Join(s.pathPrefix, "/api/ws")+"?token="+url.QueryEscape(s.token), nil) if err != nil { h.logger.Error().Err(err).Msg("couldn't dial to the remote backend") diff --git a/server/internal/http/legacy/session.go b/server/internal/http/legacy/session.go index 02f45ec0..678fe23a 100644 --- a/server/internal/http/legacy/session.go +++ b/server/internal/http/legacy/session.go @@ -6,6 +6,7 @@ import ( "fmt" "io" "net/http" + "path" "strings" "sync" @@ -35,6 +36,7 @@ type session struct { logger zerolog.Logger serverAddr string + pathPrefix string id, ip string token string @@ -63,6 +65,7 @@ func (h *LegacyHandler) newSession(r *http.Request) *session { h: h, logger: h.logger, serverAddr: h.serverAddr, + pathPrefix: h.pathPrefix, client: &http.Client{ Transport: transport, }, @@ -70,8 +73,8 @@ func (h *LegacyHandler) newSession(r *http.Request) *session { } } -func (s *session) req(method, path string, headers http.Header, request io.Reader) (io.ReadCloser, http.Header, error) { - req, err := http.NewRequest(method, "http://"+s.serverAddr+path, request) +func (s *session) req(method, reqPath string, headers http.Header, request io.Reader) (io.ReadCloser, http.Header, error) { + req, err := http.NewRequest(method, "http://"+s.serverAddr+path.Join(s.pathPrefix, reqPath), request) if err != nil { return nil, nil, err } diff --git a/server/internal/http/manager.go b/server/internal/http/manager.go index acea79db..a7c48961 100644 --- a/server/internal/http/manager.go +++ b/server/internal/http/manager.go @@ -134,7 +134,7 @@ func (manager *HttpManagerCtx) Start() { }() manager.logger.Info().Msgf("legacy proxy listening on %s", listener.Addr().String()) - legacy.New(listener.Addr().String()).Route(manager.router) + legacy.New(listener.Addr().String(), manager.config.PathPrefix).Route(manager.router) } } else { go func() { @@ -146,7 +146,7 @@ func (manager *HttpManagerCtx) Start() { // start legacy proxy if enabled if viper.GetBool("legacy") { - legacy.New(manager.http.Addr).Route(manager.router) + legacy.New(manager.http.Addr, manager.config.PathPrefix).Route(manager.router) } } }