summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorConrad Ludgate <conrad.ludgate@truelayer.com>2022-04-13 18:08:49 +0100
committerGitHub <noreply@github.com>2022-04-13 18:08:49 +0100
commit3c5fbc573443a7a4e59a0b898e1586d219f105eb (patch)
tree20a9498f7b4a81cb44810c84c2067d4eee367d25
parentbc45bab273834ee5731bc653ff001278963bf395 (diff)
provide better error messages (#300)
-rw-r--r--Cargo.lock9
-rw-r--r--Cargo.toml1
-rw-r--r--atuin-client/Cargo.toml1
-rw-r--r--atuin-client/src/database.rs3
-rw-r--r--atuin-client/src/encryption.rs19
-rw-r--r--atuin-client/src/settings.rs8
-rw-r--r--atuin-server/Cargo.toml1
-rw-r--r--atuin-server/src/settings.rs2
-rw-r--r--src/command/logout.rs2
9 files changed, 30 insertions, 16 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 9f802ebf..e7fe019c 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -70,6 +70,7 @@ dependencies = [
"crossbeam-channel",
"directories",
"eyre",
+ "fs-err",
"humantime 2.1.0",
"indicatif",
"itertools",
@@ -97,6 +98,7 @@ dependencies = [
"config",
"directories",
"eyre",
+ "fs-err",
"itertools",
"log",
"minspan",
@@ -144,6 +146,7 @@ dependencies = [
"chrono",
"config",
"eyre",
+ "fs-err",
"http",
"log",
"rand 0.8.5",
@@ -677,6 +680,12 @@ dependencies = [
]
[[package]]
+name = "fs-err"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5bd79fa345a495d3ae89fb7165fec01c0e72f41821d642dda363a1e97975652e"
+
+[[package]]
name = "fuchsia-cprng"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/Cargo.toml b/Cargo.toml
index eb937c8a..9ed345c0 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -57,6 +57,7 @@ tabwriter = "1.2.1"
crossbeam-channel = "0.5.1"
clap = { version = "3.1.8", features = ["derive"] }
clap_complete = "3.1.1"
+fs-err = "2.7"
[profile.release]
lto = "fat"
diff --git a/atuin-client/Cargo.toml b/atuin-client/Cargo.toml
index ef45e482..923fe1b6 100644
--- a/atuin-client/Cargo.toml
+++ b/atuin-client/Cargo.toml
@@ -48,3 +48,4 @@ sqlx = { version = "0.5", features = [
] }
minspan = "0.1.1"
regex = "1.5.4"
+fs-err = "2.7"
diff --git a/atuin-client/src/database.rs b/atuin-client/src/database.rs
index 3ca61717..8b950de9 100644
--- a/atuin-client/src/database.rs
+++ b/atuin-client/src/database.rs
@@ -9,6 +9,7 @@ use eyre::Result;
use itertools::Itertools;
use regex::Regex;
+use fs_err as fs;
use sqlx::sqlite::{
SqliteConnectOptions, SqliteJournalMode, SqlitePool, SqlitePoolOptions, SqliteRow,
};
@@ -62,7 +63,7 @@ impl Sqlite {
let create = !path.exists();
if create {
if let Some(dir) = path.parent() {
- std::fs::create_dir_all(dir)?;
+ fs::create_dir_all(dir)?;
}
}
diff --git a/atuin-client/src/encryption.rs b/atuin-client/src/encryption.rs
index 5721c2f9..d91ad076 100644
--- a/atuin-client/src/encryption.rs
+++ b/atuin-client/src/encryption.rs
@@ -8,11 +8,11 @@
// clients must share the secret in order to be able to sync, as it is needed
// to decrypt
-use std::fs::File;
+use fs_err as fs;
use std::io::prelude::*;
use std::path::PathBuf;
-use eyre::{eyre, Result};
+use eyre::{eyre, Context, Result};
use sodiumoxide::crypto::secretbox;
use crate::history::History;
@@ -30,7 +30,7 @@ pub fn new_key(settings: &Settings) -> Result<secretbox::Key> {
let key = secretbox::gen_key();
let encoded = encode_key(key.clone())?;
- let mut file = File::create(path)?;
+ let mut file = fs::File::create(path)?;
file.write_all(encoded.as_bytes())?;
Ok(key)
@@ -41,7 +41,7 @@ pub fn load_key(settings: &Settings) -> Result<secretbox::Key> {
let path = settings.key_path.as_str();
let key = if PathBuf::from(path).exists() {
- let key = std::fs::read_to_string(path)?;
+ let key = fs_err::read_to_string(path)?;
decode_key(key)?
} else {
new_key(settings)?
@@ -54,13 +54,13 @@ pub fn load_encoded_key(settings: &Settings) -> Result<String> {
let path = settings.key_path.as_str();
if PathBuf::from(path).exists() {
- let key = std::fs::read_to_string(path)?;
+ let key = fs::read_to_string(path)?;
Ok(key)
} else {
let key = secretbox::gen_key();
let encoded = encode_key(key)?;
- let mut file = File::create(path)?;
+ let mut file = fs::File::create(path)?;
file.write_all(encoded.as_bytes())?;
Ok(encoded)
@@ -68,15 +68,16 @@ pub fn load_encoded_key(settings: &Settings) -> Result<String> {
}
pub fn encode_key(key: secretbox::Key) -> Result<String> {
- let buf = rmp_serde::to_vec(&key)?;
+ let buf = rmp_serde::to_vec(&key).wrap_err("could not encode key to message pack")?;
let buf = base64::encode(buf);
Ok(buf)
}
pub fn decode_key(key: String) -> Result<secretbox::Key> {
- let buf = base64::decode(key)?;
- let buf: secretbox::Key = rmp_serde::from_read_ref(&buf)?;
+ let buf = base64::decode(key).wrap_err("encryption key is not a valid base64 encoding")?;
+ let buf: secretbox::Key = rmp_serde::from_read_ref(&buf)
+ .wrap_err("encryption key is not a valid message pack encoding")?;
Ok(buf)
}
diff --git a/atuin-client/src/settings.rs b/atuin-client/src/settings.rs
index 0e115909..537b1ca3 100644
--- a/atuin-client/src/settings.rs
+++ b/atuin-client/src/settings.rs
@@ -1,4 +1,4 @@
-use std::fs::{create_dir_all, File};
+use fs_err::{create_dir_all, File};
use std::io::prelude::*;
use std::path::{Path, PathBuf};
@@ -76,7 +76,7 @@ impl Settings {
let sync_time_path = data_dir.join("last_sync_time");
- std::fs::write(sync_time_path, Utc::now().to_rfc3339())?;
+ fs_err::write(sync_time_path, Utc::now().to_rfc3339())?;
Ok(())
}
@@ -91,7 +91,7 @@ impl Settings {
return Ok(Utc.ymd(1970, 1, 1).and_hms(0, 0, 0));
}
- let time = std::fs::read_to_string(sync_time_path)?;
+ let time = fs_err::read_to_string(sync_time_path)?;
let time = chrono::DateTime::parse_from_rfc3339(time.as_str())?;
Ok(time.with_timezone(&Utc))
@@ -188,7 +188,7 @@ impl Settings {
// Finally, set the auth token
if Path::new(session_path.to_string().as_str()).exists() {
- let token = std::fs::read_to_string(session_path.to_string())?;
+ let token = fs_err::read_to_string(session_path.to_string())?;
settings.session_token = token.trim().to_string();
} else {
settings.session_token = String::from("not logged in");
diff --git a/atuin-server/Cargo.toml b/atuin-server/Cargo.toml
index 16a9fa0b..17e5d72e 100644
--- a/atuin-server/Cargo.toml
+++ b/atuin-server/Cargo.toml
@@ -29,3 +29,4 @@ sqlx = { version = "0.5", features = [ "runtime-tokio-rustls", "uuid", "chrono",
async-trait = "0.1.49"
axum = "0.5"
http = "0.2"
+fs-err = "2.7"
diff --git a/atuin-server/src/settings.rs b/atuin-server/src/settings.rs
index 8a8d618d..251e6d7e 100644
--- a/atuin-server/src/settings.rs
+++ b/atuin-server/src/settings.rs
@@ -1,4 +1,4 @@
-use std::fs::{create_dir_all, File};
+use fs_err::{create_dir_all, File};
use std::io::prelude::*;
use std::path::PathBuf;
diff --git a/src/command/logout.rs b/src/command/logout.rs
index ec7d8dcb..26d689cf 100644
--- a/src/command/logout.rs
+++ b/src/command/logout.rs
@@ -1,4 +1,4 @@
-use std::fs::remove_file;
+use fs_err::remove_file;
pub fn run() {
let session_path = atuin_common::utils::data_dir().join("session");