diff --git a/Cargo.lock b/Cargo.lock index 1f2cc81..5953654 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -341,6 +341,19 @@ dependencies = [ "typenum", ] +[[package]] +name = "crypto-utils" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c21850a20f41468aedddf2dcf88124ae8e6959c8c7b610c986f870fd62fbba3c" +dependencies = [ + "chrono", + "jsonwebtoken", + "serde", + "sha1", + "sha2", +] + [[package]] name = "digest" version = "0.10.3" @@ -651,7 +664,6 @@ dependencies = [ "futures-util", "homedisk-types", "log", - "rust_utilities", "serde", "sqlx", "thiserror", @@ -667,13 +679,13 @@ dependencies = [ "axum-auth", "base64", "byte-unit", + "crypto-utils", "futures", "homedisk-database", "homedisk-types", "hyper", "jsonwebtoken", "log", - "rust_utilities", "serde", "thiserror", "tower-http", @@ -685,8 +697,9 @@ version = "0.0.0" dependencies = [ "anyhow", "axum", + "crypto-utils", "dirs", - "rust_utilities", + "hex", "serde", "sqlx", "thiserror", @@ -1191,20 +1204,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "rust_utilities" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8524c76496ed3097b6d24d7cb3b435cc8a84cbded6da7153942f6daa3ade9da7" -dependencies = [ - "chrono", - "hex", - "jsonwebtoken", - "serde", - "sha-1", - "sha2", -] - [[package]] name = "rustc-demangle" version = "0.1.21" @@ -1290,10 +1289,10 @@ dependencies = [ ] [[package]] -name = "sha-1" -version = "0.10.0" +name = "sha1" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "028f48d513f9678cda28f6e4064755b3fbb2af6acd672f2c209b62323f7aea0f" +checksum = "c77f4e7f65455545c2153c1253d25056825e77ee2533f0e41deb65a93a34852f" dependencies = [ "cfg-if", "cpufeatures", diff --git a/database/Cargo.toml b/database/Cargo.toml index 0466f70..2775ba4 100644 --- a/database/Cargo.toml +++ b/database/Cargo.toml @@ -10,7 +10,6 @@ futures-util = "0.3.21" serde = { version = "1.0.137", features = ["derive"] } sqlx = { version = "0.5.13", features = ["runtime-tokio-rustls", "sqlite"] } uuid = { version = "1.1.1", features = ["v5"] } -rust_utilities = { version = "0.2.0", features = ["sha"] } homedisk-types = { path = "../types", features = ["database"] } [dev-dependencies] diff --git a/database/src/sqlite.rs b/database/src/sqlite.rs index 872a0d3..46f694a 100644 --- a/database/src/sqlite.rs +++ b/database/src/sqlite.rs @@ -135,7 +135,7 @@ mod tests { use crate::{Database, User}; - /// Utils to open database in tests + /// Utils to open database in tests async fn open_db() -> Database { Database::open("sqlite::memory:").await.expect("open db") } diff --git a/server/Cargo.toml b/server/Cargo.toml index 0b1638e..523e474 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -12,7 +12,7 @@ futures = "0.3.21" hyper = { version = "0.14.19", features = ["full"] } jsonwebtoken = "8.1.0" log = "0.4.17" -rust_utilities = { version = "0.2.0", features = ["jsonwebtoken"] } +crypto-utils = { version = "0.2.0", features = ["jwt"] } serde = { version = "1.0.137", features = ["derive"] } thiserror = "1.0.31" tower-http = { version = "0.3.4", features = ["full"] } diff --git a/server/src/middleware/auth.rs b/server/src/middleware/auth.rs index edf689e..fe18222 100644 --- a/server/src/middleware/auth.rs +++ b/server/src/middleware/auth.rs @@ -1,6 +1,6 @@ +use crypto_utils::jsonwebtoken::{Claims, Token}; use homedisk_types::errors::{AuthError, ServerError}; use jsonwebtoken::TokenData; -use rust_utilities::crypto::jsonwebtoken::{Claims, Token}; /// Validate user token pub fn validate_jwt(secret: &[u8], token: &str) -> Result, ServerError> { diff --git a/server/src/middleware/jwt.rs b/server/src/middleware/jwt.rs index 8a632b4..931a5b3 100644 --- a/server/src/middleware/jwt.rs +++ b/server/src/middleware/jwt.rs @@ -1,15 +1,13 @@ +use crypto_utils::jsonwebtoken::{Claims, Token}; use homedisk_database::{Database, User}; use homedisk_types::errors::{AuthError, ServerError}; -use rust_utilities::crypto::jsonwebtoken::{Claims, Token}; /// Create user token pub fn create_token(user: &User, secret: &[u8], expires: i64) -> Result { - let token = Token::new(secret, Claims::new(user.id.clone(), expires)); + let token = Token::new(secret, Claims::new(&user.id, expires)) + .map_err(|_| ServerError::AuthError(AuthError::TokenGenerate))?; - match token { - Ok(token) => Ok(token.encoded), - Err(_) => Err(ServerError::AuthError(AuthError::TokenGenerate)), - } + Ok(token.encoded) } /// Search for a user @@ -39,6 +37,7 @@ mod tests { #[test] fn test_create_token() { let secret = b"secret"; + let user = User::new("username", "password"); create_token(&user, secret, 1).unwrap(); diff --git a/types/Cargo.toml b/types/Cargo.toml index 10cfbfa..51a7215 100644 --- a/types/Cargo.toml +++ b/types/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" [features] config = ["toml", "dirs"] -database = ["rust_utilities", "sqlx"] +database = ["crypto-utils", "hex", "sqlx"] [dependencies] thiserror = "1.0.31" @@ -14,11 +14,8 @@ anyhow = "1.0.57" serde = { version = "1.0.137", features = ["derive"] } zeroize = { version = "1.5.5", features = ["derive"] } axum = { version = "0.5.7", optional = true } - -# config toml = { version = "0.5.9", optional = true } dirs = { version = "4.0.0", optional = true } - -# database -rust_utilities = { version = "0.2.0", optional = true } +crypto-utils = { version = "0.2.0", features = ["sha"], optional = true } +hex = { version = "0.4.3", optional = true } sqlx = { version = "0.5.13", features = ["sqlite"], optional = true } diff --git a/types/src/database/user.rs b/types/src/database/user.rs index b204ae4..fa36c97 100644 --- a/types/src/database/user.rs +++ b/types/src/database/user.rs @@ -1,4 +1,4 @@ -use rust_utilities::crypto::sha::{encode, Algorithm, CryptographicHash}; +use crypto_utils::sha::{Algorithm, CryptographicHash}; use uuid::Uuid; /// SQL user table @@ -31,7 +31,7 @@ impl User { let id = Uuid::new_v5(&Uuid::NAMESPACE_X500, &sha1_name).to_string(); // hash password using SHA-512 - let password = encode(CryptographicHash::hash( + let password = hex::encode(CryptographicHash::hash( Algorithm::SHA512, password.as_bytes(), )); @@ -52,9 +52,9 @@ impl User { /// /// let user = User::new("medzik", "whatever"); /// - /// let dir = user.user_dir("/home/homedisk"); // will return `/home/homedisk/medzik` + /// let dir = user.user_dir("/storage"); // will return `/storage/medzik` /// - /// assert_eq!(dir, "/home/homedisk/medzik") + /// assert_eq!(dir, "/storage/medzik") /// ``` pub fn user_dir(&self, storage: &str) -> String { // get a user storage path