* feat: add gui elements to configure ssh pw cache
This adds a dropdown for on/off/notimeout, a number entry box for a
timeout value, and a toggle for clearing when the computer sleeps.
* fix: improve password timeout entry
This makes the password timeout more consistent by using an inline
settings element. It also creates the inline settings element to parse
the input.
* feat: turn sudo password caching on and off
* feat: use configurable sudo timeout
This makes it possible to control how long waveterm stores your sudo
password. Note that if it changes, it immediately clears the cached
passwords.
* fix: clear existing sudo passwords if switched off
When the sudo password store state is changed to "off", all existing
passwords must immediately be cleared automatically.
* feat: allow clearing sudo passwords on suspend
This option makes it so the sudo passwords will be cleared when the
computer falls asleep. It will never be used in the case where the
password is set to never time out.
* feat: allow notimeout to prevent sudo pw clear
This option allows the sudo timeout to be ignored while it is selected.
* feat: adjust current deadline based on user config
This allows the deadline to update as changes to the config are
happening.
* fix: reject a sudopwtimeout of 0 on the backend
* fix: use the default sudoPwTimeout for empty input
* fix: specify the timeout length is minutes
* fix: store sudopwtimeout in ms instead of minutes
* fix: formatting the default sudo timeout
By changing the order of operations, this no longer shows up as NaN if
the default is used.
* refactor: consolidate inlinesettingstextedit
This removes the number variant and combines them into the same class
with an option to switch between the two behaviors.
* refactor: consolidate textfield and numberfield
This removes the number variant of textfield. The textfield component
can now act as a numberfield when the optional isNumber prop is true.
* added ai timeout setting
* addressed review comments
* fixed baseurl gating for telemetry
* updated copy
* addressed review comments
* removed prefix for client:show and added units to timeout
* changed timeout to use ms precision
* save work
* reusable StyleBlock component
* StyleBlock in elements dir
* root level
* ability to inherit root styles
* change prop from classname to selector
* selector should always be :root
* remove selector prop from StyleBlock
* working
* cleanup
* loadThemeStyles doesn't have to be async
* revert changes in tabs2.less
* remove old implementation
* cleanup
* remove file from another branch
* fix issue where line in history view doesn't reflect the terminal theme
* add key and value validation
* add label to tab settings terminal theme dropdown
* save work
* save work
* save work
* working
* trigger componentDidUpdate when switching tabs and sessions
* cleanup
* save work
* save work
* use UpdatePacket for theme changes as well
* make methods cohesive
* use themes coming from backend
* reload terminal when styel block is unmounted and mounted
* fix validation
* re-render terminal when theme is updated
* remove test styles
* cleanup
* more cleanup
* revert unneeded change
* more cleanup
* fix type
* more cleanup
* render style blocks in the header instead of body using portal
* add ability to reuse and dispose TermThemes instance and file watcher
* remove comment
* minor change
* separate filewatcher as singleton
* do not render app when term theme style blocks aren't rendered first
* only render main when termstyles have been rendered already
* add comment
* use DoUpdate to send themes to front-end
* support to watch subdirectories
* added support for watch subdirectories
* make watcher more flexible so it can be closed anywhere
* cleanup
* undo the app/main split
* use TermThemesType in creating initial value for Themes field
* simplify code
* fix issue where dropdown label doesn't float when the theme selected is Inherit
* remove unsed var
* start watcher in main, merge themes (don't overwrite) on event.
* ensure terminal-themes directory is created on startup
* ah, wait for termThemes to be set (the connect packet needs to have been processed to proceed with rendering)
* Simplify scrollHistoryItemIntoView
* remove unnecessary block argument
* actually the block nearest is necessary, otherwise the scroll will jump even if the item is already in view
* keybinding fixes
* changed screen and session commands to functions rather than slash commands to avoid printing errors
* added a static wait for console commands
* added sleep hardcode
* add an isArray check for commandStr
* Make the auxView tilebar optional and make sure it flows as part of the flexbox
* simplify condition
* fix ai chat scroll direction
* remove unnecessary change
* remove unused class
* fix: ignore computer sleep for telemetry clock
This uses unix time with regular integer comparisons to prevent the
telemetry clock from needing to wait for 8 hours of the program running.
Now, it only needs to wait 8 real-time hours instead.
* drop telemetry time to 4 hours, tick every 10 minutes
* create tab context menu (for close tab)
* small update to ctx menu, also make all tab deletes (including keybinding) not popup confirm modal if less than 10 blocks
* feat: share sudo between pty sessions
This is a first pass at a feature to cache the sudo password and share
it between different pty sessions. This makes it possible to not require
manual password entry every time sudo is used.
* feat: allow error handling and canceling sudo cmds
This adds the missing functionality that prevented failed sudo commands
from automatically closing.
* feat: restrict sudo caching to dev mode for now
* modify fullCmdStr not pk.Command
* refactor: condense ecdh encryptor creation
This refactors the common pieces needed to create an encryptor from an
ecdh key pair into a common function.
* refactor: rename promptenc to waveenc
* feat: add command to clear sudo password
We currently do not provide use of the sudo -k and sudo -K commands to
clear the sudo password. This adds a /sudo:clear command to handle it in
the meantime.
* feat: add kwarg to force sudo
In cases where parsing for sudo doesn't work, this provides an alternate
wave kwarg to use instead. It can be used with [sudo=1] at the beginning
of a command.
* refactor: simplify sudoArg parsing
* feat: allow user to clear all sudo passwords
This introduces the "all" kwarg for the sudo:clear command in order to
clear all sudo passwords.
* fix: handle deadline with real time
Golang's time module uses monatomic time by default, but that is not
desired for the password timeout since we want the timer to continue
even if the computer is asleep. We now avoid this by directly comparing
the unix timestamps.
* fix: remove sudo restriction to dev mode
This allows it to be used in regular builds as well.
* fix: switch to password timeout without wait group
This removes an unnecessary waiting period for sudo password entry.
* fix: update deadline in sudo:clear
This allows sudo:clear to cancel the goroutine for watching the password
timer.
* fix: pluralize sudo:clear message when all=1
This changes the output message for /sudo:clear to indicate multiple
passwords cleared if the all=1 kwarg is used.
* fix: use GetRemoteMap for getting remotes in clear
The sudo:clear command was directly looping over the GlobalStore.Map
which is not thread safe. Switched to GetRemoteMap which uses a lock
internally.
* fix: allow sudo metacmd to set sudo false
This fixes the logic for resolving if a command is a sudo command. This
change makes it possible for the sudo metacmd kwarg to force sudo to be
false.