summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorConrad Ludgate <conrad.ludgate@truelayer.com>2022-04-22 19:24:38 +0100
committerGitHub <noreply@github.com>2022-04-22 19:24:38 +0100
commit02c70deecba955c1b01f661ed7a709038e90addc (patch)
treefc6881b607120cdb97991e17142b2e3159bff759
parenta9d1ece0cb2090b54668765f70ec00cd2b3a8554 (diff)
refactor (#327)
-rw-r--r--Cargo.lock12
-rw-r--r--Cargo.toml3
-rw-r--r--atuin-client/Cargo.toml3
-rw-r--r--atuin-client/src/encryption.rs1
-rw-r--r--atuin-client/src/history.rs1
-rw-r--r--atuin-client/src/import/resh.rs1
-rw-r--r--atuin-client/src/lib.rs3
-rw-r--r--atuin-client/src/settings.rs1
-rw-r--r--atuin-common/Cargo.toml7
-rw-r--r--atuin-common/src/api.rs36
-rw-r--r--atuin-common/src/calendar.rs1
-rw-r--r--atuin-common/src/lib.rs3
-rw-r--r--atuin-common/src/utils.rs19
-rw-r--r--atuin-server/Cargo.toml3
-rw-r--r--atuin-server/src/calendar.rs2
-rw-r--r--atuin-server/src/handlers/history.rs2
-rw-r--r--atuin-server/src/handlers/mod.rs35
-rw-r--r--atuin-server/src/handlers/user.rs17
-rw-r--r--atuin-server/src/lib.rs3
-rw-r--r--atuin-server/src/settings.rs1
-rw-r--r--src/command/client/history.rs4
21 files changed, 72 insertions, 86 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 48b0a5c8..1d03a8a9 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -86,7 +86,6 @@ dependencies = [
"log",
"pretty_env_logger",
"serde",
- "serde_derive",
"serde_json",
"tabwriter",
"termion",
@@ -119,7 +118,6 @@ dependencies = [
"rmp-serde",
"rust-crypto",
"serde",
- "serde_derive",
"serde_json",
"shellexpand",
"sodiumoxide",
@@ -134,14 +132,9 @@ dependencies = [
name = "atuin-common"
version = "0.8.1"
dependencies = [
- "axum",
"chrono",
- "http",
"rust-crypto",
"serde",
- "serde_derive",
- "serde_json",
- "sodiumoxide",
"uuid",
]
@@ -162,7 +155,6 @@ dependencies = [
"rand 0.8.5",
"rust-crypto",
"serde",
- "serde_derive",
"serde_json",
"sodiumoxide",
"sqlx",
@@ -1068,9 +1060,9 @@ dependencies = [
[[package]]
name = "ipnet"
-version = "2.4.0"
+version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "35e70ee094dc02fd9c13fdad4940090f22dbd6ac7c9e7094a46cf0232a50bc7c"
+checksum = "879d54834c8c76457ef4293a689b2a8c59b076067ad77b15efafbb05f92a592b"
[[package]]
name = "itertools"
diff --git a/Cargo.toml b/Cargo.toml
index 833003a0..be1c1b7d 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -40,8 +40,7 @@ chrono = { version = "0.4", features = ["serde"] }
eyre = "0.6"
directories = "4"
indicatif = "0.16.2"
-serde_derive = "1.0.125"
-serde = "1.0.126"
+serde = { version = "1.0.126", features = ["derive"] }
serde_json = "1.0.75"
tui = "0.16"
termion = "1.5"
diff --git a/atuin-client/Cargo.toml b/atuin-client/Cargo.toml
index 923fe1b6..49ff933e 100644
--- a/atuin-client/Cargo.toml
+++ b/atuin-client/Cargo.toml
@@ -21,8 +21,7 @@ uuid = { version = "0.8", features = ["v4"] }
whoami = "1.1.2"
chrono-english = "0.1.4"
config = "0.13"
-serde_derive = "1.0.125"
-serde = "1.0.126"
+serde = { version = "1.0.126", features = ["derive"] }
serde_json = "1.0.75"
rmp-serde = "1.0.0"
sodiumoxide = "0.2.6"
diff --git a/atuin-client/src/encryption.rs b/atuin-client/src/encryption.rs
index 9b6f8a78..4746c23e 100644
--- a/atuin-client/src/encryption.rs
+++ b/atuin-client/src/encryption.rs
@@ -9,6 +9,7 @@
// to decrypt
use fs_err as fs;
+use serde::{Deserialize, Serialize};
use std::io::prelude::*;
use std::path::PathBuf;
diff --git a/atuin-client/src/history.rs b/atuin-client/src/history.rs
index 111e463a..6610b988 100644
--- a/atuin-client/src/history.rs
+++ b/atuin-client/src/history.rs
@@ -3,6 +3,7 @@ use std::env;
use chrono::Utc;
use atuin_common::utils::uuid_v4;
+use serde::{Deserialize, Serialize};
// Any new fields MUST be Optional<>!
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, sqlx::FromRow)]
diff --git a/atuin-client/src/import/resh.rs b/atuin-client/src/import/resh.rs
index c55220ca..cd5dccf7 100644
--- a/atuin-client/src/import/resh.rs
+++ b/atuin-client/src/import/resh.rs
@@ -8,6 +8,7 @@ use atuin_common::utils::uuid_v4;
use chrono::{TimeZone, Utc};
use directories::UserDirs;
use eyre::{eyre, Result};
+use serde::Deserialize;
use super::{count_lines, Importer};
use crate::history::History;
diff --git a/atuin-client/src/lib.rs b/atuin-client/src/lib.rs
index fa01c17e..98e2f3ae 100644
--- a/atuin-client/src/lib.rs
+++ b/atuin-client/src/lib.rs
@@ -3,9 +3,6 @@
#[macro_use]
extern crate log;
-#[macro_use]
-extern crate serde_derive;
-
pub mod api_client;
pub mod database;
pub mod encryption;
diff --git a/atuin-client/src/settings.rs b/atuin-client/src/settings.rs
index 537b1ca3..ee3376a9 100644
--- a/atuin-client/src/settings.rs
+++ b/atuin-client/src/settings.rs
@@ -1,4 +1,5 @@
use fs_err::{create_dir_all, File};
+use serde::Deserialize;
use std::io::prelude::*;
use std::path::{Path, PathBuf};
diff --git a/atuin-common/Cargo.toml b/atuin-common/Cargo.toml
index 93814acb..59caa796 100644
--- a/atuin-common/Cargo.toml
+++ b/atuin-common/Cargo.toml
@@ -12,11 +12,6 @@ repository = "https://github.com/ellie/atuin"
[dependencies]
rust-crypto = "^0.2"
-sodiumoxide = "0.2.6"
chrono = { version = "0.4", features = ["serde"] }
-serde_derive = "1.0.125"
-serde = "1.0.126"
-serde_json = "1.0.75"
+serde = { version = "1.0.126", features = ["derive"] }
uuid = { version = "0.8", features = ["v4"] }
-axum = "0.5"
-http = "0.2"
diff --git a/atuin-common/src/api.rs b/atuin-common/src/api.rs
index 803fbbcc..47bbcde1 100644
--- a/atuin-common/src/api.rs
+++ b/atuin-common/src/api.rs
@@ -1,8 +1,5 @@
-use std::borrow::Cow;
-
-use axum::{response::IntoResponse, Json};
use chrono::Utc;
-use serde::Serialize;
+use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)]
pub struct UserResponse {
@@ -56,34 +53,3 @@ pub struct SyncHistoryRequest {
pub struct SyncHistoryResponse {
pub history: Vec<String>,
}
-
-#[derive(Debug, Serialize, Deserialize)]
-pub struct ErrorResponse<'a> {
- pub reason: Cow<'a, str>,
-}
-
-impl<'a> IntoResponse for ErrorResponseStatus<'a> {
- fn into_response(self) -> axum::response::Response {
- (self.status, Json(self.error)).into_response()
- }
-}
-
-pub struct ErrorResponseStatus<'a> {
- pub error: ErrorResponse<'a>,
- pub status: http::StatusCode,
-}
-
-impl<'a> ErrorResponse<'a> {
- pub fn with_status(self, status: http::StatusCode) -> ErrorResponseStatus<'a> {
- ErrorResponseStatus {
- error: self,
- status,
- }
- }
-
- pub fn reply(reason: &'a str) -> ErrorResponse {
- Self {
- reason: reason.into(),
- }
- }
-}
diff --git a/atuin-common/src/calendar.rs b/atuin-common/src/calendar.rs
index d576f1a7..d3b1d921 100644
--- a/atuin-common/src/calendar.rs
+++ b/atuin-common/src/calendar.rs
@@ -1,4 +1,5 @@
// Calendar data
+use serde::{Serialize, Deserialize};
pub enum TimePeriod {
YEAR,
diff --git a/atuin-common/src/lib.rs b/atuin-common/src/lib.rs
index 77cd644d..e76a7abb 100644
--- a/atuin-common/src/lib.rs
+++ b/atuin-common/src/lib.rs
@@ -1,7 +1,4 @@
#![forbid(unsafe_code)]
-#[macro_use]
-extern crate serde_derive;
-
pub mod api;
pub mod utils;
diff --git a/atuin-common/src/utils.rs b/atuin-common/src/utils.rs
index 35647bd4..23e34252 100644
--- a/atuin-common/src/utils.rs
+++ b/atuin-common/src/utils.rs
@@ -1,26 +1,11 @@
use std::path::PathBuf;
use chrono::NaiveDate;
-use crypto::digest::Digest;
-use crypto::sha2::Sha256;
-use sodiumoxide::crypto::pwhash::argon2id13;
use uuid::Uuid;
-pub fn hash_secret(secret: &str) -> String {
- sodiumoxide::init().unwrap();
- let hash = argon2id13::pwhash(
- secret.as_bytes(),
- argon2id13::OPSLIMIT_INTERACTIVE,
- argon2id13::MEMLIMIT_INTERACTIVE,
- )
- .unwrap();
- let texthash = std::str::from_utf8(&hash.0).unwrap().to_string();
-
- // postgres hates null chars. don't do that to postgres
- texthash.trim_end_matches('\u{0}').to_string()
-}
-
pub fn hash_str(string: &str) -> String {
+ use crypto::digest::Digest;
+ use crypto::sha2::Sha256;
let mut hasher = Sha256::new();
hasher.input_str(string);
diff --git a/atuin-server/Cargo.toml b/atuin-server/Cargo.toml
index 33f5f7cd..c1342bfb 100644
--- a/atuin-server/Cargo.toml
+++ b/atuin-server/Cargo.toml
@@ -17,8 +17,7 @@ eyre = "0.6"
uuid = { version = "0.8", features = ["v4"] }
whoami = "1.1.2"
config = "0.13"
-serde_derive = "1.0.125"
-serde = "1.0.126"
+serde = { version = "1.0.126", features = ["derive"] }
serde_json = "1.0.75"
sodiumoxide = "0.2.6"
base64 = "0.13.0"
diff --git a/atuin-server/src/calendar.rs b/atuin-server/src/calendar.rs
index d576f1a7..7c05dce3 100644
--- a/atuin-server/src/calendar.rs
+++ b/atuin-server/src/calendar.rs
@@ -1,5 +1,7 @@
// Calendar data
+use serde::{Deserialize, Serialize};
+
pub enum TimePeriod {
YEAR,
MONTH,
diff --git a/atuin-server/src/handlers/history.rs b/atuin-server/src/handlers/history.rs
index b7112526..aca9ecc6 100644
--- a/atuin-server/src/handlers/history.rs
+++ b/atuin-server/src/handlers/history.rs
@@ -10,6 +10,8 @@ use atuin_common::api::*;
use crate::calendar::{TimePeriod, TimePeriodInfo};
+use super::{ErrorResponse, ErrorResponseStatus};
+
#[instrument(skip_all, fields(user.id = user.id))]
pub async fn count(
user: User,
diff --git a/atuin-server/src/handlers/mod.rs b/atuin-server/src/handlers/mod.rs
index 83c2d0c3..9e6659e2 100644
--- a/atuin-server/src/handlers/mod.rs
+++ b/atuin-server/src/handlers/mod.rs
@@ -1,6 +1,41 @@
+use axum::{response::IntoResponse, Json};
+use serde::{Deserialize, Serialize};
+use std::borrow::Cow;
+
pub mod history;
pub mod user;
pub async fn index() -> &'static str {
"\"Through the fathomless deeps of space swims the star turtle Great A\u{2019}Tuin, bearing on its back the four giant elephants who carry on their shoulders the mass of the Discworld.\"\n\t-- Sir Terry Pratchett"
}
+
+#[derive(Debug, Serialize, Deserialize)]
+pub struct ErrorResponse<'a> {
+ pub reason: Cow<'a, str>,
+}
+
+impl<'a> IntoResponse for ErrorResponseStatus<'a> {
+ fn into_response(self) -> axum::response::Response {
+ (self.status, Json(self.error)).into_response()
+ }
+}
+
+pub struct ErrorResponseStatus<'a> {
+ pub error: ErrorResponse<'a>,
+ pub status: http::StatusCode,
+}
+
+impl<'a> ErrorResponse<'a> {
+ pub fn with_status(self, status: http::StatusCode) -> ErrorResponseStatus<'a> {
+ ErrorResponseStatus {
+ error: self,
+ status,
+ }
+ }
+
+ pub fn reply(reason: &'a str) -> ErrorResponse {
+ Self {
+ reason: reason.into(),
+ }
+ }
+}
diff --git a/atuin-server/src/handlers/user.rs b/atuin-server/src/handlers/user.rs
index a9a48fdc..862f228c 100644
--- a/atuin-server/src/handlers/user.rs
+++ b/atuin-server/src/handlers/user.rs
@@ -1,7 +1,6 @@
use std::borrow::Borrow;
use atuin_common::api::*;
-use atuin_common::utils::hash_secret;
use axum::extract::Path;
use axum::{Extension, Json};
use http::StatusCode;
@@ -13,6 +12,8 @@ use crate::database::{Database, Postgres};
use crate::models::{NewSession, NewUser};
use crate::settings::Settings;
+use super::{ErrorResponse, ErrorResponseStatus};
+
pub fn verify_str(secret: &str, verify: &str) -> bool {
sodiumoxide::init().unwrap();
@@ -139,3 +140,17 @@ pub async fn login(
session: session.token,
}))
}
+
+fn hash_secret(secret: &str) -> String {
+ sodiumoxide::init().unwrap();
+ let hash = argon2id13::pwhash(
+ secret.as_bytes(),
+ argon2id13::OPSLIMIT_INTERACTIVE,
+ argon2id13::MEMLIMIT_INTERACTIVE,
+ )
+ .unwrap();
+ let texthash = std::str::from_utf8(&hash.0).unwrap().to_string();
+
+ // postgres hates null chars. don't do that to postgres
+ texthash.trim_end_matches('\u{0}').to_string()
+}
diff --git a/atuin-server/src/lib.rs b/atuin-server/src/lib.rs
index 8811986e..7be54e58 100644
--- a/atuin-server/src/lib.rs
+++ b/atuin-server/src/lib.rs
@@ -8,9 +8,6 @@ use eyre::{Context, Result};
use crate::settings::Settings;
-#[macro_use]
-extern crate serde_derive;
-
pub mod auth;
pub mod calendar;
pub mod database;
diff --git a/atuin-server/src/settings.rs b/atuin-server/src/settings.rs
index 251e6d7e..6f4d36b4 100644
--- a/atuin-server/src/settings.rs
+++ b/atuin-server/src/settings.rs
@@ -1,4 +1,5 @@
use fs_err::{create_dir_all, File};
+use serde::{Deserialize, Serialize};
use std::io::prelude::*;
use std::path::PathBuf;
diff --git a/src/command/client/history.rs b/src/command/client/history.rs
index 6eaa6407..b2f68f93 100644
--- a/src/command/client/history.rs
+++ b/src/command/client/history.rs
@@ -55,7 +55,7 @@ pub enum Cmd {
pub fn print_list(h: &[History], human: bool, cmd_only: bool) {
let mut writer = TabWriter::new(std::io::stdout()).padding(2);
- let lines = h.iter().map(|h| {
+ let lines = h.iter().rev().map(|h| {
if human {
let duration = humantime::format_duration(Duration::from_nanos(std::cmp::max(
h.duration, 0,
@@ -82,7 +82,7 @@ pub fn print_list(h: &[History], human: bool, cmd_only: bool) {
}
});
- for i in lines.rev() {
+ for i in lines {
writer
.write_all(i.as_bytes())
.expect("failed to write to tab writer");