diff --git a/internal/cmd/commands/connect/connect.go b/internal/cmd/commands/connect/connect.go index 50d2ec40d..9c50f4ad8 100644 --- a/internal/cmd/commands/connect/connect.go +++ b/internal/cmd/commands/connect/connect.go @@ -501,7 +501,7 @@ func (c *Command) Run(args []string) (retCode int) { // The only way a user will be able to connect to the session is by // connecting directly to the port and address we report to them here. sessInfo := SessionInfo{ - Protocol: "tcp", + Protocol: c.sessionAuthzData.GetType(), Address: c.listenerAddr.IP.String(), Port: c.listenerAddr.Port, Expiration: c.expiration, diff --git a/internal/servers/worker/handler.go b/internal/servers/worker/handler.go index 47af24e9d..27ab8935d 100644 --- a/internal/servers/worker/handler.go +++ b/internal/servers/worker/handler.go @@ -5,6 +5,7 @@ import ( "errors" "net" "net/http" + "net/url" "strconv" "github.com/hashicorp/boundary/globals" @@ -75,7 +76,6 @@ func (w *Worker) handleProxy() http.HandlerFunc { tofuToken := si.LookupSessionResponse.GetTofuToken() version := si.LookupSessionResponse.GetVersion() endpoint := si.LookupSessionResponse.GetEndpoint() - // userId := si.LookupSessionResponse.GetAuthorization() sessStatus := si.Status si.RUnlock() @@ -163,10 +163,18 @@ func (w *Worker) handleProxy() http.HandlerFunc { return } - // Verify the subprotocol has a supported proxy before calling AuthorizeConnection - handleProxyFn, err := proxyHandlers.GetHandler(conn.Subprotocol()) + // Verify the protocol has a supported proxy before calling AuthorizeConnection + endpointUrl, err := url.Parse(endpoint) if err != nil { - event.WriteError(ctx, op, err, event.WithInfoMsg("worker received request for unsupported protocol %s", conn.Subprotocol())) + event.WriteError(ctx, op, err, event.WithInfoMsg("worker failed to parse target endpoint", "endpoint", endpoint)) + if err = conn.Close(websocket.StatusProtocolError, "unsupported-protocol"); err != nil { + event.WriteError(ctx, op, err, event.WithInfoMsg("error closing client connection")) + } + return + } + handleProxyFn, err := proxyHandlers.GetHandler(endpointUrl.Scheme) + if err != nil { + event.WriteError(ctx, op, err, event.WithInfoMsg("worker received request for unsupported protocol", "protocol", endpointUrl.Scheme)) if err = conn.Close(websocket.StatusProtocolError, "unsupported-protocol"); err != nil { event.WriteError(ctx, op, err, event.WithInfoMsg("error closing client connection")) } diff --git a/internal/servers/worker/proxy/tcp/tcp.go b/internal/servers/worker/proxy/tcp/tcp.go index f2ff1e718..0eff4bbc8 100644 --- a/internal/servers/worker/proxy/tcp/tcp.go +++ b/internal/servers/worker/proxy/tcp/tcp.go @@ -7,7 +7,6 @@ import ( "net/url" "sync" - "github.com/hashicorp/boundary/globals" pbs "github.com/hashicorp/boundary/internal/gen/controller/servers/services" "github.com/hashicorp/boundary/internal/observability/event" "github.com/hashicorp/boundary/internal/servers/worker/proxy" @@ -16,7 +15,7 @@ import ( ) func init() { - err := proxy.RegisterHandler(globals.TcpProxyV1, handleTcpProxyV1) + err := proxy.RegisterHandler("tcp", handleTcpProxyV1) if err != nil { panic(err) }