From 8abff2af97688a47744066aac4cd632f22259b53 Mon Sep 17 00:00:00 2001 From: Jose Garcia Date: Wed, 15 Sep 2021 13:14:58 +0000 Subject: [PATCH] move StartSSHServer to Session --- port_forwarder.go | 2 +- session.go | 28 ++++++++++++++++++++++++++++ ssh_server.go | 37 ------------------------------------- 3 files changed, 29 insertions(+), 38 deletions(-) delete mode 100644 ssh_server.go diff --git a/port_forwarder.go b/port_forwarder.go index 400d6ac97..5dafd0c65 100644 --- a/port_forwarder.go +++ b/port_forwarder.go @@ -9,7 +9,7 @@ import ( "github.com/opentracing/opentracing-go" ) -// A PortForwarder forwards TCP traffic over a LiveShare session from a port on a remote +// A PortForwarder forwards TCP traffic over a Live Share session from a port on a remote // container to a local destination such as a network port or Go reader/writer. type PortForwarder struct { session *Session diff --git a/session.go b/session.go index 0e3120cd7..1d13ad58c 100644 --- a/session.go +++ b/session.go @@ -3,6 +3,7 @@ package liveshare import ( "context" "fmt" + "strconv" ) // A Session represents the session between a connected Live Share client and server. @@ -59,3 +60,30 @@ func (s *Session) UpdateSharedVisibility(ctx context.Context, port int, public b return nil } + +// StartSSHServer starts the SSHD server and returns the user and port for which to authenticate with. +// If there is no SSHD server installed on the server, it will attempt to install it. The installation +// process can take upwards of 20+ seconds. +func (s *Session) StartSSHServer(ctx context.Context) (string, int64, error) { + var response struct { + Result bool `json:"result"` + ServerPort string `json:"serverPort"` + User string `json:"user"` + Message string `json:"message"` + } + + if err := s.rpc.do(ctx, "ISshServerHostService.startRemoteServer", []string{}, &response); err != nil { + return "", 0, err + } + + if !response.Result { + return "", 0, fmt.Errorf("failed to start server: %s", response.Message) + } + + port, err := strconv.ParseInt(response.ServerPort, 10, 64) + if err != nil { + return "", 0, fmt.Errorf("failed to parse port: %w", err) + } + + return response.User, port, nil +} diff --git a/ssh_server.go b/ssh_server.go deleted file mode 100644 index ca66ec7de..000000000 --- a/ssh_server.go +++ /dev/null @@ -1,37 +0,0 @@ -package liveshare - -import ( - "context" -) - -// A SSHServer handles starting the remote SSH server. -// If there is no SSH server available it installs one. -type SSHServer struct { - session *Session -} - -// SSHServer returns a new SSHServer from the LiveShare Session. -func (session *Session) SSHServer() *SSHServer { - return &SSHServer{session: session} -} - -// SSHServerStartResult contains whether or not the start of the SSH server was -// successful. If it succeeded the server port and user is included. If it failed, -// it contains an explanation message. -type SSHServerStartResult struct { - Result bool `json:"result"` - ServerPort string `json:"serverPort"` - User string `json:"user"` - Message string `json:"message"` -} - -// StartRemoteServer starts or install the remote SSH server and returns the result. -func (s *SSHServer) StartRemoteServer(ctx context.Context) (*SSHServerStartResult, error) { - var response SSHServerStartResult - - if err := s.session.rpc.do(ctx, "ISshServerHostService.startRemoteServer", []string{}, &response); err != nil { - return nil, err - } - - return &response, nil -}