Skip to content

Commit 76051c4

Browse files
authored
fix(server): include path prefix in legacy API calls (#615) (#618)
Resolves 404 errors by correctly routing legacy requests when a path prefix is configured.
1 parent 7624bbb commit 76051c4

File tree

3 files changed

+12
-6
lines changed

3 files changed

+12
-6
lines changed

server/internal/http/legacy/handler.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"net"
99
"net/http"
1010
"net/url"
11+
"path"
1112
"strings"
1213
"time"
1314

@@ -41,17 +42,19 @@ var (
4142
type LegacyHandler struct {
4243
logger zerolog.Logger
4344
serverAddr string
45+
pathPrefix string
4446
bannedIPs map[string]struct{}
4547
sessionIPs map[string]string
4648
wsDialer *websocket.Dialer
4749
}
4850

49-
func New(serverAddr string) *LegacyHandler {
51+
func New(serverAddr, pathPrefix string) *LegacyHandler {
5052
// Init
5153

5254
return &LegacyHandler{
5355
logger: log.With().Str("module", "legacy").Logger(),
5456
serverAddr: serverAddr,
57+
pathPrefix: pathPrefix,
5558
bannedIPs: make(map[string]struct{}),
5659
sessionIPs: make(map[string]string),
5760
wsDialer: &websocket.Dialer{
@@ -102,7 +105,7 @@ func (h *LegacyHandler) Route(r types.Router) {
102105
defer s.destroy()
103106

104107
// dial to the remote backend
105-
connBackend, _, err := h.wsDialer.Dial("ws://"+h.serverAddr+"/api/ws?token="+url.QueryEscape(s.token), nil)
108+
connBackend, _, err := h.wsDialer.Dial("ws://"+h.serverAddr+path.Join(s.pathPrefix, "/api/ws")+"?token="+url.QueryEscape(s.token), nil)
106109
if err != nil {
107110
h.logger.Error().Err(err).Msg("couldn't dial to the remote backend")
108111

server/internal/http/legacy/session.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"fmt"
77
"io"
88
"net/http"
9+
"path"
910
"strings"
1011
"sync"
1112

@@ -35,6 +36,7 @@ type session struct {
3536

3637
logger zerolog.Logger
3738
serverAddr string
39+
pathPrefix string
3840

3941
id, ip string
4042
token string
@@ -63,15 +65,16 @@ func (h *LegacyHandler) newSession(r *http.Request) *session {
6365
h: h,
6466
logger: h.logger,
6567
serverAddr: h.serverAddr,
68+
pathPrefix: h.pathPrefix,
6669
client: &http.Client{
6770
Transport: transport,
6871
},
6972
sessions: make(map[string]*memberStruct),
7073
}
7174
}
7275

73-
func (s *session) req(method, path string, headers http.Header, request io.Reader) (io.ReadCloser, http.Header, error) {
74-
req, err := http.NewRequest(method, "http://"+s.serverAddr+path, request)
76+
func (s *session) req(method, reqPath string, headers http.Header, request io.Reader) (io.ReadCloser, http.Header, error) {
77+
req, err := http.NewRequest(method, "http://"+s.serverAddr+path.Join(s.pathPrefix, reqPath), request)
7578
if err != nil {
7679
return nil, nil, err
7780
}

server/internal/http/manager.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ func (manager *HttpManagerCtx) Start() {
134134
}()
135135
manager.logger.Info().Msgf("legacy proxy listening on %s", listener.Addr().String())
136136

137-
legacy.New(listener.Addr().String()).Route(manager.router)
137+
legacy.New(listener.Addr().String(), manager.config.PathPrefix).Route(manager.router)
138138
}
139139
} else {
140140
go func() {
@@ -146,7 +146,7 @@ func (manager *HttpManagerCtx) Start() {
146146

147147
// start legacy proxy if enabled
148148
if viper.GetBool("legacy") {
149-
legacy.New(manager.http.Addr).Route(manager.router)
149+
legacy.New(manager.http.Addr, manager.config.PathPrefix).Route(manager.router)
150150
}
151151
}
152152
}

0 commit comments

Comments
 (0)