summaryrefslogtreecommitdiffstats
path: root/atuin-client
diff options
context:
space:
mode:
authorEllie Huxtable <ellie@elliehuxtable.com>2021-05-09 20:11:17 +0100
committerGitHub <noreply@github.com>2021-05-09 20:11:17 +0100
commite43e5ce74a85d87a625295b9b089a1b5b8e26fab (patch)
treeafbc97503090e320250440160a8ea9ee775fc170 /atuin-client
parentaf707ac5a4fba2147f10b6c663d66ace1c54cda0 (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.rs27
-rw-r--r--atuin-client/src/settings.rs4
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);
}