Skip to content

Commit

Permalink
refactor (#327)
Browse files Browse the repository at this point in the history
  • Loading branch information
conradludgate authored Apr 22, 2022
1 parent a9d1ece commit 02c70de
Show file tree
Hide file tree
Showing 21 changed files with 72 additions and 86 deletions.
12 changes: 2 additions & 10 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 1 addition & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
3 changes: 1 addition & 2 deletions atuin-client/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
1 change: 1 addition & 0 deletions atuin-client/src/encryption.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
// to decrypt

use fs_err as fs;
use serde::{Deserialize, Serialize};
use std::io::prelude::*;
use std::path::PathBuf;

Expand Down
1 change: 1 addition & 0 deletions atuin-client/src/history.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)]
Expand Down
1 change: 1 addition & 0 deletions atuin-client/src/import/resh.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
3 changes: 0 additions & 3 deletions atuin-client/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
1 change: 1 addition & 0 deletions atuin-client/src/settings.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
use fs_err::{create_dir_all, File};
use serde::Deserialize;
use std::io::prelude::*;
use std::path::{Path, PathBuf};

Expand Down
7 changes: 1 addition & 6 deletions atuin-common/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
36 changes: 1 addition & 35 deletions atuin-common/src/api.rs
Original file line number Diff line number Diff line change
@@ -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 {
Expand Down Expand Up @@ -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(),
}
}
}
1 change: 1 addition & 0 deletions atuin-common/src/calendar.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
// Calendar data
use serde::{Serialize, Deserialize};

pub enum TimePeriod {
YEAR,
Expand Down
3 changes: 0 additions & 3 deletions atuin-common/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
#![forbid(unsafe_code)]

#[macro_use]
extern crate serde_derive;

pub mod api;
pub mod utils;
19 changes: 2 additions & 17 deletions atuin-common/src/utils.rs
Original file line number Diff line number Diff line change
@@ -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);

Expand Down
3 changes: 1 addition & 2 deletions atuin-server/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
2 changes: 2 additions & 0 deletions atuin-server/src/calendar.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
// Calendar data

use serde::{Deserialize, Serialize};

pub enum TimePeriod {
YEAR,
MONTH,
Expand Down
2 changes: 2 additions & 0 deletions atuin-server/src/handlers/history.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
35 changes: 35 additions & 0 deletions atuin-server/src/handlers/mod.rs
Original file line number Diff line number Diff line change
@@ -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(),
}
}
}
17 changes: 16 additions & 1 deletion atuin-server/src/handlers/user.rs
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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();

Expand Down Expand Up @@ -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()
}
3 changes: 0 additions & 3 deletions atuin-server/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
1 change: 1 addition & 0 deletions atuin-server/src/settings.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
use fs_err::{create_dir_all, File};
use serde::{Deserialize, Serialize};
use std::io::prelude::*;
use std::path::PathBuf;

Expand Down
4 changes: 2 additions & 2 deletions src/command/client/history.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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");
Expand Down

0 comments on commit 02c70de

Please sign in to comment.