diff options
author | Ellie Huxtable <ellie@elliehuxtable.com> | 2021-05-09 20:11:17 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-09 20:11:17 +0100 |
commit | e43e5ce74a85d87a625295b9b089a1b5b8e26fab (patch) | |
tree | afbc97503090e320250440160a8ea9ee775fc170 /atuin-client | |
parent | af707ac5a4fba2147f10b6c663d66ace1c54cda0 (diff) |
Add logout, only login if not already logged in (#91)
Also:
- Ensures that a key is generated as soon as a user registers!
- Ensures that "atuin key" will generate a key if needed, and doesn't
double base64 encode data
And a few other little fixes :)
Resolves #85
Resolves #86
Diffstat (limited to 'atuin-client')
-rw-r--r-- | atuin-client/src/encryption.rs | 27 | ||||
-rw-r--r-- | atuin-client/src/settings.rs | 4 |
2 files changed, 20 insertions, 11 deletions
diff --git a/atuin-client/src/encryption.rs b/atuin-client/src/encryption.rs index 9cb8d3ea..ecb8a0c7 100644 --- a/atuin-client/src/encryption.rs +++ b/atuin-client/src/encryption.rs @@ -24,23 +24,30 @@ pub struct EncryptedHistory { pub nonce: secretbox::Nonce, } +pub fn new_key(settings: &Settings) -> Result<secretbox::Key> { + let path = settings.key_path.as_str(); + + let key = secretbox::gen_key(); + let encoded = encode_key(key.clone())?; + + let mut file = File::create(path)?; + file.write_all(encoded.as_bytes())?; + + Ok(key) +} + // Loads the secret key, will create + save if it doesn't exist pub fn load_key(settings: &Settings) -> Result<secretbox::Key> { let path = settings.key_path.as_str(); - if PathBuf::from(path).exists() { + let key = if PathBuf::from(path).exists() { let key = std::fs::read_to_string(path)?; - let key = decode_key(key)?; - Ok(key) + decode_key(key)? } else { - let key = secretbox::gen_key(); - let encoded = encode_key(key.clone())?; + new_key(settings)? + }; - let mut file = File::create(path)?; - file.write_all(encoded.as_bytes())?; - - Ok(key) - } + Ok(key) } pub fn load_encoded_key(settings: &Settings) -> Result<String> { diff --git a/atuin-client/src/settings.rs b/atuin-client/src/settings.rs index 9057eca2..1d7e9a5f 100644 --- a/atuin-client/src/settings.rs +++ b/atuin-client/src/settings.rs @@ -83,7 +83,9 @@ impl Settings { } pub fn should_sync(&self) -> Result<bool> { - if !self.auto_sync { + let session_path = atuin_common::utils::data_dir().join("session"); + + if !self.auto_sync || !session_path.exists() { return Ok(false); } |