aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock1
-rw-r--r--atuin-client/Cargo.toml1
-rw-r--r--atuin-client/src/database.rs9
3 files changed, 10 insertions, 1 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 7a310c01..c3604b68 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -151,6 +151,7 @@ dependencies = [
"memchr",
"minspan",
"parse_duration",
+ "rand",
"regex",
"reqwest",
"rmp-serde",
diff --git a/atuin-client/Cargo.toml b/atuin-client/Cargo.toml
index 770d7741..42e3cf6b 100644
--- a/atuin-client/Cargo.toml
+++ b/atuin-client/Cargo.toml
@@ -41,6 +41,7 @@ serde_json = { workspace = true }
parse_duration = "2.1.1"
async-trait = { workspace = true }
itertools = { workspace = true }
+rand = { workspace = true }
shellexpand = "2"
sqlx = { workspace = true, features = ["sqlite"] }
minspan = "0.1.1"
diff --git a/atuin-client/src/database.rs b/atuin-client/src/database.rs
index f7c063ce..22bd5886 100644
--- a/atuin-client/src/database.rs
+++ b/atuin-client/src/database.rs
@@ -6,6 +6,7 @@ use chrono::{prelude::*, Utc};
use fs_err as fs;
use itertools::Itertools;
use lazy_static::lazy_static;
+use rand::{distributions::Alphanumeric, Rng};
use regex::Regex;
use sql_builder::{esc, quote, SqlBuilder, SqlName};
use sqlx::{
@@ -460,6 +461,8 @@ impl Database for Sqlite {
.map(|after| sql.and_where_gt("timestamp", quote(after.timestamp_nanos())))
});
+ sql.and_where_is_null("deleted_at");
+
let query = sql.sql().expect("bug in search query. please report");
let res = sqlx::query(&query)
@@ -519,7 +522,11 @@ impl Database for Sqlite {
// but the time that the system marks it as deleted
async fn delete(&self, mut h: History) -> Result<()> {
let now = chrono::Utc::now();
- h.command = String::from(""); // blank it
+ h.command = rand::thread_rng()
+ .sample_iter(&Alphanumeric)
+ .take(32)
+ .map(char::from)
+ .collect(); // overwrite with random string
h.deleted_at = Some(now); // delete it
self.update(&h).await?; // save it