With a single-line prompt, the last line of the output of the previous
command is overwritten by the prompt on the enter_accept. In this
situation, `tput cuu` receives 0 as the argument, but `tput cuu 0`
emits the control sequence `\e[0A`, which moves the cursor above by
one line unexpectedly. This is because the parameter 0 for CUU means
the default value, 1. In this patch, to avoid moving the cursor when
the prompt offset is 0, we check the offset value before running `tput
cuu`.
* Add TLS to atuin-server
atuin as a project already includes most of the dependencies necessary
for server-side TLS. This allows `atuin server start` to use a TLS
certificate when self-hosting in order to avoid the complication of
wrapping it in a TLS-aware proxy server.
Configuration is handled similar to the metrics server with its own
struct and currently accepts only the private key and certificate file
paths.
Starting a TLS server and a TCP server are divergent because the tests
need to bind to an arbitrary port to avoid collisions across tests. The
API to accomplish this for a TLS server is much more verbose.
* Fix clippy, fmt
* Add TLS section to self-hosting
* feat: add semver checking to client requests
This enforces that the client and the server run the same major version
in order to sync successfully.
We're using the `Atuin-Version` http header to transfer this information
If the user is not on the same MAJOR, then they will see an error like
this
> Atuin version mismatch! In order to successfully sync, the client and the server must run the same *major* version
> Client: 17.1.0
> Server: 18.1.0
> Error: could not sync records due to version mismatch
This change means two things
1. We will now only increment major versions if there is a breaking
change for sync
2. We can now add breaking changes to sync, for any version >17.1.0.
Clients will fail in a meaningful way.
* lint, fmt, etc
* only check for client newer than server
* Add version header to client too
Before this change, when configuring only `common_subcommands` and
not `common_prefix` (so it would take its default value),
atuin produces an error message:
```
Error: could not load client settings Caused by: failed to deserialize: missing field `common_prefix` Location: atuin-client/src/settings.rs:456:26
Error: could not load client settings
Caused by:
failed to deserialize: missing field `common_prefix`
Location:
atuin-client/src/settings.rs:456:26
Error:: command not found
```
With this change, the fields can be specified separately and missing
fields will take their default values.
When I deleted my Atuin.sh account, I found the command did not delete
the key or session files.
This caused `bail!`s from Atuin when querying the session status, or
synchronising.
Of course, one shouldn't expect Atuin to be able to synchronise or query
with the server when the account is deleted, but the relevant files were
still present, so the behaviour was different to what we'd expect.
I discussed this with @ellie on Discord, and we came to the conclusion
that I should open a PR, and submit a patch.
I'm not sure how well this PR fits in with the borrow checker, but I've
run tests, a Nix build, and a Cargo build - all goes well. I have not
tested on macOS or Windows; only NixOS.
Signed-off-by: Dom Rodriguez <shymega@shymega.org.uk>