1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-07-19 13:29:41 +02:00

fix(console): remove deprecated httputil and update console [EE-6468] (#10848)
Some checks are pending
ci / build_images (map[arch:arm64 platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:ppc64le platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:s390x platform:linux version:]) (push) Waiting to run
ci / build_manifests (push) Blocked by required conditions
ci / build_images (map[arch:amd64 platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:amd64 platform:windows version:1809]) (push) Waiting to run
ci / build_images (map[arch:amd64 platform:windows version:ltsc2022]) (push) Waiting to run
ci / build_images (map[arch:arm platform:linux version:]) (push) Waiting to run
/ triage (push) Waiting to run
Lint / Run linters (push) Waiting to run
Test / test-client (push) Waiting to run
Test / test-server (map[arch:amd64 platform:linux]) (push) Waiting to run
Test / test-server (map[arch:amd64 platform:windows version:1809]) (push) Waiting to run
Test / test-server (map[arch:amd64 platform:windows version:ltsc2022]) (push) Waiting to run
Test / test-server (map[arch:arm64 platform:linux]) (push) Waiting to run

This commit is contained in:
Matt Hook 2024-05-15 10:28:21 +12:00 committed by GitHub
parent 836df78181
commit 7edce528d6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 148 additions and 54 deletions

View file

@ -2,10 +2,7 @@ package websocket
import (
"bytes"
"net"
"net/http"
"net/http/httputil"
"time"
portainer "github.com/portainer/portainer/api"
"github.com/portainer/portainer/api/http/security"
@ -102,6 +99,7 @@ func (handler *Handler) handleExecRequest(w http.ResponseWriter, r *http.Request
if err != nil {
return err
}
defer websocketConn.Close()
return hijackExecStartOperation(websocketConn, params.endpoint, params.ID, tokenData.Token)
@ -113,30 +111,17 @@ func hijackExecStartOperation(
execID string,
token string,
) error {
dial, err := initDial(endpoint)
conn, err := initDial(endpoint)
if err != nil {
return err
}
// When we set up a TCP connection for hijack, there could be long periods
// of inactivity (a long running command with no output) that in certain
// network setups may cause ECONNTIMEOUT, leaving the client in an unknown
// state. Setting TCP KeepAlive on the socket connection will prohibit
// ECONNTIMEOUT unless the socket connection truly is broken
if tcpConn, ok := dial.(*net.TCPConn); ok {
tcpConn.SetKeepAlive(true)
tcpConn.SetKeepAlivePeriod(30 * time.Second)
}
httpConn := httputil.NewClientConn(dial, nil)
defer httpConn.Close()
execStartRequest, err := createExecStartRequest(execID)
if err != nil {
return err
}
return hijackRequest(websocketConn, httpConn, execStartRequest, token)
return hijackRequest(websocketConn, conn, execStartRequest, token)
}
func createExecStartRequest(execID string) (*http.Request, error) {