mirror of
https://github.com/wavetermdev/backup.git
synced 2026-08-05 13:57:07 -07:00
Rename Waveshell First Pass (#632)
This begins the process of renaming mshell to waveshell everywhere by making the most simple changes. There will need to be additional changes in the future, but the hope is to merge simple changes in now to reduce the number of future merge conflicts.
This commit is contained in:
@@ -140,12 +140,12 @@ class ViewRemoteConnDetailModal extends React.Component<{}, {}> {
|
|||||||
renderInstallStatus(remote: RemoteType): any {
|
renderInstallStatus(remote: RemoteType): any {
|
||||||
let statusStr: string = null;
|
let statusStr: string = null;
|
||||||
if (remote.installstatus == "disconnected") {
|
if (remote.installstatus == "disconnected") {
|
||||||
if (remote.needsmshellupgrade) {
|
if (remote.needswaveshellupgrade) {
|
||||||
statusStr = "mshell " + remote.mshellversion + " - needs upgrade";
|
statusStr = "waveshell " + remote.waveshellversion + " - needs upgrade";
|
||||||
} else if (util.isBlank(remote.mshellversion)) {
|
} else if (util.isBlank(remote.waveshellversion)) {
|
||||||
statusStr = "mshell unknown";
|
statusStr = "waveshell unknown";
|
||||||
} else {
|
} else {
|
||||||
statusStr = "mshell " + remote.mshellversion + " - current";
|
statusStr = "waveshell " + remote.waveshellversion + " - current";
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
statusStr = remote.installstatus;
|
statusStr = remote.installstatus;
|
||||||
@@ -231,7 +231,7 @@ class ViewRemoteConnDetailModal extends React.Component<{}, {}> {
|
|||||||
} else if (remote.status == "disconnected") {
|
} else if (remote.status == "disconnected") {
|
||||||
buttons.push(connectButton);
|
buttons.push(connectButton);
|
||||||
} else if (remote.status == "error") {
|
} else if (remote.status == "error") {
|
||||||
if (remote.needsmshellupgrade) {
|
if (remote.needswaveshellupgrade) {
|
||||||
if (remote.installstatus == "connecting") {
|
if (remote.installstatus == "connecting") {
|
||||||
buttons.push(cancelInstallButton);
|
buttons.push(cancelInstallButton);
|
||||||
} else {
|
} else {
|
||||||
@@ -270,7 +270,7 @@ class ViewRemoteConnDetailModal extends React.Component<{}, {}> {
|
|||||||
} else if (remote.status == "error") {
|
} else if (remote.status == "error") {
|
||||||
if (remote.noinitpk) {
|
if (remote.noinitpk) {
|
||||||
message = "Error, could not connect.";
|
message = "Error, could not connect.";
|
||||||
} else if (remote.needsmshellupgrade) {
|
} else if (remote.needswaveshellupgrade) {
|
||||||
if (remote.installstatus == "connecting") {
|
if (remote.installstatus == "connecting") {
|
||||||
message = "Installing...";
|
message = "Installing...";
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Vendored
+2
-2
@@ -121,8 +121,8 @@ declare global {
|
|||||||
sshconfigsrc: string;
|
sshconfigsrc: string;
|
||||||
archived: boolean;
|
archived: boolean;
|
||||||
uname: string;
|
uname: string;
|
||||||
mshellversion: string;
|
waveshellversion: string;
|
||||||
needsmshellupgrade: boolean;
|
needswaveshellupgrade: boolean;
|
||||||
noinitpk: boolean;
|
noinitpk: boolean;
|
||||||
authtype: string;
|
authtype: string;
|
||||||
waitingforpassword: boolean;
|
waitingforpassword: boolean;
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ func readFullRunPacket(packetParser *packet.PacketParser) (*packet.RunPacketType
|
|||||||
return runPacket, nil
|
return runPacket, nil
|
||||||
}
|
}
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, fmt.Errorf("invalid packet '%s' sent to mshell", pk.GetType())
|
return nil, fmt.Errorf("invalid packet '%s' sent to waveshell", pk.GetType())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil, fmt.Errorf("no run packet received")
|
return nil, fmt.Errorf("no run packet received")
|
||||||
@@ -97,7 +97,7 @@ func handleSingle() {
|
|||||||
|
|
||||||
func handleUsage() {
|
func handleUsage() {
|
||||||
usage := `
|
usage := `
|
||||||
mshell is a helper program for wave terminal. it is used to execute commands
|
waveshell is a helper program for wave terminal. it is used to execute commands
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
--help - prints this message
|
--help - prints this message
|
||||||
@@ -106,7 +106,7 @@ Options:
|
|||||||
--single - run a single command (connected to multiplexer)
|
--single - run a single command (connected to multiplexer)
|
||||||
--single --version - return an init packet with version info
|
--single --version - return an init packet with version info
|
||||||
|
|
||||||
mshell does not open any external ports and does not require any additional permissions.
|
waveshell does not open any external ports and does not require any additional permissions.
|
||||||
it communicates exclusively through stdin/stdout with an attached process
|
it communicates exclusively through stdin/stdout with an attached process
|
||||||
via a JSON packet format.
|
via a JSON packet format.
|
||||||
`
|
`
|
||||||
@@ -124,7 +124,7 @@ func main() {
|
|||||||
handleUsage()
|
handleUsage()
|
||||||
return
|
return
|
||||||
} else if firstArg == "--version" {
|
} else if firstArg == "--version" {
|
||||||
fmt.Printf("mshell %s+%s\n", base.MShellVersion, base.BuildTime)
|
fmt.Printf("waveshell %s+%s\n", base.WaveshellVersion, base.BuildTime)
|
||||||
return
|
return
|
||||||
} else if firstArg == "--single" || firstArg == "--single-from-server" {
|
} else if firstArg == "--single" || firstArg == "--single-from-server" {
|
||||||
base.ProcessType = base.ProcessType_WaveShellSingle
|
base.ProcessType = base.ProcessType_WaveShellSingle
|
||||||
|
|||||||
+37
-37
@@ -20,18 +20,18 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const HomeVarName = "HOME"
|
const HomeVarName = "HOME"
|
||||||
const DefaultMShellHome = "~/.mshell"
|
const DefaultWaveshellHome = "~/.mshell"
|
||||||
const DefaultMShellName = "mshell"
|
const DefaultWaveshellName = "mshell"
|
||||||
const MShellPathVarName = "MSHELL_PATH"
|
const WaveshellPathVarName = "MSHELL_PATH"
|
||||||
const MShellHomeVarName = "MSHELL_HOME"
|
const WaveshellHomeVarName = "MSHELL_HOME"
|
||||||
const MShellInstallBinVarName = "MSHELL_INSTALLBIN_PATH"
|
const WaveshellInstallBinVarName = "MSHELL_INSTALLBIN_PATH"
|
||||||
const SSHCommandVarName = "SSH_COMMAND"
|
const SSHCommandVarName = "SSH_COMMAND"
|
||||||
const MShellDebugVarName = "MSHELL_DEBUG"
|
const WaveshellDebugVarName = "MSHELL_DEBUG"
|
||||||
const SessionsDirBaseName = "sessions"
|
const SessionsDirBaseName = "sessions"
|
||||||
const RcFilesDirBaseName = "rcfiles"
|
const RcFilesDirBaseName = "rcfiles"
|
||||||
const MShellVersion = "v0.7.0"
|
const WaveshellVersion = "v0.7.0"
|
||||||
const RemoteIdFile = "remoteid"
|
const RemoteIdFile = "remoteid"
|
||||||
const DefaultMShellInstallBinDir = "/opt/mshell/bin"
|
const DefaultWaveshellInstallBinDir = "/opt/mshell/bin"
|
||||||
const LogFileName = "mshell.log"
|
const LogFileName = "mshell.log"
|
||||||
const ForceDebugLog = false
|
const ForceDebugLog = false
|
||||||
|
|
||||||
@@ -90,7 +90,7 @@ func Logf(fmtStr string, args ...interface{}) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func InitDebugLog(prefix string) {
|
func InitDebugLog(prefix string) {
|
||||||
homeDir := GetMShellHomeDir()
|
homeDir := GetWaveshellHomeDir()
|
||||||
err := os.MkdirAll(homeDir, 0777)
|
err := os.MkdirAll(homeDir, 0777)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
@@ -163,7 +163,7 @@ func (ckey CommandKey) Validate(typeStr string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func HasDebugFlag(envMap map[string]string, flagName string) bool {
|
func HasDebugFlag(envMap map[string]string, flagName string) bool {
|
||||||
msDebug := envMap[MShellDebugVarName]
|
msDebug := envMap[WaveshellDebugVarName]
|
||||||
flags := strings.Split(msDebug, ",")
|
flags := strings.Split(msDebug, ",")
|
||||||
for _, flag := range flags {
|
for _, flag := range flags {
|
||||||
if strings.TrimSpace(flag) == flagName {
|
if strings.TrimSpace(flag) == flagName {
|
||||||
@@ -174,13 +174,13 @@ func HasDebugFlag(envMap map[string]string, flagName string) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func GetDebugRcFileName() string {
|
func GetDebugRcFileName() string {
|
||||||
msHome := GetMShellHomeDir()
|
wsHome := GetWaveshellHomeDir()
|
||||||
return path.Join(msHome, DebugRcFileName)
|
return path.Join(wsHome, DebugRcFileName)
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetDebugReturnStateFileName() string {
|
func GetDebugReturnStateFileName() string {
|
||||||
msHome := GetMShellHomeDir()
|
wsHome := GetWaveshellHomeDir()
|
||||||
return path.Join(msHome, DebugReturnStateFileName)
|
return path.Join(wsHome, DebugReturnStateFileName)
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetHomeDir() string {
|
func GetHomeDir() string {
|
||||||
@@ -191,16 +191,16 @@ func GetHomeDir() string {
|
|||||||
return homeVar
|
return homeVar
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetMShellHomeDir() string {
|
func GetWaveshellHomeDir() string {
|
||||||
homeVar := os.Getenv(MShellHomeVarName)
|
homeVar := os.Getenv(WaveshellHomeVarName)
|
||||||
if homeVar != "" {
|
if homeVar != "" {
|
||||||
return homeVar
|
return homeVar
|
||||||
}
|
}
|
||||||
return ExpandHomeDir(DefaultMShellHome)
|
return ExpandHomeDir(DefaultWaveshellHome)
|
||||||
}
|
}
|
||||||
|
|
||||||
func EnsureRcFilesDir() (string, error) {
|
func EnsureRcFilesDir() (string, error) {
|
||||||
mhome := GetMShellHomeDir()
|
mhome := GetWaveshellHomeDir()
|
||||||
dirName := path.Join(mhome, RcFilesDirBaseName)
|
dirName := path.Join(mhome, RcFilesDirBaseName)
|
||||||
err := CacheEnsureDir(dirName, RcFilesDirBaseName, 0700, "rcfiles dir")
|
err := CacheEnsureDir(dirName, RcFilesDirBaseName, 0700, "rcfiles dir")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -209,18 +209,18 @@ func EnsureRcFilesDir() (string, error) {
|
|||||||
return dirName, nil
|
return dirName, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetMShellPath() (string, error) {
|
func GetWaveshellPath() (string, error) {
|
||||||
msPath := os.Getenv(MShellPathVarName) // use MSHELL_PATH
|
wsPath := os.Getenv(WaveshellPathVarName) // use MSHELL_PATH -- will require rename
|
||||||
if msPath != "" {
|
if wsPath != "" {
|
||||||
return exec.LookPath(msPath)
|
return exec.LookPath(wsPath)
|
||||||
}
|
}
|
||||||
mhome := GetMShellHomeDir()
|
mhome := GetWaveshellHomeDir()
|
||||||
userMShellPath := path.Join(mhome, DefaultMShellName) // look in ~/.mshell
|
userWaveshellPath := path.Join(mhome, DefaultWaveshellName) // look in ~/.mshell -- will require rename
|
||||||
msPath, err := exec.LookPath(userMShellPath)
|
wsPath, err := exec.LookPath(userWaveshellPath)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return msPath, nil
|
return wsPath, nil
|
||||||
}
|
}
|
||||||
return exec.LookPath(DefaultMShellName) // standard path lookup for 'mshell'
|
return exec.LookPath(DefaultWaveshellName) // standard path lookup for 'mshell'-- will require rename
|
||||||
}
|
}
|
||||||
|
|
||||||
func ExpandHomeDir(pathStr string) string {
|
func ExpandHomeDir(pathStr string) string {
|
||||||
@@ -239,9 +239,9 @@ func ValidGoArch(goos string, goarch string) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func GoArchOptFile(version string, goos string, goarch string) string {
|
func GoArchOptFile(version string, goos string, goarch string) string {
|
||||||
installBinDir := os.Getenv(MShellInstallBinVarName)
|
installBinDir := os.Getenv(WaveshellInstallBinVarName)
|
||||||
if installBinDir == "" {
|
if installBinDir == "" {
|
||||||
installBinDir = DefaultMShellInstallBinDir
|
installBinDir = DefaultWaveshellInstallBinDir
|
||||||
}
|
}
|
||||||
versionStr := semver.MajorMinor(version)
|
versionStr := semver.MajorMinor(version)
|
||||||
if versionStr == "" {
|
if versionStr == "" {
|
||||||
@@ -252,22 +252,22 @@ func GoArchOptFile(version string, goos string, goarch string) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func GetRemoteId() (string, error) {
|
func GetRemoteId() (string, error) {
|
||||||
mhome := GetMShellHomeDir()
|
wsHome := GetWaveshellHomeDir()
|
||||||
homeInfo, err := os.Stat(mhome)
|
homeInfo, err := os.Stat(wsHome)
|
||||||
if errors.Is(err, fs.ErrNotExist) {
|
if errors.Is(err, fs.ErrNotExist) {
|
||||||
err = os.MkdirAll(mhome, 0777)
|
err = os.MkdirAll(wsHome, 0777)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", fmt.Errorf("cannot make mshell home directory[%s]: %w", mhome, err)
|
return "", fmt.Errorf("cannot make waveshell home directory[%s]: %w", wsHome, err)
|
||||||
}
|
}
|
||||||
homeInfo, err = os.Stat(mhome)
|
homeInfo, err = os.Stat(wsHome)
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", fmt.Errorf("cannot stat mshell home directory[%s]: %w", mhome, err)
|
return "", fmt.Errorf("cannot stat waveshell home directory[%s]: %w", wsHome, err)
|
||||||
}
|
}
|
||||||
if !homeInfo.IsDir() {
|
if !homeInfo.IsDir() {
|
||||||
return "", fmt.Errorf("mshell home directory[%s] is not a directory", mhome)
|
return "", fmt.Errorf("waveshell home directory[%s] is not a directory", wsHome)
|
||||||
}
|
}
|
||||||
remoteIdFile := path.Join(mhome, RemoteIdFile)
|
remoteIdFile := path.Join(wsHome, RemoteIdFile)
|
||||||
fd, err := os.Open(remoteIdFile)
|
fd, err := os.Open(remoteIdFile)
|
||||||
if errors.Is(err, fs.ErrNotExist) {
|
if errors.Is(err, fs.ErrNotExist) {
|
||||||
// write the file
|
// write the file
|
||||||
|
|||||||
@@ -687,18 +687,18 @@ func FmtMessagePacket(fmtStr string, args ...interface{}) *MessagePacketType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type InitPacketType struct {
|
type InitPacketType struct {
|
||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
RespId string `json:"respid,omitempty"`
|
RespId string `json:"respid,omitempty"`
|
||||||
Version string `json:"version"`
|
Version string `json:"version"`
|
||||||
BuildTime string `json:"buildtime,omitempty"`
|
BuildTime string `json:"buildtime,omitempty"`
|
||||||
MShellHomeDir string `json:"mshellhomedir,omitempty"`
|
WaveshellHomeDir string `json:"waveshellhomedir,omitempty"`
|
||||||
HomeDir string `json:"homedir,omitempty"`
|
HomeDir string `json:"homedir,omitempty"`
|
||||||
User string `json:"user,omitempty"`
|
User string `json:"user,omitempty"`
|
||||||
HostName string `json:"hostname,omitempty"`
|
HostName string `json:"hostname,omitempty"`
|
||||||
NotFound bool `json:"notfound,omitempty"`
|
NotFound bool `json:"notfound,omitempty"`
|
||||||
UName string `json:"uname,omitempty"`
|
UName string `json:"uname,omitempty"`
|
||||||
Shell string `json:"shell,omitempty"`
|
Shell string `json:"shell,omitempty"`
|
||||||
RemoteId string `json:"remoteid,omitempty"`
|
RemoteId string `json:"remoteid,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*InitPacketType) GetType() string {
|
func (*InitPacketType) GetType() string {
|
||||||
@@ -772,12 +772,12 @@ func MakeCmdDonePacket(ck base.CommandKey) *CmdDonePacketType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type CmdStartPacketType struct {
|
type CmdStartPacketType struct {
|
||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
RespId string `json:"respid,omitempty"`
|
RespId string `json:"respid,omitempty"`
|
||||||
Ts int64 `json:"ts"`
|
Ts int64 `json:"ts"`
|
||||||
CK base.CommandKey `json:"ck"`
|
CK base.CommandKey `json:"ck"`
|
||||||
Pid int `json:"pid,omitempty"`
|
Pid int `json:"pid,omitempty"`
|
||||||
MShellPid int `json:"mshellpid,omitempty"`
|
WaveshellPid int `json:"waveshellpid,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*CmdStartPacketType) GetType() string {
|
func (*CmdStartPacketType) GetType() string {
|
||||||
|
|||||||
@@ -455,7 +455,7 @@ func (m *MServer) writeFile(pk *packet.WriteFilePacketType, wfc *WriteFileContex
|
|||||||
}
|
}
|
||||||
var writeFd *os.File
|
var writeFd *os.File
|
||||||
if pk.UseTemp {
|
if pk.UseTemp {
|
||||||
writeFd, err = os.CreateTemp("", "mshell.writefile.*") // "" means make this file in standard TempDir
|
writeFd, err = os.CreateTemp("", "waveshell.writefile.*") // "" means make this file in standard TempDir
|
||||||
if err != nil {
|
if err != nil {
|
||||||
resp := packet.MakeWriteFileReadyPacket(pk.ReqId)
|
resp := packet.MakeWriteFileReadyPacket(pk.ReqId)
|
||||||
resp.Error = fmt.Sprintf("cannot create temp file: %v", err)
|
resp.Error = fmt.Sprintf("cannot create temp file: %v", err)
|
||||||
@@ -754,14 +754,14 @@ func (m *MServer) runCommand(runPacket *packet.RunPacketType) {
|
|||||||
m.Sender.SendErrorResponse(runPacket.ReqId, fmt.Errorf("test error"))
|
m.Sender.SendErrorResponse(runPacket.ReqId, fmt.Errorf("test error"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
ecmd, err := shexec.MakeMShellSingleCmd()
|
ecmd, err := shexec.MakeWaveshellSingleCmd()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
m.Sender.SendErrorResponse(runPacket.ReqId, fmt.Errorf("server run packets require valid ck: %s", err))
|
m.Sender.SendErrorResponse(runPacket.ReqId, fmt.Errorf("server run packets require valid ck: %s", err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
cproc, err := shexec.MakeClientProc(context.Background(), shexec.CmdWrap{Cmd: ecmd})
|
cproc, err := shexec.MakeClientProc(context.Background(), shexec.CmdWrap{Cmd: ecmd})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
m.Sender.SendErrorResponse(runPacket.ReqId, fmt.Errorf("starting mshell client: %s", err))
|
m.Sender.SendErrorResponse(runPacket.ReqId, fmt.Errorf("starting waveshell client: %s", err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
m.Lock.Lock()
|
m.Lock.Lock()
|
||||||
@@ -833,7 +833,7 @@ func (server *MServer) runReadLoop() {
|
|||||||
}
|
}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
server.Sender.SendMessageFmt("invalid packet '%s' sent to mshell server", packet.AsString(pk))
|
server.Sender.SendMessageFmt("invalid packet '%s' sent to waveshell server", packet.AsString(pk))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ const FirstExtraFilesFdNum = 3
|
|||||||
func StreamCommandWithExtraFd(ctx context.Context, ecmd *exec.Cmd, outputCh chan []byte, extraFdNum int, endBytes []byte, stdinDataCh chan []byte) ([]byte, error) {
|
func StreamCommandWithExtraFd(ctx context.Context, ecmd *exec.Cmd, outputCh chan []byte, extraFdNum int, endBytes []byte, stdinDataCh chan []byte) ([]byte, error) {
|
||||||
defer close(outputCh)
|
defer close(outputCh)
|
||||||
ecmd.Env = os.Environ()
|
ecmd.Env = os.Environ()
|
||||||
shellutil.UpdateCmdEnv(ecmd, shellutil.MShellEnvVars(shellutil.DefaultTermType))
|
shellutil.UpdateCmdEnv(ecmd, shellutil.WaveshellEnvVars(shellutil.DefaultTermType))
|
||||||
cmdPty, cmdTty, err := pty.Open()
|
cmdPty, cmdTty, err := pty.Open()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("opening new pty: %w", err)
|
return nil, fmt.Errorf("opening new pty: %w", err)
|
||||||
@@ -232,7 +232,7 @@ func StreamCommandWithExtraFd(ctx context.Context, ecmd *exec.Cmd, outputCh chan
|
|||||||
|
|
||||||
func RunSimpleCmdInPty(ecmd *exec.Cmd, endBytes []byte) ([]byte, error) {
|
func RunSimpleCmdInPty(ecmd *exec.Cmd, endBytes []byte) ([]byte, error) {
|
||||||
ecmd.Env = os.Environ()
|
ecmd.Env = os.Environ()
|
||||||
shellutil.UpdateCmdEnv(ecmd, shellutil.MShellEnvVars(shellutil.DefaultTermType))
|
shellutil.UpdateCmdEnv(ecmd, shellutil.WaveshellEnvVars(shellutil.DefaultTermType))
|
||||||
cmdPty, cmdTty, err := pty.Open()
|
cmdPty, cmdTty, err := pty.Open()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("opening new pty: %w", err)
|
return nil, fmt.Errorf("opening new pty: %w", err)
|
||||||
@@ -311,8 +311,8 @@ func parseExtVarOutput(pvarBytes []byte, promptOutput string, zmodsOutput string
|
|||||||
|
|
||||||
// for debugging (not for production use)
|
// for debugging (not for production use)
|
||||||
func writeStateToFile(shellType string, outputBytes []byte) error {
|
func writeStateToFile(shellType string, outputBytes []byte) error {
|
||||||
msHome := base.GetMShellHomeDir()
|
wsHome := base.GetWaveshellHomeDir()
|
||||||
stateFileName := path.Join(msHome, shellType+"-state.txt")
|
stateFileName := path.Join(wsHome, shellType+"-state.txt")
|
||||||
os.WriteFile(stateFileName, outputBytes, 0644)
|
os.WriteFile(stateFileName, outputBytes, 0644)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,13 +15,13 @@ const DefaultTermType = "xterm-256color"
|
|||||||
const DefaultTermRows = 24
|
const DefaultTermRows = 24
|
||||||
const DefaultTermCols = 80
|
const DefaultTermCols = 80
|
||||||
|
|
||||||
func MShellEnvVars(termType string) map[string]string {
|
func WaveshellEnvVars(termType string) map[string]string {
|
||||||
rtn := make(map[string]string)
|
rtn := make(map[string]string)
|
||||||
if termType != "" {
|
if termType != "" {
|
||||||
rtn["TERM"] = termType
|
rtn["TERM"] = termType
|
||||||
}
|
}
|
||||||
rtn["WAVESHELL"], _ = os.Executable()
|
rtn["WAVESHELL"], _ = os.Executable()
|
||||||
rtn["WAVESHELL_VERSION"] = base.MShellVersion
|
rtn["WAVESHELL_VERSION"] = base.WaveshellVersion
|
||||||
return rtn
|
return rtn
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -170,8 +170,8 @@ type WaveshellLaunchError struct {
|
|||||||
func (wle WaveshellLaunchError) Error() string {
|
func (wle WaveshellLaunchError) Error() string {
|
||||||
if wle.InitPk.NotFound {
|
if wle.InitPk.NotFound {
|
||||||
return "waveshell client not found"
|
return "waveshell client not found"
|
||||||
} else if semver.MajorMinor(wle.InitPk.Version) != semver.MajorMinor(base.MShellVersion) {
|
} else if semver.MajorMinor(wle.InitPk.Version) != semver.MajorMinor(base.WaveshellVersion) {
|
||||||
return fmt.Sprintf("invalid remote waveshell version '%s', must be '=%s'", wle.InitPk.Version, semver.MajorMinor(base.MShellVersion))
|
return fmt.Sprintf("invalid remote waveshell version '%s', must be '=%s'", wle.InitPk.Version, semver.MajorMinor(base.WaveshellVersion))
|
||||||
}
|
}
|
||||||
return fmt.Sprintf("invalid waveshell: init packet=%v", *wle.InitPk)
|
return fmt.Sprintf("invalid waveshell: init packet=%v", *wle.InitPk)
|
||||||
}
|
}
|
||||||
@@ -232,7 +232,7 @@ func MakeClientProc(ctx context.Context, ecmd ConnInterface) (*ClientProc, error
|
|||||||
cproc.Close()
|
cproc.Close()
|
||||||
return nil, WaveshellLaunchError{InitPk: initPk}
|
return nil, WaveshellLaunchError{InitPk: initPk}
|
||||||
}
|
}
|
||||||
if semver.MajorMinor(initPk.Version) != semver.MajorMinor(base.MShellVersion) {
|
if semver.MajorMinor(initPk.Version) != semver.MajorMinor(base.WaveshellVersion) {
|
||||||
cproc.Close()
|
cproc.Close()
|
||||||
return nil, WaveshellLaunchError{InitPk: initPk}
|
return nil, WaveshellLaunchError{InitPk: initPk}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ fi
|
|||||||
`
|
`
|
||||||
|
|
||||||
func MakeClientCommandStr() string {
|
func MakeClientCommandStr() string {
|
||||||
return strings.ReplaceAll(ClientCommandFmt, "[%VERSION%]", semver.MajorMinor(base.MShellVersion))
|
return strings.ReplaceAll(ClientCommandFmt, "[%VERSION%]", semver.MajorMinor(base.WaveshellVersion))
|
||||||
}
|
}
|
||||||
|
|
||||||
const InstallCommandFmt = `
|
const InstallCommandFmt = `
|
||||||
@@ -88,10 +88,10 @@ fi
|
|||||||
`
|
`
|
||||||
|
|
||||||
func MakeInstallCommandStr() string {
|
func MakeInstallCommandStr() string {
|
||||||
return strings.ReplaceAll(InstallCommandFmt, "[%VERSION%]", semver.MajorMinor(base.MShellVersion))
|
return strings.ReplaceAll(InstallCommandFmt, "[%VERSION%]", semver.MajorMinor(base.WaveshellVersion))
|
||||||
}
|
}
|
||||||
|
|
||||||
type MShellBinaryReaderFn func(version string, goos string, goarch string) (io.ReadCloser, error)
|
type WaveshellBinaryReaderFn func(version string, goos string, goarch string) (io.ReadCloser, error)
|
||||||
|
|
||||||
type ReturnStateBuf struct {
|
type ReturnStateBuf struct {
|
||||||
Lock *sync.Mutex
|
Lock *sync.Mutex
|
||||||
@@ -277,7 +277,7 @@ func (c *ShExecType) MakeCmdStartPacket(reqId string) *packet.CmdStartPacketType
|
|||||||
startPacket.Ts = time.Now().UnixMilli()
|
startPacket.Ts = time.Now().UnixMilli()
|
||||||
startPacket.CK = c.CK
|
startPacket.CK = c.CK
|
||||||
startPacket.Pid = c.Cmd.Process.Pid
|
startPacket.Pid = c.Cmd.Process.Pid
|
||||||
startPacket.MShellPid = os.Getpid()
|
startPacket.WaveshellPid = os.Getpid()
|
||||||
return startPacket
|
return startPacket
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -295,7 +295,7 @@ func MakeSimpleStaticWriterPipe(data []byte) (*os.File, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func MakeRunnerExec(ck base.CommandKey) (*exec.Cmd, error) {
|
func MakeRunnerExec(ck base.CommandKey) (*exec.Cmd, error) {
|
||||||
msPath, err := base.GetMShellPath()
|
msPath, err := base.GetWaveshellPath()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -317,7 +317,7 @@ func MakeDetachedExecCmd(pk *packet.RunPacketType, cmdTty *os.File) (*exec.Cmd,
|
|||||||
ecmd.Env = os.Environ()
|
ecmd.Env = os.Environ()
|
||||||
}
|
}
|
||||||
shellutil.UpdateCmdEnv(ecmd, shellenv.EnvMapFromState(state))
|
shellutil.UpdateCmdEnv(ecmd, shellenv.EnvMapFromState(state))
|
||||||
shellutil.UpdateCmdEnv(ecmd, shellutil.MShellEnvVars(getTermType(pk)))
|
shellutil.UpdateCmdEnv(ecmd, shellutil.WaveshellEnvVars(getTermType(pk)))
|
||||||
if state.Cwd != "" {
|
if state.Cwd != "" {
|
||||||
ecmd.Dir = base.ExpandHomeDir(state.Cwd)
|
ecmd.Dir = base.ExpandHomeDir(state.Cwd)
|
||||||
}
|
}
|
||||||
@@ -470,10 +470,10 @@ type ClientOpts struct {
|
|||||||
UsePty bool
|
UsePty bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func MakeMShellSingleCmd() (*exec.Cmd, error) {
|
func MakeWaveshellSingleCmd() (*exec.Cmd, error) {
|
||||||
execFile, err := os.Executable()
|
execFile, err := os.Executable()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("cannot find local mshell executable: %w", err)
|
return nil, fmt.Errorf("cannot find local waveshell executable: %w", err)
|
||||||
}
|
}
|
||||||
ecmd := exec.Command(execFile, "--single-from-server")
|
ecmd := exec.Command(execFile, "--single-from-server")
|
||||||
return ecmd, nil
|
return ecmd, nil
|
||||||
@@ -528,31 +528,6 @@ func (opts SSHOpts) MakeSSHExecCmd(remoteCommand string, sapi shellapi.ShellApi)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (opts SSHOpts) MakeMShellSSHOpts() string {
|
|
||||||
var moreSSHOpts []string
|
|
||||||
if opts.SSHIdentity != "" {
|
|
||||||
identityOpt := fmt.Sprintf("-i %s", shellescape.Quote(opts.SSHIdentity))
|
|
||||||
moreSSHOpts = append(moreSSHOpts, identityOpt)
|
|
||||||
}
|
|
||||||
if opts.SSHUser != "" {
|
|
||||||
userOpt := fmt.Sprintf("-l %s", shellescape.Quote(opts.SSHUser))
|
|
||||||
moreSSHOpts = append(moreSSHOpts, userOpt)
|
|
||||||
}
|
|
||||||
if opts.SSHPort != 0 {
|
|
||||||
portOpt := fmt.Sprintf("-p %d", opts.SSHPort)
|
|
||||||
moreSSHOpts = append(moreSSHOpts, portOpt)
|
|
||||||
}
|
|
||||||
if opts.SSHOptsStr != "" {
|
|
||||||
optsOpt := fmt.Sprintf("--ssh-opts %s", shellescape.Quote(opts.SSHOptsStr))
|
|
||||||
moreSSHOpts = append(moreSSHOpts, optsOpt)
|
|
||||||
}
|
|
||||||
if opts.SSHHost != "" {
|
|
||||||
sshArg := fmt.Sprintf("--ssh %s", shellescape.Quote(opts.SSHHost))
|
|
||||||
moreSSHOpts = append(moreSSHOpts, sshArg)
|
|
||||||
}
|
|
||||||
return strings.Join(moreSSHOpts, " ")
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetTerminalSize() (int, int, error) {
|
func GetTerminalSize() (int, int, error) {
|
||||||
fd, err := os.Open("/dev/tty")
|
fd, err := os.Open("/dev/tty")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -610,19 +585,19 @@ func ValidateRemoteFds(rfds []packet.RemoteFd) error {
|
|||||||
dupMap := make(map[int]bool)
|
dupMap := make(map[int]bool)
|
||||||
for _, rfd := range rfds {
|
for _, rfd := range rfds {
|
||||||
if rfd.FdNum < 0 {
|
if rfd.FdNum < 0 {
|
||||||
return fmt.Errorf("mshell negative fd numbers fd=%d", rfd.FdNum)
|
return fmt.Errorf("waveshell negative fd numbers fd=%d", rfd.FdNum)
|
||||||
}
|
}
|
||||||
if rfd.FdNum < FirstExtraFilesFdNum {
|
if rfd.FdNum < FirstExtraFilesFdNum {
|
||||||
return fmt.Errorf("mshell does not support re-opening fd=%d (0, 1, and 2, are always open)", rfd.FdNum)
|
return fmt.Errorf("waveshell does not support re-opening fd=%d (0, 1, and 2, are always open)", rfd.FdNum)
|
||||||
}
|
}
|
||||||
if rfd.FdNum > MaxFdNum {
|
if rfd.FdNum > MaxFdNum {
|
||||||
return fmt.Errorf("mshell does not support opening fd numbers above %d", MaxFdNum)
|
return fmt.Errorf("waveshell does not support opening fd numbers above %d", MaxFdNum)
|
||||||
}
|
}
|
||||||
if dupMap[rfd.FdNum] {
|
if dupMap[rfd.FdNum] {
|
||||||
return fmt.Errorf("mshell got duplicate entries for fd=%d", rfd.FdNum)
|
return fmt.Errorf("waveshell got duplicate entries for fd=%d", rfd.FdNum)
|
||||||
}
|
}
|
||||||
if rfd.Read && rfd.Write {
|
if rfd.Read && rfd.Write {
|
||||||
return fmt.Errorf("mshell does not support opening fd numbers for reading and writing, fd=%d", rfd.FdNum)
|
return fmt.Errorf("waveshell does not support opening fd numbers for reading and writing, fd=%d", rfd.FdNum)
|
||||||
}
|
}
|
||||||
if !rfd.Read && !rfd.Write {
|
if !rfd.Read && !rfd.Write {
|
||||||
return fmt.Errorf("invalid fd=%d, neither reading or writing mode specified", rfd.FdNum)
|
return fmt.Errorf("invalid fd=%d, neither reading or writing mode specified", rfd.FdNum)
|
||||||
@@ -632,14 +607,14 @@ func ValidateRemoteFds(rfds []packet.RemoteFd) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func sendMShellBinary(input io.WriteCloser, mshellStream io.Reader) {
|
func sendWaveshellBinary(input io.WriteCloser, waveshellStream io.Reader) {
|
||||||
go func() {
|
go func() {
|
||||||
defer input.Close()
|
defer input.Close()
|
||||||
io.Copy(input, mshellStream)
|
io.Copy(input, waveshellStream)
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
func RunInstallFromCmd(ctx context.Context, ecmd ConnInterface, tryDetect bool, mshellStream io.Reader, mshellReaderFn MShellBinaryReaderFn, msgFn func(string)) error {
|
func RunInstallFromCmd(ctx context.Context, ecmd ConnInterface, tryDetect bool, waveshellStream io.Reader, waveshellReaderFn WaveshellBinaryReaderFn, msgFn func(string)) error {
|
||||||
inputWriter, err := ecmd.StdinPipe()
|
inputWriter, err := ecmd.StdinPipe()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("creating stdin pipe: %v", err)
|
return fmt.Errorf("creating stdin pipe: %v", err)
|
||||||
@@ -655,8 +630,8 @@ func RunInstallFromCmd(ctx context.Context, ecmd ConnInterface, tryDetect bool,
|
|||||||
go func() {
|
go func() {
|
||||||
io.Copy(os.Stderr, stderrReader)
|
io.Copy(os.Stderr, stderrReader)
|
||||||
}()
|
}()
|
||||||
if mshellStream != nil {
|
if waveshellStream != nil {
|
||||||
sendMShellBinary(inputWriter, mshellStream)
|
sendWaveshellBinary(inputWriter, waveshellStream)
|
||||||
}
|
}
|
||||||
packetParser := packet.MakePacketParser(stdoutReader, nil)
|
packetParser := packet.MakePacketParser(stdoutReader, nil)
|
||||||
err = ecmd.Start()
|
err = ecmd.Start()
|
||||||
@@ -686,24 +661,24 @@ func RunInstallFromCmd(ctx context.Context, ecmd ConnInterface, tryDetect bool,
|
|||||||
}
|
}
|
||||||
goos, goarch, err := DetectGoArch(initPacket.UName)
|
goos, goarch, err := DetectGoArch(initPacket.UName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("arch cannot be detected (might be incompatible with mshell): %w", err)
|
return fmt.Errorf("arch cannot be detected (might be incompatible with waveshell): %w", err)
|
||||||
}
|
}
|
||||||
msgStr := fmt.Sprintf("mshell detected remote architecture as '%s.%s'\n", goos, goarch)
|
msgStr := fmt.Sprintf("waveshell detected remote architecture as '%s.%s'\n", goos, goarch)
|
||||||
msgFn(msgStr)
|
msgFn(msgStr)
|
||||||
detectedMSS, err := mshellReaderFn(base.MShellVersion, goos, goarch)
|
detectedMSS, err := waveshellReaderFn(base.WaveshellVersion, goos, goarch)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer detectedMSS.Close()
|
defer detectedMSS.Close()
|
||||||
sendMShellBinary(inputWriter, detectedMSS)
|
sendWaveshellBinary(inputWriter, detectedMSS)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if pk.GetType() == packet.InitPacketStr && !firstInit {
|
if pk.GetType() == packet.InitPacketStr && !firstInit {
|
||||||
initPacket := pk.(*packet.InitPacketType)
|
initPacket := pk.(*packet.InitPacketType)
|
||||||
if initPacket.Version == base.MShellVersion {
|
if initPacket.Version == base.WaveshellVersion {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return fmt.Errorf("invalid version '%s' received from client, expecting '%s'", initPacket.Version, base.MShellVersion)
|
return fmt.Errorf("invalid version '%s' received from client, expecting '%s'", initPacket.Version, base.WaveshellVersion)
|
||||||
}
|
}
|
||||||
if pk.GetType() == packet.RawPacketStr {
|
if pk.GetType() == packet.RawPacketStr {
|
||||||
rawPk := pk.(*packet.RawPacketType)
|
rawPk := pk.(*packet.RawPacketType)
|
||||||
@@ -770,7 +745,7 @@ func DetectGoArch(uname string) (string, string, error) {
|
|||||||
osVal := strings.TrimSpace(strings.ToLower(fields[0]))
|
osVal := strings.TrimSpace(strings.ToLower(fields[0]))
|
||||||
archVal := strings.TrimSpace(strings.ToLower(fields[1]))
|
archVal := strings.TrimSpace(strings.ToLower(fields[1]))
|
||||||
if osVal != "darwin" && osVal != "linux" {
|
if osVal != "darwin" && osVal != "linux" {
|
||||||
return "", "", fmt.Errorf("invalid uname OS '%s', mshell only supports OS X (darwin) and linux", osVal)
|
return "", "", fmt.Errorf("invalid uname OS '%s', waveshell only supports OS X (darwin) and linux", osVal)
|
||||||
}
|
}
|
||||||
goos := osVal
|
goos := osVal
|
||||||
goarch := ""
|
goarch := ""
|
||||||
@@ -780,7 +755,7 @@ func DetectGoArch(uname string) (string, string, error) {
|
|||||||
goarch = "arm64"
|
goarch = "arm64"
|
||||||
}
|
}
|
||||||
if goarch == "" {
|
if goarch == "" {
|
||||||
return "", "", fmt.Errorf("invalid uname machine type '%s', mshell only supports aarch64 (amd64) and x86_64 (amd64)", archVal)
|
return "", "", fmt.Errorf("invalid uname machine type '%s', waveshell only supports aarch64 (amd64) and x86_64 (amd64)", archVal)
|
||||||
}
|
}
|
||||||
if !base.ValidGoArch(goos, goarch) {
|
if !base.ValidGoArch(goos, goarch) {
|
||||||
return "", "", fmt.Errorf("invalid arch detected %s.%s", goos, goarch)
|
return "", "", fmt.Errorf("invalid arch detected %s.%s", goos, goarch)
|
||||||
@@ -975,7 +950,7 @@ func RunCommandSimple(pk *packet.RunPacketType, sender *packet.PacketSender, fro
|
|||||||
cmdTty.Close()
|
cmdTty.Close()
|
||||||
}()
|
}()
|
||||||
cmd.CmdPty = cmdPty
|
cmd.CmdPty = cmdPty
|
||||||
shellutil.UpdateCmdEnv(cmd.Cmd, shellutil.MShellEnvVars(getTermType(pk)))
|
shellutil.UpdateCmdEnv(cmd.Cmd, shellutil.WaveshellEnvVars(getTermType(pk)))
|
||||||
}
|
}
|
||||||
if cmdTty != nil {
|
if cmdTty != nil {
|
||||||
cmd.Cmd.Stdin = cmdTty
|
cmd.Cmd.Stdin = cmdTty
|
||||||
@@ -1151,8 +1126,8 @@ func (rs *ReturnStateBuf) Run() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// in detached run mode, we don't want mshell to die from signals
|
// in detached run mode, we don't want waveshell to die from signals since
|
||||||
// since we want mshell to persist even if the mshell --server is terminated
|
// we want waveshell to persist even if the waveshell --server is terminated
|
||||||
func SetupSignalsForDetach() {
|
func SetupSignalsForDetach() {
|
||||||
sigCh := make(chan os.Signal, 1)
|
sigCh := make(chan os.Signal, 1)
|
||||||
signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP, syscall.SIGPIPE)
|
signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP, syscall.SIGPIPE)
|
||||||
@@ -1163,8 +1138,8 @@ func SetupSignalsForDetach() {
|
|||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
// in detached run mode, we don't want mshell to die from signals
|
// in detached run mode, we don't want waveshell to die from signals since
|
||||||
// since we want mshell to persist even if the mshell --server is terminated
|
// we want waveshell to persist even if the waveshell --server is terminated
|
||||||
func IgnoreSigPipe() {
|
func IgnoreSigPipe() {
|
||||||
sigCh := make(chan os.Signal, 1)
|
sigCh := make(chan os.Signal, 1)
|
||||||
signal.Notify(sigCh, syscall.SIGPIPE)
|
signal.Notify(sigCh, syscall.SIGPIPE)
|
||||||
@@ -1241,10 +1216,10 @@ func (c *ShExecType) WaitForCommand() *packet.CmdDonePacketType {
|
|||||||
|
|
||||||
func MakeInitPacket() *packet.InitPacketType {
|
func MakeInitPacket() *packet.InitPacketType {
|
||||||
initPacket := packet.MakeInitPacket()
|
initPacket := packet.MakeInitPacket()
|
||||||
initPacket.Version = base.MShellVersion
|
initPacket.Version = base.WaveshellVersion
|
||||||
initPacket.BuildTime = base.BuildTime
|
initPacket.BuildTime = base.BuildTime
|
||||||
initPacket.HomeDir = base.GetHomeDir()
|
initPacket.HomeDir = base.GetHomeDir()
|
||||||
initPacket.MShellHomeDir = base.GetMShellHomeDir()
|
initPacket.WaveshellHomeDir = base.GetWaveshellHomeDir()
|
||||||
if user, _ := user.Current(); user != nil {
|
if user, _ := user.Current(); user != nil {
|
||||||
initPacket.User = user.Username
|
initPacket.User = user.Username
|
||||||
}
|
}
|
||||||
|
|||||||
+10
-10
@@ -452,12 +452,12 @@ func HandleWriteFile(w http.ResponseWriter, r *http.Request) {
|
|||||||
WriteJsonError(w, fmt.Errorf("invalid line, no remote"))
|
WriteJsonError(w, fmt.Errorf("invalid line, no remote"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
msh := remote.GetRemoteById(cmd.Remote.RemoteId)
|
wsh := remote.GetRemoteById(cmd.Remote.RemoteId)
|
||||||
if msh == nil {
|
if wsh == nil {
|
||||||
WriteJsonError(w, fmt.Errorf("invalid line, cannot resolve remote"))
|
WriteJsonError(w, fmt.Errorf("invalid line, cannot resolve remote"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
rrState := msh.GetRemoteRuntimeState()
|
rrState := wsh.GetRemoteRuntimeState()
|
||||||
fullPath, err := rrState.ExpandHomeDir(params.Path)
|
fullPath, err := rrState.ExpandHomeDir(params.Path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
WriteJsonError(w, fmt.Errorf("error expanding homedir: %v", err))
|
WriteJsonError(w, fmt.Errorf("error expanding homedir: %v", err))
|
||||||
@@ -472,7 +472,7 @@ func HandleWriteFile(w http.ResponseWriter, r *http.Request) {
|
|||||||
} else {
|
} else {
|
||||||
writePk.Path = filepath.Join(cwd, fullPath)
|
writePk.Path = filepath.Join(cwd, fullPath)
|
||||||
}
|
}
|
||||||
iter, err := msh.PacketRpcIter(r.Context(), writePk)
|
iter, err := wsh.PacketRpcIter(r.Context(), writePk)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
WriteJsonError(w, fmt.Errorf("error: %v", err))
|
WriteJsonError(w, fmt.Errorf("error: %v", err))
|
||||||
return
|
return
|
||||||
@@ -502,7 +502,7 @@ func HandleWriteFile(w http.ResponseWriter, r *http.Request) {
|
|||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
dataErr := fmt.Errorf("error reading file data: %v", err)
|
dataErr := fmt.Errorf("error reading file data: %v", err)
|
||||||
dataPk.Error = dataErr.Error()
|
dataPk.Error = dataErr.Error()
|
||||||
msh.SendFileData(dataPk)
|
wsh.SendFileData(dataPk)
|
||||||
WriteJsonError(w, dataErr)
|
WriteJsonError(w, dataErr)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -510,7 +510,7 @@ func HandleWriteFile(w http.ResponseWriter, r *http.Request) {
|
|||||||
dataPk.Data = make([]byte, nr)
|
dataPk.Data = make([]byte, nr)
|
||||||
copy(dataPk.Data, bufSlice[0:nr])
|
copy(dataPk.Data, bufSlice[0:nr])
|
||||||
}
|
}
|
||||||
msh.SendFileData(dataPk)
|
wsh.SendFileData(dataPk)
|
||||||
if dataPk.Eof {
|
if dataPk.Eof {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
@@ -581,13 +581,13 @@ func HandleReadFile(w http.ResponseWriter, r *http.Request) {
|
|||||||
w.Write([]byte("invalid line, no remote"))
|
w.Write([]byte("invalid line, no remote"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
msh := remote.GetRemoteById(cmd.Remote.RemoteId)
|
wsh := remote.GetRemoteById(cmd.Remote.RemoteId)
|
||||||
if msh == nil {
|
if wsh == nil {
|
||||||
w.WriteHeader(http.StatusInternalServerError)
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
w.Write([]byte("invalid line, cannot resolve remote"))
|
w.Write([]byte("invalid line, cannot resolve remote"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
rrState := msh.GetRemoteRuntimeState()
|
rrState := wsh.GetRemoteRuntimeState()
|
||||||
fullPath, err := rrState.ExpandHomeDir(path)
|
fullPath, err := rrState.ExpandHomeDir(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
WriteJsonError(w, fmt.Errorf("error expanding homedir: %v", err))
|
WriteJsonError(w, fmt.Errorf("error expanding homedir: %v", err))
|
||||||
@@ -601,7 +601,7 @@ func HandleReadFile(w http.ResponseWriter, r *http.Request) {
|
|||||||
} else {
|
} else {
|
||||||
streamPk.Path = filepath.Join(cwd, fullPath)
|
streamPk.Path = filepath.Join(cwd, fullPath)
|
||||||
}
|
}
|
||||||
iter, err := msh.StreamFile(r.Context(), streamPk)
|
iter, err := wsh.StreamFile(r.Context(), streamPk)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
w.WriteHeader(http.StatusInternalServerError)
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
w.Write([]byte(fmt.Sprintf("error trying to stream file: %v", err)))
|
w.Write([]byte(fmt.Sprintf("error trying to stream file: %v", err)))
|
||||||
|
|||||||
@@ -1311,7 +1311,7 @@ func checkForWriteFinished(ctx context.Context, iter *packet.RpcResponseIter) er
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func doCopyLocalFileToRemote(ctx context.Context, cmd *sstore.CmdType, remote_msh *remote.MShellProc, localPath string, destPath string, outputPos int64) {
|
func doCopyLocalFileToRemote(ctx context.Context, cmd *sstore.CmdType, remoteWsh *remote.WaveshellProc, localPath string, destPath string, outputPos int64) {
|
||||||
var exitSuccess bool
|
var exitSuccess bool
|
||||||
startTime := time.Now()
|
startTime := time.Now()
|
||||||
defer func() {
|
defer func() {
|
||||||
@@ -1326,7 +1326,7 @@ func doCopyLocalFileToRemote(ctx context.Context, cmd *sstore.CmdType, remote_ms
|
|||||||
writePk := packet.MakeWriteFilePacket()
|
writePk := packet.MakeWriteFilePacket()
|
||||||
writePk.ReqId = uuid.New().String()
|
writePk.ReqId = uuid.New().String()
|
||||||
writePk.Path = destPath
|
writePk.Path = destPath
|
||||||
iter, err := remote_msh.WriteFile(ctx, writePk)
|
iter, err := remoteWsh.WriteFile(ctx, writePk)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
writeStringToPty(ctx, cmd, fmt.Sprintf("Error starting file write: %v\r\n", err), &outputPos)
|
writeStringToPty(ctx, cmd, fmt.Sprintf("Error starting file write: %v\r\n", err), &outputPos)
|
||||||
return
|
return
|
||||||
@@ -1358,7 +1358,7 @@ func doCopyLocalFileToRemote(ctx context.Context, cmd *sstore.CmdType, remote_ms
|
|||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
dataErr := fmt.Sprintf("error reading file data: %v", err)
|
dataErr := fmt.Sprintf("error reading file data: %v", err)
|
||||||
dataPk.Error = dataErr
|
dataPk.Error = dataErr
|
||||||
remote_msh.SendFileData(dataPk)
|
remoteWsh.SendFileData(dataPk)
|
||||||
writeStringToPty(ctx, cmd, dataErr, &outputPos)
|
writeStringToPty(ctx, cmd, dataErr, &outputPos)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -1373,7 +1373,7 @@ func doCopyLocalFileToRemote(ctx context.Context, cmd *sstore.CmdType, remote_ms
|
|||||||
lastFileTransferPercentage = fileTransferPercentage
|
lastFileTransferPercentage = fileTransferPercentage
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
remote_msh.SendFileData(dataPk)
|
remoteWsh.SendFileData(dataPk)
|
||||||
if dataPk.Eof {
|
if dataPk.Eof {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
@@ -1405,7 +1405,7 @@ func getStatusBarString(filePercentageInt int) string {
|
|||||||
return statusBarString
|
return statusBarString
|
||||||
}
|
}
|
||||||
|
|
||||||
func doCopyRemoteFileToRemote(ctx context.Context, cmd *sstore.CmdType, sourceMsh *remote.MShellProc, destMsh *remote.MShellProc, sourcePath string, destPath string, outputPos int64) {
|
func doCopyRemoteFileToRemote(ctx context.Context, cmd *sstore.CmdType, sourceWsh *remote.WaveshellProc, destWsh *remote.WaveshellProc, sourcePath string, destPath string, outputPos int64) {
|
||||||
var exitSuccess bool
|
var exitSuccess bool
|
||||||
startTime := time.Now()
|
startTime := time.Now()
|
||||||
defer func() {
|
defer func() {
|
||||||
@@ -1414,7 +1414,7 @@ func doCopyRemoteFileToRemote(ctx context.Context, cmd *sstore.CmdType, sourceMs
|
|||||||
streamPk := packet.MakeStreamFilePacket()
|
streamPk := packet.MakeStreamFilePacket()
|
||||||
streamPk.ReqId = uuid.New().String()
|
streamPk.ReqId = uuid.New().String()
|
||||||
streamPk.Path = sourcePath
|
streamPk.Path = sourcePath
|
||||||
sourceStreamIter, err := sourceMsh.StreamFile(ctx, streamPk)
|
sourceStreamIter, err := sourceWsh.StreamFile(ctx, streamPk)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
writeStringToPty(ctx, cmd, fmt.Sprintf("Error getting file data packet: %v\r\n", err), &outputPos)
|
writeStringToPty(ctx, cmd, fmt.Sprintf("Error getting file data packet: %v\r\n", err), &outputPos)
|
||||||
return
|
return
|
||||||
@@ -1443,7 +1443,7 @@ func doCopyRemoteFileToRemote(ctx context.Context, cmd *sstore.CmdType, sourceMs
|
|||||||
writePk := packet.MakeWriteFilePacket()
|
writePk := packet.MakeWriteFilePacket()
|
||||||
writePk.ReqId = uuid.New().String()
|
writePk.ReqId = uuid.New().String()
|
||||||
writePk.Path = destPath
|
writePk.Path = destPath
|
||||||
destWriteIter, err := destMsh.WriteFile(ctx, writePk)
|
destWriteIter, err := destWsh.WriteFile(ctx, writePk)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
writeStringToPty(ctx, cmd, fmt.Sprintf("Error starting file write: %v\r\n", err), &outputPos)
|
writeStringToPty(ctx, cmd, fmt.Sprintf("Error starting file write: %v\r\n", err), &outputPos)
|
||||||
return
|
return
|
||||||
@@ -1482,7 +1482,7 @@ func doCopyRemoteFileToRemote(ctx context.Context, cmd *sstore.CmdType, sourceMs
|
|||||||
writeDataPk.Type = dataPk.Type
|
writeDataPk.Type = dataPk.Type
|
||||||
writeDataPk.Data = make([]byte, int64(len(dataPk.Data)))
|
writeDataPk.Data = make([]byte, int64(len(dataPk.Data)))
|
||||||
copy(writeDataPk.Data, dataPk.Data)
|
copy(writeDataPk.Data, dataPk.Data)
|
||||||
err = destMsh.SendFileData(writeDataPk)
|
err = destWsh.SendFileData(writeDataPk)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
writeStringToPty(ctx, cmd, fmt.Sprintf("error sending file to dest: %v\r\n", err), &outputPos)
|
writeStringToPty(ctx, cmd, fmt.Sprintf("error sending file to dest: %v\r\n", err), &outputPos)
|
||||||
return
|
return
|
||||||
@@ -1542,7 +1542,7 @@ func doCopyLocalFileToLocal(ctx context.Context, cmd *sstore.CmdType, sourcePath
|
|||||||
exitSuccess = true
|
exitSuccess = true
|
||||||
}
|
}
|
||||||
|
|
||||||
func doCopyRemoteFileToLocal(ctx context.Context, cmd *sstore.CmdType, remote_msh *remote.MShellProc, sourcePath string, localPath string, outputPos int64) {
|
func doCopyRemoteFileToLocal(ctx context.Context, cmd *sstore.CmdType, remoteWsh *remote.WaveshellProc, sourcePath string, localPath string, outputPos int64) {
|
||||||
var exitSuccess bool
|
var exitSuccess bool
|
||||||
startTime := time.Now()
|
startTime := time.Now()
|
||||||
defer func() {
|
defer func() {
|
||||||
@@ -1551,7 +1551,7 @@ func doCopyRemoteFileToLocal(ctx context.Context, cmd *sstore.CmdType, remote_ms
|
|||||||
streamPk := packet.MakeStreamFilePacket()
|
streamPk := packet.MakeStreamFilePacket()
|
||||||
streamPk.ReqId = uuid.New().String()
|
streamPk.ReqId = uuid.New().String()
|
||||||
streamPk.Path = sourcePath
|
streamPk.Path = sourcePath
|
||||||
iter, err := remote_msh.StreamFile(ctx, streamPk)
|
iter, err := remoteWsh.StreamFile(ctx, streamPk)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
writeStringToPty(ctx, cmd, fmt.Sprintf("Error getting file data packet: %v\r\n", err), &outputPos)
|
writeStringToPty(ctx, cmd, fmt.Sprintf("Error getting file data packet: %v\r\n", err), &outputPos)
|
||||||
return
|
return
|
||||||
@@ -1700,11 +1700,11 @@ func CopyFileCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (scb
|
|||||||
|
|
||||||
var sourceFullPath string
|
var sourceFullPath string
|
||||||
var destFullPath string
|
var destFullPath string
|
||||||
sourceMsh := sourceRemoteId.MShell
|
sourceWsh := sourceRemoteId.Waveshell
|
||||||
if sourceMsh == nil {
|
if sourceWsh == nil {
|
||||||
return nil, fmt.Errorf("failure getting source remote mshell")
|
return nil, fmt.Errorf("failure getting source remote waveshell")
|
||||||
}
|
}
|
||||||
sourceRRState := sourceMsh.GetRemoteRuntimeState()
|
sourceRRState := sourceWsh.GetRemoteRuntimeState()
|
||||||
sourcePathWithHome, err := sourceRRState.ExpandHomeDir(sourcePath)
|
sourcePathWithHome, err := sourceRRState.ExpandHomeDir(sourcePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("expand home dir err: %v", err)
|
return nil, fmt.Errorf("expand home dir err: %v", err)
|
||||||
@@ -1720,11 +1720,11 @@ func CopyFileCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (scb
|
|||||||
sourceFileName := filepath.Base(sourceFullPath)
|
sourceFileName := filepath.Base(sourceFullPath)
|
||||||
destPath = filepath.Join(destPath, sourceFileName)
|
destPath = filepath.Join(destPath, sourceFileName)
|
||||||
}
|
}
|
||||||
destMsh := destRemoteId.MShell
|
destWsh := destRemoteId.Waveshell
|
||||||
if destMsh == nil {
|
if destWsh == nil {
|
||||||
return nil, fmt.Errorf("failure getting dest remote mshell")
|
return nil, fmt.Errorf("failure getting dest remote waveshell")
|
||||||
}
|
}
|
||||||
destRRState := destMsh.GetRemoteRuntimeState()
|
destRRState := destWsh.GetRemoteRuntimeState()
|
||||||
destPathWithHome, err := destRRState.ExpandHomeDir(destPath)
|
destPathWithHome, err := destRRState.ExpandHomeDir(destPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("expand home dir err: %v", err)
|
return nil, fmt.Errorf("expand home dir err: %v", err)
|
||||||
@@ -1757,7 +1757,7 @@ func CopyFileCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (scb
|
|||||||
update.AddUpdate(sstore.InteractiveUpdate(pk.Interactive))
|
update.AddUpdate(sstore.InteractiveUpdate(pk.Interactive))
|
||||||
if destRemote != ConnectedRemote && destRemoteId != nil && !destRemoteId.RState.IsConnected() {
|
if destRemote != ConnectedRemote && destRemoteId != nil && !destRemoteId.RState.IsConnected() {
|
||||||
writeStringToPty(ctx, cmd, fmt.Sprintf("Attempting to autoconnect to remote %v\r\n", destRemote), &outputPos)
|
writeStringToPty(ctx, cmd, fmt.Sprintf("Attempting to autoconnect to remote %v\r\n", destRemote), &outputPos)
|
||||||
err = destRemoteId.MShell.TryAutoConnect()
|
err = destRemoteId.Waveshell.TryAutoConnect()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
writeStringToPty(ctx, cmd, fmt.Sprintf("Couldn't connect to remote %v\r\n", sourceRemote), &outputPos)
|
writeStringToPty(ctx, cmd, fmt.Sprintf("Couldn't connect to remote %v\r\n", sourceRemote), &outputPos)
|
||||||
} else {
|
} else {
|
||||||
@@ -1766,7 +1766,7 @@ func CopyFileCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (scb
|
|||||||
}
|
}
|
||||||
if sourceRemote != LocalRemote && sourceRemoteId != nil && !sourceRemoteId.RState.IsConnected() {
|
if sourceRemote != LocalRemote && sourceRemoteId != nil && !sourceRemoteId.RState.IsConnected() {
|
||||||
writeStringToPty(ctx, cmd, fmt.Sprintf("Attempting to autoconnect to remote %v\r\n", sourceRemote), &outputPos)
|
writeStringToPty(ctx, cmd, fmt.Sprintf("Attempting to autoconnect to remote %v\r\n", sourceRemote), &outputPos)
|
||||||
err = sourceRemoteId.MShell.TryAutoConnect()
|
err = sourceRemoteId.Waveshell.TryAutoConnect()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
writeStringToPty(ctx, cmd, fmt.Sprintf("Couldn't connect to remote %v\r\n", sourceRemote), &outputPos)
|
writeStringToPty(ctx, cmd, fmt.Sprintf("Couldn't connect to remote %v\r\n", sourceRemote), &outputPos)
|
||||||
} else {
|
} else {
|
||||||
@@ -1778,11 +1778,11 @@ func CopyFileCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (scb
|
|||||||
if destRemote == LocalRemote && sourceRemote == LocalRemote {
|
if destRemote == LocalRemote && sourceRemote == LocalRemote {
|
||||||
go doCopyLocalFileToLocal(context.Background(), cmd, sourceFullPath, destFullPath, outputPos)
|
go doCopyLocalFileToLocal(context.Background(), cmd, sourceFullPath, destFullPath, outputPos)
|
||||||
} else if destRemote == LocalRemote && sourceRemote != LocalRemote {
|
} else if destRemote == LocalRemote && sourceRemote != LocalRemote {
|
||||||
go doCopyRemoteFileToLocal(context.Background(), cmd, sourceMsh, sourceFullPath, destFullPath, outputPos)
|
go doCopyRemoteFileToLocal(context.Background(), cmd, sourceWsh, sourceFullPath, destFullPath, outputPos)
|
||||||
} else if destRemote != LocalRemote && sourceRemote == LocalRemote {
|
} else if destRemote != LocalRemote && sourceRemote == LocalRemote {
|
||||||
go doCopyLocalFileToRemote(context.Background(), cmd, destMsh, sourceFullPath, destFullPath, outputPos)
|
go doCopyLocalFileToRemote(context.Background(), cmd, destWsh, sourceFullPath, destFullPath, outputPos)
|
||||||
} else if destRemote != LocalRemote && sourceRemote != LocalRemote {
|
} else if destRemote != LocalRemote && sourceRemote != LocalRemote {
|
||||||
go doCopyRemoteFileToRemote(context.Background(), cmd, sourceMsh, destMsh, sourceFullPath, destFullPath, outputPos)
|
go doCopyRemoteFileToRemote(context.Background(), cmd, sourceWsh, destWsh, sourceFullPath, destFullPath, outputPos)
|
||||||
}
|
}
|
||||||
return update, nil
|
return update, nil
|
||||||
}
|
}
|
||||||
@@ -1792,8 +1792,8 @@ func RemoteInstallCommand(ctx context.Context, pk *scpacket.FeCommandPacketType)
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
mshell := ids.Remote.MShell
|
wshell := ids.Remote.Waveshell
|
||||||
go mshell.RunInstall(false)
|
go wshell.RunInstall(false)
|
||||||
return createRemoteViewRemoteIdUpdate(ids.Remote.RemotePtr.RemoteId), nil
|
return createRemoteViewRemoteIdUpdate(ids.Remote.RemotePtr.RemoteId), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1802,8 +1802,8 @@ func RemoteInstallCancelCommand(ctx context.Context, pk *scpacket.FeCommandPacke
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
mshell := ids.Remote.MShell
|
wshell := ids.Remote.Waveshell
|
||||||
go mshell.CancelInstall()
|
go wshell.CancelInstall()
|
||||||
return createRemoteViewRemoteIdUpdate(ids.Remote.RemotePtr.RemoteId), nil
|
return createRemoteViewRemoteIdUpdate(ids.Remote.RemotePtr.RemoteId), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1812,7 +1812,7 @@ func RemoteConnectCommand(ctx context.Context, pk *scpacket.FeCommandPacketType)
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
go ids.Remote.MShell.Launch(true)
|
go ids.Remote.Waveshell.Launch(true)
|
||||||
return createRemoteViewRemoteIdUpdate(ids.Remote.RemotePtr.RemoteId), nil
|
return createRemoteViewRemoteIdUpdate(ids.Remote.RemotePtr.RemoteId), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1822,7 +1822,7 @@ func RemoteDisconnectCommand(ctx context.Context, pk *scpacket.FeCommandPacketTy
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
force := resolveBool(pk.Kwargs["force"], false)
|
force := resolveBool(pk.Kwargs["force"], false)
|
||||||
go ids.Remote.MShell.Disconnect(force)
|
go ids.Remote.Waveshell.Disconnect(force)
|
||||||
return createRemoteViewRemoteIdUpdate(ids.Remote.RemotePtr.RemoteId), nil
|
return createRemoteViewRemoteIdUpdate(ids.Remote.RemotePtr.RemoteId), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2082,7 +2082,7 @@ func RemoteSetCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (sc
|
|||||||
}
|
}
|
||||||
visualEdit := resolveBool(pk.Kwargs["visual"], false)
|
visualEdit := resolveBool(pk.Kwargs["visual"], false)
|
||||||
isSubmitted := resolveBool(pk.Kwargs["submit"], false)
|
isSubmitted := resolveBool(pk.Kwargs["submit"], false)
|
||||||
editArgs, err := parseRemoteEditArgs(false, pk, ids.Remote.MShell.IsLocal())
|
editArgs, err := parseRemoteEditArgs(false, pk, ids.Remote.Waveshell.IsLocal())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return makeRemoteEditErrorReturn_edit(ids, visualEdit, fmt.Errorf("/remote:new %v", err))
|
return makeRemoteEditErrorReturn_edit(ids, visualEdit, fmt.Errorf("/remote:new %v", err))
|
||||||
}
|
}
|
||||||
@@ -2092,7 +2092,7 @@ func RemoteSetCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (sc
|
|||||||
if !visualEdit && len(editArgs.EditMap) == 0 {
|
if !visualEdit && len(editArgs.EditMap) == 0 {
|
||||||
return nil, fmt.Errorf("/remote:set no updates, can set %s. (set visual=1 to edit in UI)", formatStrs(RemoteSetArgs, "or", false))
|
return nil, fmt.Errorf("/remote:set no updates, can set %s. (set visual=1 to edit in UI)", formatStrs(RemoteSetArgs, "or", false))
|
||||||
}
|
}
|
||||||
err = ids.Remote.MShell.UpdateRemote(ctx, editArgs.EditMap)
|
err = ids.Remote.Waveshell.UpdateRemote(ctx, editArgs.EditMap)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return makeRemoteEditErrorReturn_edit(ids, visualEdit, fmt.Errorf("/remote:new error updating remote: %v", err))
|
return makeRemoteEditErrorReturn_edit(ids, visualEdit, fmt.Errorf("/remote:new error updating remote: %v", err))
|
||||||
}
|
}
|
||||||
@@ -2367,19 +2367,19 @@ func RemoteConfigParseCommand(ctx context.Context, pk *scpacket.FeCommandPacketT
|
|||||||
editMap[sstore.RemoteField_SSHKey] = hostInfo.SshKeyFile
|
editMap[sstore.RemoteField_SSHKey] = hostInfo.SshKeyFile
|
||||||
}
|
}
|
||||||
editMap[sstore.RemoteField_ShellPref] = hostInfo.ShellPref
|
editMap[sstore.RemoteField_ShellPref] = hostInfo.ShellPref
|
||||||
msh := remote.GetRemoteById(previouslyImportedRemote.RemoteId)
|
wsh := remote.GetRemoteById(previouslyImportedRemote.RemoteId)
|
||||||
if msh == nil {
|
if wsh == nil {
|
||||||
remoteChangeList["updateErr"] = append(remoteChangeList["updateErr"], hostInfo.CanonicalName)
|
remoteChangeList["updateErr"] = append(remoteChangeList["updateErr"], hostInfo.CanonicalName)
|
||||||
log.Printf("strange, msh for remote %s [%s] not found\n", hostInfo.CanonicalName, previouslyImportedRemote.RemoteId)
|
log.Printf("strange, wsh for remote %s [%s] not found\n", hostInfo.CanonicalName, previouslyImportedRemote.RemoteId)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if msh.Remote.ConnectMode == hostInfo.ConnectMode && msh.Remote.SSHOpts.SSHIdentity == hostInfo.SshKeyFile && msh.Remote.RemoteAlias == hostInfo.Host && msh.Remote.ShellPref == hostInfo.ShellPref {
|
if wsh.Remote.ConnectMode == hostInfo.ConnectMode && wsh.Remote.SSHOpts.SSHIdentity == hostInfo.SshKeyFile && wsh.Remote.RemoteAlias == hostInfo.Host && wsh.Remote.ShellPref == hostInfo.ShellPref {
|
||||||
// silently skip this one. it didn't fail, but no changes were needed
|
// silently skip this one. it didn't fail, but no changes were needed
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
err := msh.UpdateRemote(ctx, editMap)
|
err := wsh.UpdateRemote(ctx, editMap)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
remoteChangeList["updateErr"] = append(remoteChangeList["updateErr"], hostInfo.CanonicalName)
|
remoteChangeList["updateErr"] = append(remoteChangeList["updateErr"], hostInfo.CanonicalName)
|
||||||
log.Printf("error updating remote[%s]: %v\n", hostInfo.CanonicalName, err)
|
log.Printf("error updating remote[%s]: %v\n", hostInfo.CanonicalName, err)
|
||||||
@@ -2548,11 +2548,11 @@ func crShowCommand(ctx context.Context, pk *scpacket.FeCommandPacketType, ids re
|
|||||||
}
|
}
|
||||||
for _, ri := range riArr {
|
for _, ri := range riArr {
|
||||||
rptr := sstore.RemotePtrType{RemoteId: ri.RemoteId, Name: ri.Name}
|
rptr := sstore.RemotePtrType{RemoteId: ri.RemoteId, Name: ri.Name}
|
||||||
msh := remote.GetRemoteById(ri.RemoteId)
|
wsh := remote.GetRemoteById(ri.RemoteId)
|
||||||
if msh == nil {
|
if wsh == nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
baseDisplayName := msh.GetDisplayName()
|
baseDisplayName := wsh.GetDisplayName()
|
||||||
displayName := rptr.GetDisplayName(baseDisplayName)
|
displayName := rptr.GetDisplayName(baseDisplayName)
|
||||||
cwdStr := "-"
|
cwdStr := "-"
|
||||||
if ri.FeState["cwd"] != "" {
|
if ri.FeState["cwd"] != "" {
|
||||||
@@ -3006,17 +3006,17 @@ func CrCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (scbus.Upd
|
|||||||
if rstate.Archived {
|
if rstate.Archived {
|
||||||
return nil, fmt.Errorf("/%s error: remote %q cannot switch to archived remote", GetCmdStr(pk), newRemote)
|
return nil, fmt.Errorf("/%s error: remote %q cannot switch to archived remote", GetCmdStr(pk), newRemote)
|
||||||
}
|
}
|
||||||
newMsh := remote.GetRemoteById(rptr.RemoteId)
|
newWsh := remote.GetRemoteById(rptr.RemoteId)
|
||||||
if newMsh == nil {
|
if newWsh == nil {
|
||||||
return nil, fmt.Errorf("/%s error: remote %q not found (msh)", GetCmdStr(pk), newRemote)
|
return nil, fmt.Errorf("/%s error: remote %q not found (wsh)", GetCmdStr(pk), newRemote)
|
||||||
}
|
}
|
||||||
if !newMsh.IsConnected() {
|
if !newWsh.IsConnected() {
|
||||||
err := newMsh.TryAutoConnect()
|
err := newWsh.TryAutoConnect()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("%q is disconnected, auto-connect failed: %w", rstate.GetBaseDisplayName(), err)
|
return nil, fmt.Errorf("%q is disconnected, auto-connect failed: %w", rstate.GetBaseDisplayName(), err)
|
||||||
}
|
}
|
||||||
if !newMsh.IsConnected() {
|
if !newWsh.IsConnected() {
|
||||||
if newMsh.GetRemoteCopy().ConnectMode == sstore.ConnectModeManual {
|
if newWsh.GetRemoteCopy().ConnectMode == sstore.ConnectModeManual {
|
||||||
return nil, fmt.Errorf("%q is disconnected (must manually connect)", rstate.GetBaseDisplayName())
|
return nil, fmt.Errorf("%q is disconnected (must manually connect)", rstate.GetBaseDisplayName())
|
||||||
}
|
}
|
||||||
return nil, fmt.Errorf("%q is disconnected", rstate.GetBaseDisplayName())
|
return nil, fmt.Errorf("%q is disconnected", rstate.GetBaseDisplayName())
|
||||||
@@ -3057,7 +3057,7 @@ func CrCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (scbus.Upd
|
|||||||
ScreenId: ids.ScreenId,
|
ScreenId: ids.ScreenId,
|
||||||
RPtr: *rptr,
|
RPtr: *rptr,
|
||||||
}
|
}
|
||||||
go doAsyncResetCommand(newMsh, opts, cmd)
|
go doAsyncResetCommand(newWsh, opts, cmd)
|
||||||
return update, nil
|
return update, nil
|
||||||
} else {
|
} else {
|
||||||
outputStr := fmt.Sprintf("reconnected to %s", GetFullRemoteDisplayName(rptr, rstate))
|
outputStr := fmt.Sprintf("reconnected to %s", GetFullRemoteDisplayName(rptr, rstate))
|
||||||
@@ -3298,7 +3298,7 @@ func doCompGen(ctx context.Context, pk *scpacket.FeCommandPacketType, prefix str
|
|||||||
cgPacket.CompType = compType
|
cgPacket.CompType = compType
|
||||||
cgPacket.Prefix = prefix
|
cgPacket.Prefix = prefix
|
||||||
cgPacket.Cwd = ids.Remote.FeState["cwd"]
|
cgPacket.Cwd = ids.Remote.FeState["cwd"]
|
||||||
resp, err := ids.Remote.MShell.PacketRpc(ctx, cgPacket)
|
resp, err := ids.Remote.Waveshell.PacketRpc(ctx, cgPacket)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, false, err
|
return nil, false, err
|
||||||
}
|
}
|
||||||
@@ -3942,7 +3942,7 @@ func ClearSudoCache(ctx context.Context, pk *scpacket.FeCommandPacketType) (rtnU
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
ids.Remote.MShell.ClearCachedSudoPw()
|
ids.Remote.Waveshell.ClearCachedSudoPw()
|
||||||
pluralize := ""
|
pluralize := ""
|
||||||
|
|
||||||
clearAll := resolveBool(pk.Kwargs["all"], false)
|
clearAll := resolveBool(pk.Kwargs["all"], false)
|
||||||
@@ -3966,7 +3966,7 @@ func RemoteResetCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if !ids.Remote.MShell.IsConnected() {
|
if !ids.Remote.Waveshell.IsConnected() {
|
||||||
return nil, fmt.Errorf("cannot reinit, remote is not connected")
|
return nil, fmt.Errorf("cannot reinit, remote is not connected")
|
||||||
}
|
}
|
||||||
verbose := resolveBool(pk.Kwargs["verbose"], false)
|
verbose := resolveBool(pk.Kwargs["verbose"], false)
|
||||||
@@ -3994,7 +3994,7 @@ func RemoteResetCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (
|
|||||||
ScreenId: ids.ScreenId,
|
ScreenId: ids.ScreenId,
|
||||||
RPtr: ids.Remote.RemotePtr,
|
RPtr: ids.Remote.RemotePtr,
|
||||||
}
|
}
|
||||||
go doAsyncResetCommand(ids.Remote.MShell, opts, cmd)
|
go doAsyncResetCommand(ids.Remote.Waveshell, opts, cmd)
|
||||||
return update, nil
|
return update, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4007,7 +4007,7 @@ type connectOptsType struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// this does the asynchroneous part of the connection reset
|
// this does the asynchroneous part of the connection reset
|
||||||
func doAsyncResetCommand(msh *remote.MShellProc, opts connectOptsType, cmd *sstore.CmdType) {
|
func doAsyncResetCommand(wsh *remote.WaveshellProc, opts connectOptsType, cmd *sstore.CmdType) {
|
||||||
ctx, cancelFn := context.WithCancel(context.Background())
|
ctx, cancelFn := context.WithCancel(context.Background())
|
||||||
defer cancelFn()
|
defer cancelFn()
|
||||||
startTime := time.Now()
|
startTime := time.Now()
|
||||||
@@ -4025,7 +4025,7 @@ func doAsyncResetCommand(msh *remote.MShellProc, opts connectOptsType, cmd *ssto
|
|||||||
writeStringToPty(ctx, cmd, string(data), &outputPos)
|
writeStringToPty(ctx, cmd, string(data), &outputPos)
|
||||||
}
|
}
|
||||||
origStatePtr, _ := sstore.GetRemoteStatePtr(ctx, opts.SessionId, opts.ScreenId, opts.RPtr)
|
origStatePtr, _ := sstore.GetRemoteStatePtr(ctx, opts.SessionId, opts.ScreenId, opts.RPtr)
|
||||||
ssPk, err := msh.ReInit(ctx, base.MakeCommandKey(cmd.ScreenId, cmd.LineId), opts.ShellType, dataFn, opts.Verbose)
|
ssPk, err := wsh.ReInit(ctx, base.MakeCommandKey(cmd.ScreenId, cmd.LineId), opts.ShellType, dataFn, opts.Verbose)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
rtnErr = err
|
rtnErr = err
|
||||||
return
|
return
|
||||||
@@ -4296,11 +4296,11 @@ func resizeRunningCommand(ctx context.Context, cmd *sstore.CmdType, newCols int)
|
|||||||
feInput := scpacket.MakeFeInputPacket()
|
feInput := scpacket.MakeFeInputPacket()
|
||||||
feInput.CK = base.MakeCommandKey(cmd.ScreenId, cmd.LineId)
|
feInput.CK = base.MakeCommandKey(cmd.ScreenId, cmd.LineId)
|
||||||
feInput.WinSize = &packet.WinSize{Rows: int(cmd.TermOpts.Rows), Cols: newCols}
|
feInput.WinSize = &packet.WinSize{Rows: int(cmd.TermOpts.Rows), Cols: newCols}
|
||||||
msh := remote.GetRemoteById(cmd.Remote.RemoteId)
|
wsh := remote.GetRemoteById(cmd.Remote.RemoteId)
|
||||||
if msh == nil {
|
if wsh == nil {
|
||||||
return fmt.Errorf("cannot resize, cmd remote not found")
|
return fmt.Errorf("cannot resize, cmd remote not found")
|
||||||
}
|
}
|
||||||
err := msh.HandleFeInput(feInput)
|
err := wsh.HandleFeInput(feInput)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -4421,12 +4421,12 @@ func LineRestartCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (
|
|||||||
if cmd.Status == sstore.CmdStatusRunning || cmd.Status == sstore.CmdStatusDetached {
|
if cmd.Status == sstore.CmdStatusRunning || cmd.Status == sstore.CmdStatusDetached {
|
||||||
killCtx, cancel := context.WithTimeout(ctx, 2*time.Second)
|
killCtx, cancel := context.WithTimeout(ctx, 2*time.Second)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
err = ids.Remote.MShell.KillRunningCommandAndWait(killCtx, base.MakeCommandKey(ids.ScreenId, lineId))
|
err = ids.Remote.Waveshell.KillRunningCommandAndWait(killCtx, base.MakeCommandKey(ids.ScreenId, lineId))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ids.Remote.MShell.ResetDataPos(base.MakeCommandKey(ids.ScreenId, lineId))
|
ids.Remote.Waveshell.ResetDataPos(base.MakeCommandKey(ids.ScreenId, lineId))
|
||||||
err = sstore.ClearCmdPtyFile(ctx, ids.ScreenId, lineId)
|
err = sstore.ClearCmdPtyFile(ctx, ids.ScreenId, lineId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("error clearing existing pty file: %v", err)
|
return nil, fmt.Errorf("error clearing existing pty file: %v", err)
|
||||||
@@ -5065,8 +5065,8 @@ func ViewStatCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (scb
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
streamPk.StatOnly = true
|
streamPk.StatOnly = true
|
||||||
msh := ids.Remote.MShell
|
wsh := ids.Remote.Waveshell
|
||||||
iter, err := msh.StreamFile(ctx, streamPk)
|
iter, err := wsh.StreamFile(ctx, streamPk)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("/view:stat error: %v", err)
|
return nil, fmt.Errorf("/view:stat error: %v", err)
|
||||||
}
|
}
|
||||||
@@ -5116,8 +5116,8 @@ func ViewTestCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (scb
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
msh := ids.Remote.MShell
|
wsh := ids.Remote.Waveshell
|
||||||
iter, err := msh.StreamFile(ctx, streamPk)
|
iter, err := wsh.StreamFile(ctx, streamPk)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("/view:test error: %v", err)
|
return nil, fmt.Errorf("/view:test error: %v", err)
|
||||||
}
|
}
|
||||||
@@ -5413,8 +5413,8 @@ func EditTestCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (scb
|
|||||||
} else {
|
} else {
|
||||||
writePk.Path = filepath.Join(cwd, fileArg)
|
writePk.Path = filepath.Join(cwd, fileArg)
|
||||||
}
|
}
|
||||||
msh := ids.Remote.MShell
|
wsh := ids.Remote.Waveshell
|
||||||
iter, err := msh.PacketRpcIter(ctx, writePk)
|
iter, err := wsh.PacketRpcIter(ctx, writePk)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("/edit:test error: %v", err)
|
return nil, fmt.Errorf("/edit:test error: %v", err)
|
||||||
}
|
}
|
||||||
@@ -5433,7 +5433,7 @@ func EditTestCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (scb
|
|||||||
dataPk := packet.MakeFileDataPacket(writePk.ReqId)
|
dataPk := packet.MakeFileDataPacket(writePk.ReqId)
|
||||||
dataPk.Data = []byte(content)
|
dataPk.Data = []byte(content)
|
||||||
dataPk.Eof = true
|
dataPk.Eof = true
|
||||||
err = msh.SendFileData(dataPk)
|
err = wsh.SendFileData(dataPk)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("/edit:test error sending data packet: %v", err)
|
return nil, fmt.Errorf("/edit:test error sending data packet: %v", err)
|
||||||
}
|
}
|
||||||
@@ -5500,17 +5500,17 @@ func SignalCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (scbus
|
|||||||
if !sigNameRe.MatchString(sigArg) {
|
if !sigNameRe.MatchString(sigArg) {
|
||||||
return nil, fmt.Errorf("invalid signal name/number: %q", sigArg)
|
return nil, fmt.Errorf("invalid signal name/number: %q", sigArg)
|
||||||
}
|
}
|
||||||
msh := remote.GetRemoteById(cmd.Remote.RemoteId)
|
wsh := remote.GetRemoteById(cmd.Remote.RemoteId)
|
||||||
if msh == nil {
|
if wsh == nil {
|
||||||
return nil, fmt.Errorf("cannot send signal, no remote found for command")
|
return nil, fmt.Errorf("cannot send signal, no remote found for command")
|
||||||
}
|
}
|
||||||
if !msh.IsConnected() {
|
if !wsh.IsConnected() {
|
||||||
return nil, fmt.Errorf("cannot send signal, remote is not connected")
|
return nil, fmt.Errorf("cannot send signal, remote is not connected")
|
||||||
}
|
}
|
||||||
inputPk := scpacket.MakeFeInputPacket()
|
inputPk := scpacket.MakeFeInputPacket()
|
||||||
inputPk.CK = base.MakeCommandKey(cmd.ScreenId, cmd.LineId)
|
inputPk.CK = base.MakeCommandKey(cmd.ScreenId, cmd.LineId)
|
||||||
inputPk.SigName = sigArg
|
inputPk.SigName = sigArg
|
||||||
err = msh.HandleFeInput(inputPk)
|
err = wsh.HandleFeInput(inputPk)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("cannot send signal: %v", err)
|
return nil, fmt.Errorf("cannot send signal: %v", err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ type resolvedIds struct {
|
|||||||
type ResolvedRemote struct {
|
type ResolvedRemote struct {
|
||||||
DisplayName string
|
DisplayName string
|
||||||
RemotePtr sstore.RemotePtrType
|
RemotePtr sstore.RemotePtrType
|
||||||
MShell *remote.MShellProc
|
Waveshell *remote.WaveshellProc
|
||||||
RState remote.RemoteRuntimeState
|
RState remote.RemoteRuntimeState
|
||||||
RemoteCopy *sstore.RemoteType
|
RemoteCopy *sstore.RemoteType
|
||||||
ShellType string // default remote shell preference
|
ShellType string // default remote shell preference
|
||||||
@@ -201,11 +201,11 @@ func resolveRemoteArg(remoteArg string) (*sstore.RemotePtrType, error) {
|
|||||||
if rrUser != "" {
|
if rrUser != "" {
|
||||||
return nil, fmt.Errorf("remoteusers not supported")
|
return nil, fmt.Errorf("remoteusers not supported")
|
||||||
}
|
}
|
||||||
msh := remote.GetRemoteByArg(rrRemote)
|
wsh := remote.GetRemoteByArg(rrRemote)
|
||||||
if msh == nil {
|
if wsh == nil {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
rcopy := msh.GetRemoteCopy()
|
rcopy := wsh.GetRemoteCopy()
|
||||||
return &sstore.RemotePtrType{RemoteId: rcopy.RemoteId, Name: rrName}, nil
|
return &sstore.RemotePtrType{RemoteId: rcopy.RemoteId, Name: rrName}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -269,7 +269,7 @@ func resolveUiIds(ctx context.Context, pk *scpacket.FeCommandPacketType, rtype i
|
|||||||
}
|
}
|
||||||
if rtype&R_RemoteConnected > 0 {
|
if rtype&R_RemoteConnected > 0 {
|
||||||
if !rtn.Remote.RState.IsConnected() {
|
if !rtn.Remote.RState.IsConnected() {
|
||||||
err = rtn.Remote.MShell.TryAutoConnect()
|
err = rtn.Remote.Waveshell.TryAutoConnect()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return rtn, fmt.Errorf("error trying to auto-connect remote [%s]: %w", rtn.Remote.DisplayName, err)
|
return rtn, fmt.Errorf("error trying to auto-connect remote [%s]: %w", rtn.Remote.DisplayName, err)
|
||||||
}
|
}
|
||||||
@@ -464,18 +464,18 @@ func ResolveRemoteFromPtr(ctx context.Context, rptr *sstore.RemotePtrType, sessi
|
|||||||
if rptr == nil || rptr.RemoteId == "" {
|
if rptr == nil || rptr.RemoteId == "" {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
msh := remote.GetRemoteById(rptr.RemoteId)
|
wsh := remote.GetRemoteById(rptr.RemoteId)
|
||||||
if msh == nil {
|
if wsh == nil {
|
||||||
return nil, fmt.Errorf("invalid remote '%s', not found", rptr.RemoteId)
|
return nil, fmt.Errorf("invalid remote '%s', not found", rptr.RemoteId)
|
||||||
}
|
}
|
||||||
rstate := msh.GetRemoteRuntimeState()
|
rstate := wsh.GetRemoteRuntimeState()
|
||||||
rcopy := msh.GetRemoteCopy()
|
rcopy := wsh.GetRemoteCopy()
|
||||||
displayName := rstate.GetDisplayName(rptr)
|
displayName := rstate.GetDisplayName(rptr)
|
||||||
rtn := &ResolvedRemote{
|
rtn := &ResolvedRemote{
|
||||||
DisplayName: displayName,
|
DisplayName: displayName,
|
||||||
RemotePtr: *rptr,
|
RemotePtr: *rptr,
|
||||||
RState: rstate,
|
RState: rstate,
|
||||||
MShell: msh,
|
Waveshell: wsh,
|
||||||
RemoteCopy: &rcopy,
|
RemoteCopy: &rcopy,
|
||||||
StatePtr: nil,
|
StatePtr: nil,
|
||||||
FeState: nil,
|
FeState: nil,
|
||||||
@@ -488,7 +488,7 @@ func ResolveRemoteFromPtr(ctx context.Context, rptr *sstore.RemotePtrType, sessi
|
|||||||
// continue with state set to nil
|
// continue with state set to nil
|
||||||
} else {
|
} else {
|
||||||
if ri == nil {
|
if ri == nil {
|
||||||
rtn.ShellType = msh.GetShellPref()
|
rtn.ShellType = wsh.GetShellPref()
|
||||||
rtn.StatePtr = nil
|
rtn.StatePtr = nil
|
||||||
rtn.FeState = nil
|
rtn.FeState = nil
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -65,8 +65,8 @@ func doCompGen(ctx context.Context, prefix string, compType string, compCtx Comp
|
|||||||
if !packet.IsValidCompGenType(compType) {
|
if !packet.IsValidCompGenType(compType) {
|
||||||
return nil, fmt.Errorf("/_compgen invalid type '%s'", compType)
|
return nil, fmt.Errorf("/_compgen invalid type '%s'", compType)
|
||||||
}
|
}
|
||||||
msh := remote.GetRemoteById(compCtx.RemotePtr.RemoteId)
|
wsh := remote.GetRemoteById(compCtx.RemotePtr.RemoteId)
|
||||||
if msh == nil {
|
if wsh == nil {
|
||||||
return nil, fmt.Errorf("invalid remote '%s', not found", compCtx.RemotePtr)
|
return nil, fmt.Errorf("invalid remote '%s', not found", compCtx.RemotePtr)
|
||||||
}
|
}
|
||||||
cgPacket := packet.MakeCompGenPacket()
|
cgPacket := packet.MakeCompGenPacket()
|
||||||
@@ -74,7 +74,7 @@ func doCompGen(ctx context.Context, prefix string, compType string, compCtx Comp
|
|||||||
cgPacket.CompType = compType
|
cgPacket.CompType = compType
|
||||||
cgPacket.Prefix = prefix
|
cgPacket.Prefix = prefix
|
||||||
cgPacket.Cwd = compCtx.Cwd
|
cgPacket.Cwd = compCtx.Cwd
|
||||||
resp, err := msh.PacketRpc(ctx, cgPacket)
|
resp, err := wsh.PacketRpc(ctx, cgPacket)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
+656
-656
File diff suppressed because it is too large
Load Diff
@@ -36,7 +36,7 @@ const WaveDirName = ".waveterm" // must match emain.ts
|
|||||||
const WaveDevDirName = ".waveterm-dev" // must match emain.ts
|
const WaveDevDirName = ".waveterm-dev" // must match emain.ts
|
||||||
const WaveAppPathVarName = "WAVETERM_APP_PATH"
|
const WaveAppPathVarName = "WAVETERM_APP_PATH"
|
||||||
const WaveAuthKeyFileName = "waveterm.authkey"
|
const WaveAuthKeyFileName = "waveterm.authkey"
|
||||||
const MShellVersion = "v0.7.0" // must match base.MShellVersion
|
const WaveshellVersion = "v0.7.0" // must match base.WaveshellVersion
|
||||||
|
|
||||||
// initialized by InitialzeWaveAuthKey (called by main-server)
|
// initialized by InitialzeWaveAuthKey (called by main-server)
|
||||||
var WaveAuthKey string
|
var WaveAuthKey string
|
||||||
@@ -73,7 +73,7 @@ func GetWaveHomeDir() string {
|
|||||||
return scHome
|
return scHome
|
||||||
}
|
}
|
||||||
|
|
||||||
func MShellBinaryDir() string {
|
func WaveshellBinaryDir() string {
|
||||||
appPath := os.Getenv(WaveAppPathVarName)
|
appPath := os.Getenv(WaveAppPathVarName)
|
||||||
if appPath == "" {
|
if appPath == "" {
|
||||||
appPath = "."
|
appPath = "."
|
||||||
@@ -81,32 +81,32 @@ func MShellBinaryDir() string {
|
|||||||
return filepath.Join(appPath, "bin", "mshell")
|
return filepath.Join(appPath, "bin", "mshell")
|
||||||
}
|
}
|
||||||
|
|
||||||
func MShellBinaryPath(version string, goos string, goarch string) (string, error) {
|
func WaveshellBinaryPath(version string, goos string, goarch string) (string, error) {
|
||||||
if !base.ValidGoArch(goos, goarch) {
|
if !base.ValidGoArch(goos, goarch) {
|
||||||
return "", fmt.Errorf("invalid goos/goarch combination: %s/%s", goos, goarch)
|
return "", fmt.Errorf("invalid goos/goarch combination: %s/%s", goos, goarch)
|
||||||
}
|
}
|
||||||
binaryDir := MShellBinaryDir()
|
binaryDir := WaveshellBinaryDir()
|
||||||
versionStr := semver.MajorMinor(version)
|
versionStr := semver.MajorMinor(version)
|
||||||
if versionStr == "" {
|
if versionStr == "" {
|
||||||
return "", fmt.Errorf("invalid mshell version: %q", version)
|
return "", fmt.Errorf("invalid waveshell version: %q", version)
|
||||||
}
|
}
|
||||||
fileName := fmt.Sprintf("mshell-%s-%s.%s", versionStr, goos, goarch)
|
fileName := fmt.Sprintf("mshell-%s-%s.%s", versionStr, goos, goarch)
|
||||||
fullFileName := filepath.Join(binaryDir, fileName)
|
fullFileName := filepath.Join(binaryDir, fileName)
|
||||||
return fullFileName, nil
|
return fullFileName, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func LocalMShellBinaryPath() (string, error) {
|
func LocalWaveshellBinaryPath() (string, error) {
|
||||||
return MShellBinaryPath(MShellVersion, runtime.GOOS, runtime.GOARCH)
|
return WaveshellBinaryPath(WaveshellVersion, runtime.GOOS, runtime.GOARCH)
|
||||||
}
|
}
|
||||||
|
|
||||||
func MShellBinaryReader(version string, goos string, goarch string) (io.ReadCloser, error) {
|
func WaveshellBinaryReader(version string, goos string, goarch string) (io.ReadCloser, error) {
|
||||||
mshellPath, err := MShellBinaryPath(version, goos, goarch)
|
waveshellPath, err := WaveshellBinaryPath(version, goos, goarch)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
fd, err := os.Open(mshellPath)
|
fd, err := os.Open(waveshellPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("cannot open mshell binary %q: %v", mshellPath, err)
|
return nil, fmt.Errorf("cannot open waveshell binary %q: %v", waveshellPath, err)
|
||||||
}
|
}
|
||||||
return fd, nil
|
return fd, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -326,9 +326,9 @@ func sendCmdInput(pk *scpacket.FeInputPacketType) error {
|
|||||||
if pk.Remote.RemoteId == "" {
|
if pk.Remote.RemoteId == "" {
|
||||||
return fmt.Errorf("input must set remoteid")
|
return fmt.Errorf("input must set remoteid")
|
||||||
}
|
}
|
||||||
msh := remote.GetRemoteById(pk.Remote.RemoteId)
|
wsh := remote.GetRemoteById(pk.Remote.RemoteId)
|
||||||
if msh == nil {
|
if wsh == nil {
|
||||||
return fmt.Errorf("remote %s not found", pk.Remote.RemoteId)
|
return fmt.Errorf("remote %s not found", pk.Remote.RemoteId)
|
||||||
}
|
}
|
||||||
return msh.HandleFeInput(pk)
|
return wsh.HandleFeInput(pk)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -751,10 +751,10 @@ func UpdateCmdForRestart(ctx context.Context, ck base.CommandKey, ts int64, cmdP
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func UpdateCmdStartInfo(ctx context.Context, ck base.CommandKey, cmdPid int, mshellPid int) error {
|
func UpdateCmdStartInfo(ctx context.Context, ck base.CommandKey, cmdPid int, waveshellPid int) error {
|
||||||
return WithTx(ctx, func(tx *TxWrap) error {
|
return WithTx(ctx, func(tx *TxWrap) error {
|
||||||
query := `UPDATE cmd SET cmdpid = ?, remotepid = ? WHERE screenid = ? AND lineid = ?`
|
query := `UPDATE cmd SET cmdpid = ?, remotepid = ? WHERE screenid = ? AND lineid = ?`
|
||||||
tx.Exec(query, cmdPid, mshellPid, ck.GetGroupId(), lineIdFromCK(ck))
|
tx.Exec(query, cmdPid, waveshellPid, ck.GetGroupId(), lineIdFromCK(ck))
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -758,34 +758,34 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type RemoteRuntimeState struct {
|
type RemoteRuntimeState struct {
|
||||||
RemoteType string `json:"remotetype"`
|
RemoteType string `json:"remotetype"`
|
||||||
RemoteId string `json:"remoteid"`
|
RemoteId string `json:"remoteid"`
|
||||||
RemoteAlias string `json:"remotealias,omitempty"`
|
RemoteAlias string `json:"remotealias,omitempty"`
|
||||||
RemoteCanonicalName string `json:"remotecanonicalname"`
|
RemoteCanonicalName string `json:"remotecanonicalname"`
|
||||||
RemoteVars map[string]string `json:"remotevars"`
|
RemoteVars map[string]string `json:"remotevars"`
|
||||||
Status string `json:"status"`
|
Status string `json:"status"`
|
||||||
ConnectTimeout int `json:"connecttimeout,omitempty"`
|
ConnectTimeout int `json:"connecttimeout,omitempty"`
|
||||||
CountdownActive bool `json:"countdownactive"`
|
CountdownActive bool `json:"countdownactive"`
|
||||||
ErrorStr string `json:"errorstr,omitempty"`
|
ErrorStr string `json:"errorstr,omitempty"`
|
||||||
InstallStatus string `json:"installstatus"`
|
InstallStatus string `json:"installstatus"`
|
||||||
InstallErrorStr string `json:"installerrorstr,omitempty"`
|
InstallErrorStr string `json:"installerrorstr,omitempty"`
|
||||||
NeedsMShellUpgrade bool `json:"needsmshellupgrade,omitempty"`
|
NeedsWaveshellUpgrade bool `json:"needswaveshellupgrade,omitempty"`
|
||||||
NoInitPk bool `json:"noinitpk,omitempty"`
|
NoInitPk bool `json:"noinitpk,omitempty"`
|
||||||
AuthType string `json:"authtype,omitempty"`
|
AuthType string `json:"authtype,omitempty"`
|
||||||
ConnectMode string `json:"connectmode"`
|
ConnectMode string `json:"connectmode"`
|
||||||
AutoInstall bool `json:"autoinstall"`
|
AutoInstall bool `json:"autoinstall"`
|
||||||
Archived bool `json:"archived,omitempty"`
|
Archived bool `json:"archived,omitempty"`
|
||||||
RemoteIdx int64 `json:"remoteidx"`
|
RemoteIdx int64 `json:"remoteidx"`
|
||||||
SSHConfigSrc string `json:"sshconfigsrc"`
|
SSHConfigSrc string `json:"sshconfigsrc"`
|
||||||
UName string `json:"uname"`
|
UName string `json:"uname"`
|
||||||
MShellVersion string `json:"mshellversion"`
|
WaveshellVersion string `json:"waveshellversion"`
|
||||||
WaitingForPassword bool `json:"waitingforpassword,omitempty"`
|
WaitingForPassword bool `json:"waitingforpassword,omitempty"`
|
||||||
Local bool `json:"local,omitempty"`
|
Local bool `json:"local,omitempty"`
|
||||||
IsSudo bool `json:"issudo,omitempty"`
|
IsSudo bool `json:"issudo,omitempty"`
|
||||||
RemoteOpts *RemoteOptsType `json:"remoteopts,omitempty"`
|
RemoteOpts *RemoteOptsType `json:"remoteopts,omitempty"`
|
||||||
CanComplete bool `json:"cancomplete,omitempty"`
|
CanComplete bool `json:"cancomplete,omitempty"`
|
||||||
ShellPref string `json:"shellpref,omitempty"`
|
ShellPref string `json:"shellpref,omitempty"`
|
||||||
DefaultShellType string `json:"defaultshelltype,omitempty"`
|
DefaultShellType string `json:"defaultshelltype,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (state RemoteRuntimeState) IsConnected() bool {
|
func (state RemoteRuntimeState) IsConnected() bool {
|
||||||
|
|||||||
Reference in New Issue
Block a user