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.
* add command validation to shellapi. mock out bash/zsh versions
* implement validate command fn bash and zsh
* test validate command
* change rtnstate commands to always end with a builtin, so we always get our exit trap to run
* simplify the rtnstate modification, don't add the 'wait' (as this is a different problem/feature)
* update schema
* refactor launch code to integrate install easier
The previous set up of launch was difficult to navigate. This makes it
much clearer which will make the auto install flow easier to manage.
* feat: integrate auto install into new ssh setup
This change makes it possible to auto install using the ssh library
instead of making a call to the ssh cli command. This will auto install
if the installed waveshell version is incorrect or cannot be found.
* chore: clean up some lints for sshclient
There was a context that didn't have it's cancel function deferred and
an error that wasn't being handle. They're fixed now.
* fix: disconnect client if requested or launch fail
A recent commit made it so a client remained part of the MShellProc
after being disconnected. This is undesireable since a manual
disconnection indicates that the user will need to enter their
credentials again if required. Similarly, if the launch fails with an
error, the expectation is that credentials will have to be entered
again.
* fix: use legacy timer for the time being
The legacy timer frustrates me because it adds a lot of state to the
MShellProc struct that is complicated to manage. But it currently works,
so I will be keeping it for the time being.
* fix: change separator between remoteref and name
With the inclusion of the port number in the canonical id, the :
separator between the remoteref and remote name causes problems if the
port is parsed instead. This changes it to a # in order to avoid this
conflict.
* fix: check for null when closing extra files
It is possible for the list of extra files to contain null files. This
change ensures the null files will not be erroneously closed.
* fix: change connecting method to show port once
With port added to the canonicalname, it no longer makes sense to append
the port afterward.
* feat: use user input modal for sudo connection
The sudo connection used to have a unique way of entering a password.
This change provides an alternative method using the user input modal
that the other connection methods use. It does not work perfectly with
this revision, but the basic building blocks are in place. It needs a
few timer updates to be complete.
* fix: remove old timer to prevent conflicts with it
With this change the old timer is no longer needed. It is not fully
removed yet, but it is disabled so as to not get in the way.
Additionally, error handling has been slightly improved.
There is still a bug where an incorrect password prints a new password
prompt after the error message. That needs to be fixed in the future.
* create proof of concept ssh library integration
This is a first attempt to integrate the golang crypto/ssh library for
handling remote connections. As it stands, this features is limited to
identity files without passphrases. It needs to be expanded to include
key+passphrase and password verifications as well.
* add password and keyboard-interactive ssh auth
This adds several new ssh auth methods. In addition to the PublicKey
method used previously, this adds password authentication,
keyboard-interactive authentication, and PublicKey+Passphrase
authentication.
Furthermore, it refactores the ssh connection code into its own wavesrv
file rather than storing int in waveshell's shexec file.
* clean up old mshell launch methods
In the debugging the addition of the ssh library, i had several versions
of the MShellProc Launch function. Since this seems mostly stable, I
have removed the old version and the experimental version in favor of
the combined version.
* allow switching between new and old ssh for dev
It is inconvenient to create milestones without being able to merge into
the main branch. But due to the experimental nature of the ssh changes,
it is not desired to use these changes in the main branch yet. This
change disables the new ssh launcher by default. It can be used by
changing the UseSshLibrary constant to true in remote.go. With this, it
becomes possible to merge these changes into the main branch without
them being used in production.
* fix: allow retry after ssh auth failure
Previously, the error status was not set when an ssh connection failed.
Because of this, an ssh connection failure would lock the failed remote
until waveterm was rebooted. This fix properly sets the error status so
this cannot happen.
* take a stab at fixing #99. ignore invalid output before we see a real packet. the complication here was ensuring we always output a real packet in every flow so we don't actually lose valid errors.
* add ping packets to prime the parser (when in ignoreUntilValid mode)