Support old msgpack (#794)
* Support old msgpack I forgot it isn't backwards compatible... This should fix any sync issues resulting from the deletion PR * Update atuin-client/src/encryption.rs Co-authored-by: Conrad Ludgate <conradludgate@gmail.com> * Bye bye unwrap --------- Co-authored-by: Conrad Ludgate <conradludgate@gmail.com>
This commit is contained in:
parent
26a1b93098
commit
13514b635c
2 changed files with 36 additions and 2 deletions
|
@ -15,7 +15,10 @@ use fs_err as fs;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use sodiumoxide::crypto::secretbox;
|
use sodiumoxide::crypto::secretbox;
|
||||||
|
|
||||||
use crate::{history::History, settings::Settings};
|
use crate::{
|
||||||
|
history::{History, HistoryWithoutDelete},
|
||||||
|
settings::Settings,
|
||||||
|
};
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, Serialize, Deserialize)]
|
||||||
pub struct EncryptedHistory {
|
pub struct EncryptedHistory {
|
||||||
|
@ -98,7 +101,23 @@ pub fn decrypt(encrypted_history: &EncryptedHistory, key: &secretbox::Key) -> Re
|
||||||
let plaintext = secretbox::open(&encrypted_history.ciphertext, &encrypted_history.nonce, key)
|
let plaintext = secretbox::open(&encrypted_history.ciphertext, &encrypted_history.nonce, key)
|
||||||
.map_err(|_| eyre!("failed to open secretbox - invalid key?"))?;
|
.map_err(|_| eyre!("failed to open secretbox - invalid key?"))?;
|
||||||
|
|
||||||
let history = rmp_serde::from_slice(&plaintext)?;
|
let history = rmp_serde::from_slice(&plaintext);
|
||||||
|
|
||||||
|
let Ok(history) = history else {
|
||||||
|
let history: HistoryWithoutDelete = rmp_serde::from_slice(&plaintext)?;
|
||||||
|
|
||||||
|
return Ok(History {
|
||||||
|
id: history.id,
|
||||||
|
cwd: history.cwd,
|
||||||
|
exit: history.exit,
|
||||||
|
command: history.command,
|
||||||
|
session: history.session,
|
||||||
|
duration: history.duration,
|
||||||
|
hostname: history.hostname,
|
||||||
|
timestamp: history.timestamp,
|
||||||
|
deleted_at: None,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
Ok(history)
|
Ok(history)
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,6 +19,21 @@ pub struct History {
|
||||||
pub deleted_at: Option<chrono::DateTime<Utc>>,
|
pub deleted_at: Option<chrono::DateTime<Utc>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Forgive me, for I have sinned
|
||||||
|
// I need to replace rmp with something that is more backwards-compatible.
|
||||||
|
// Protobuf, or maybe just json
|
||||||
|
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, sqlx::FromRow)]
|
||||||
|
pub struct HistoryWithoutDelete {
|
||||||
|
pub id: String,
|
||||||
|
pub timestamp: chrono::DateTime<Utc>,
|
||||||
|
pub duration: i64,
|
||||||
|
pub exit: i64,
|
||||||
|
pub command: String,
|
||||||
|
pub cwd: String,
|
||||||
|
pub session: String,
|
||||||
|
pub hostname: String,
|
||||||
|
}
|
||||||
|
|
||||||
impl History {
|
impl History {
|
||||||
#[allow(clippy::too_many_arguments)]
|
#[allow(clippy::too_many_arguments)]
|
||||||
pub fn new(
|
pub fn new(
|
||||||
|
|
Loading…
Reference in a new issue