move StartSSHServer to Session

This commit is contained in:
Jose Garcia 2021-09-15 13:14:58 +00:00 committed by GitHub
parent 497b45e4e2
commit 8abff2af97
3 changed files with 29 additions and 38 deletions

View file

@ -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

View file

@ -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
}

View file

@ -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
}