chore (database): move `utils/database` to `database`

This commit is contained in:
MedzikUser 2022-04-23 20:44:02 +02:00
parent bf5422b47f
commit 36fba1dd1d
No known key found for this signature in database
GPG Key ID: A5FAC1E185C112DB
17 changed files with 185 additions and 127 deletions

150
Cargo.lock generated
View File

@ -28,12 +28,41 @@ dependencies = [
"version_check", "version_check",
] ]
[[package]]
name = "alloc-no-stdlib"
version = "2.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "35ef4730490ad1c4eae5c4325b2a95f521d023e5c885853ff7aca0a6a1631db3"
[[package]]
name = "alloc-stdlib"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "697ed7edc0f1711de49ce108c541623a0af97c6c60b2f6e2b65229847ac843c2"
dependencies = [
"alloc-no-stdlib",
]
[[package]] [[package]]
name = "anyhow" name = "anyhow"
version = "1.0.57" version = "1.0.57"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08f9b8508dccb7687a1d6c4ce66b2b0ecef467c94667de27d8d7fe1f8d2a9cdc" checksum = "08f9b8508dccb7687a1d6c4ce66b2b0ecef467c94667de27d8d7fe1f8d2a9cdc"
[[package]]
name = "async-compression"
version = "0.3.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f2bf394cfbbe876f0ac67b13b6ca819f9c9f2fb9ec67223cceb1555fbab1c31a"
dependencies = [
"brotli",
"flate2",
"futures-core",
"memchr",
"pin-project-lite",
"tokio",
]
[[package]] [[package]]
name = "async-trait" name = "async-trait"
version = "0.1.53" version = "0.1.53"
@ -115,7 +144,7 @@ dependencies = [
"cc", "cc",
"cfg-if", "cfg-if",
"libc", "libc",
"miniz_oxide", "miniz_oxide 0.4.4",
"object", "object",
"rustc-demangle", "rustc-demangle",
] ]
@ -151,6 +180,27 @@ dependencies = [
"generic-array", "generic-array",
] ]
[[package]]
name = "brotli"
version = "3.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68"
dependencies = [
"alloc-no-stdlib",
"alloc-stdlib",
"brotli-decompressor",
]
[[package]]
name = "brotli-decompressor"
version = "2.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "59ad2d4653bf5ca36ae797b1f4bb4dbddb60ce49ca4aed8a2ce4829f60425b80"
dependencies = [
"alloc-no-stdlib",
"alloc-stdlib",
]
[[package]] [[package]]
name = "bumpalo" name = "bumpalo"
version = "3.9.1" version = "3.9.1"
@ -231,6 +281,15 @@ version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ccaeedb56da03b09f598226e25e80088cb4cd25f316e6e4df7d695f0feeb1403" checksum = "ccaeedb56da03b09f598226e25e80088cb4cd25f316e6e4df7d695f0feeb1403"
[[package]]
name = "crc32fast"
version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
dependencies = [
"cfg-if",
]
[[package]] [[package]]
name = "crossbeam-queue" name = "crossbeam-queue"
version = "0.3.5" version = "0.3.5"
@ -315,6 +374,18 @@ version = "2.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77f3309417938f28bf8228fcff79a4a37103981e3e186d2ccd19c74b38f4eb71" checksum = "77f3309417938f28bf8228fcff79a4a37103981e3e186d2ccd19c74b38f4eb71"
[[package]]
name = "flate2"
version = "1.0.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b39522e96686d38f4bc984b9198e3a0613264abaebaff2c5c918bfa6b6da09af"
dependencies = [
"cfg-if",
"crc32fast",
"libc",
"miniz_oxide 0.5.1",
]
[[package]] [[package]]
name = "flume" name = "flume"
version = "0.10.12" version = "0.10.12"
@ -512,21 +583,34 @@ name = "homedisk-core"
version = "0.0.0" version = "0.0.0"
dependencies = [ dependencies = [
"better-panic", "better-panic",
"homedisk-database",
"homedisk-server", "homedisk-server",
"homedisk-types", "homedisk-types",
"homedisk-utils",
"log", "log",
"simplelog", "simplelog",
"tokio", "tokio",
] ]
[[package]]
name = "homedisk-database"
version = "0.0.0"
dependencies = [
"futures-util",
"log",
"rust_utilities",
"serde",
"sqlx",
"tokio",
"uuid",
]
[[package]] [[package]]
name = "homedisk-server" name = "homedisk-server"
version = "0.0.0" version = "0.0.0"
dependencies = [ dependencies = [
"axum", "axum",
"homedisk-database",
"homedisk-types", "homedisk-types",
"homedisk-utils",
"hyper", "hyper",
"log", "log",
"rust_utilities", "rust_utilities",
@ -549,19 +633,6 @@ dependencies = [
"zeroize", "zeroize",
] ]
[[package]]
name = "homedisk-utils"
version = "0.0.0"
dependencies = [
"futures-util",
"log",
"rust_utilities",
"serde",
"sqlx",
"tokio",
"uuid",
]
[[package]] [[package]]
name = "http" name = "http"
version = "0.2.6" version = "0.2.6"
@ -656,6 +727,15 @@ dependencies = [
"cfg-if", "cfg-if",
] ]
[[package]]
name = "iri-string"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f0f7638c1e223529f1bfdc48c8b133b9e0b434094d1d28473161ee48b235f78"
dependencies = [
"nom",
]
[[package]] [[package]]
name = "itertools" name = "itertools"
version = "0.10.3" version = "0.10.3"
@ -760,6 +840,16 @@ version = "0.3.16"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
[[package]]
name = "mime_guess"
version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
dependencies = [
"mime",
"unicase",
]
[[package]] [[package]]
name = "minimal-lexical" name = "minimal-lexical"
version = "0.2.1" version = "0.2.1"
@ -776,6 +866,15 @@ dependencies = [
"autocfg", "autocfg",
] ]
[[package]]
name = "miniz_oxide"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2b29bd4bc3f33391105ebee3589c19197c4271e3e5a9ec9bfe8127eeff8f082"
dependencies = [
"adler",
]
[[package]] [[package]]
name = "mio" name = "mio"
version = "0.8.2" version = "0.8.2"
@ -1581,6 +1680,8 @@ version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aba3f3efabf7fb41fae8534fc20a817013dd1c12cb45441efb6c82e6556b4cd8" checksum = "aba3f3efabf7fb41fae8534fc20a817013dd1c12cb45441efb6c82e6556b4cd8"
dependencies = [ dependencies = [
"async-compression",
"base64",
"bitflags", "bitflags",
"bytes", "bytes",
"futures-core", "futures-core",
@ -1588,10 +1689,18 @@ dependencies = [
"http", "http",
"http-body", "http-body",
"http-range-header", "http-range-header",
"httpdate",
"iri-string",
"mime",
"mime_guess",
"percent-encoding",
"pin-project-lite", "pin-project-lite",
"tokio",
"tokio-util",
"tower", "tower",
"tower-layer", "tower-layer",
"tower-service", "tower-service",
"tracing",
] ]
[[package]] [[package]]
@ -1651,6 +1760,15 @@ version = "1.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
[[package]]
name = "unicase"
version = "2.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
dependencies = [
"version_check",
]
[[package]] [[package]]
name = "unicode-bidi" name = "unicode-bidi"
version = "0.3.7" version = "0.3.7"

View File

@ -1,8 +1,8 @@
[workspace] [workspace]
members = [ members = [
"core", "core",
"database",
"server", "server",
"types", "types",
"utils",
] ]
resolver = "2" resolver = "2"

View File

@ -16,22 +16,8 @@ path = "./src/main.rs"
[dependencies] [dependencies]
better-panic = "0.3.0" better-panic = "0.3.0"
simplelog = "0.12.0" simplelog = "0.12.0"
tokio = { version = "1.17.0", features = ["full"] }
[dependencies.tokio] log = { version = "0.4.16", features = ["max_level_debug", "release_max_level_warn"] }
version = "1.17.0" homedisk-database = { path = "../database" }
features = ["full"] homedisk-server = { path = "../server" }
homedisk-types = { path = "../types", features = ["config"] }
[dependencies.log]
version = "0.4.16"
features = ["max_level_debug", "release_max_level_warn"]
[dependencies.homedisk-utils]
path = "../utils"
features = ["full"]
[dependencies.homedisk-server]
path = "../server"
[dependencies.homedisk-types]
path = "../types"
features = ["config"]

View File

@ -1,7 +1,7 @@
mod init; mod init;
use homedisk_database::Database;
use homedisk_types::config::types::Config; use homedisk_types::config::types::Config;
use homedisk_utils::database::Database;
#[tokio::main] #[tokio::main]
async fn main() { async fn main() {

15
database/Cargo.toml Normal file
View File

@ -0,0 +1,15 @@
[package]
name = "homedisk-database"
version = "0.0.0"
edition = "2021"
[dependencies]
log = "0.4.16"
futures-util = "0.3.21"
serde = { version = "1.0.136", features = ["derive"] }
sqlx = { version = "0.5.13", features = ["runtime-tokio-rustls", "sqlite"] }
uuid = { version = "1.0.0", features = ["v5"] }
rust_utilities = { version = "0.2.0", features = ["sha"] }
[dev-dependencies]
tokio = { version = "1.17.0", features = ["full"] }

View File

@ -13,7 +13,7 @@ pub struct Database {
impl Database { impl Database {
/// Open SQLite Database file /// Open SQLite Database file
/// ```ignore /// ```ignore
/// use homedisk_utils::database::Database; /// use homedisk_database::Database;
/// ///
/// Database::open("sqlite::memory:").await?; /// Database::open("sqlite::memory:").await?;
/// ``` /// ```
@ -27,7 +27,7 @@ impl Database {
/// Create new User /// Create new User
/// ```ignore /// ```ignore
/// use homedisk_utils::database::{Database, User}; /// use homedisk_database::{Database, User};
/// ///
/// let user = User::new("username", "password"); /// let user = User::new("username", "password");
/// db.create_user(&user).await?; /// db.create_user(&user).await?;
@ -74,7 +74,7 @@ mod tests {
use sqlx::Executor; use sqlx::Executor;
use crate::database::{Database, User}; use crate::{Database, User};
async fn open_db() -> Database { async fn open_db() -> Database {
Database::open("sqlite::memory:").await.expect("open db") Database::open("sqlite::memory:").await.expect("open db")

View File

@ -1,4 +1,4 @@
use rust_utilities::crypto::sha::{CryptographicHash, encode, Algorithm}; use rust_utilities::crypto::sha::{encode, Algorithm, CryptographicHash};
use uuid::Uuid; use uuid::Uuid;
#[derive(Debug, sqlx::FromRow)] #[derive(Debug, sqlx::FromRow)]
@ -14,7 +14,7 @@ impl User {
/// This function creates a unique UUID for a user and creates a password hash using SHA-512 /// This function creates a unique UUID for a user and creates a password hash using SHA-512
/// and returns in the User type /// and returns in the User type
/// ``` /// ```
/// use homedisk_utils::database::User; /// use homedisk_database::User;
/// ///
/// let user = User::new("medzik", "SuperSecretPassword123!"); /// let user = User::new("medzik", "SuperSecretPassword123!");
/// ``` /// ```
@ -26,7 +26,11 @@ impl User {
let sha1_name = CryptographicHash::hash(Algorithm::SHA1, username.as_bytes()); let sha1_name = CryptographicHash::hash(Algorithm::SHA1, username.as_bytes());
let id = Uuid::new_v5(&Uuid::NAMESPACE_X500, &sha1_name).to_string(); let id = Uuid::new_v5(&Uuid::NAMESPACE_X500, &sha1_name).to_string();
let password = encode(CryptographicHash::hash(Algorithm::SHA512, password.as_bytes())); // hash password using SHA-512
let password = encode(CryptographicHash::hash(
Algorithm::SHA512,
password.as_bytes(),
));
Self { Self {
id, id,
@ -48,7 +52,7 @@ mod tests {
} }
#[test] #[test]
fn check_password_is_hashed() { fn check_if_password_is_hashed() {
let password = "password"; let password = "password";
let user = User::new("test", password); let user = User::new("test", password);

View File

@ -7,27 +7,9 @@ edition = "2021"
axum = "0.5.3" axum = "0.5.3"
log = "0.4.16" log = "0.4.16"
thiserror = "1.0.30" thiserror = "1.0.30"
serde = { version = "1.0.136", features = ["derive"] }
[dependencies.tower-http] tower-http = { version = "0.2.5", features = ["full"] }
version = "0.2.5" hyper = { version = "0.14.18", features = ["full"] }
features = ["cors"] rust_utilities = { version = "0.2.0", features = ["jsonwebtoken"] }
homedisk-database = { path = "../database" }
[dependencies.hyper] homedisk-types = { path = "../types", features = ["axum"] }
version = "0.14.18"
features = ["full"]
[dependencies.serde]
version = "1.0.136"
features = ["derive"]
[dependencies.rust_utilities]
version = "0.2.0"
features = ["jsonwebtoken"]
[dependencies.homedisk-utils]
path = "../utils"
features = ["database"]
[dependencies.homedisk-types]
path = "../types"
features = ["axum"]

View File

@ -1,16 +1,16 @@
use axum::{Extension, Json}; use axum::{Extension, Json};
use homedisk_database::{Database, Error, User};
use homedisk_types::{ use homedisk_types::{
auth::login::{Request, Response}, auth::login::{Request, Response},
config::types::Config, config::types::Config,
errors::{AuthError, ServerError}, errors::{AuthError, ServerError},
}; };
use homedisk_utils::database::{Database, Error, User};
use rust_utilities::crypto::jsonwebtoken::{Claims, Token}; use rust_utilities::crypto::jsonwebtoken::{Claims, Token};
pub async fn handle( pub async fn handle(
db: Extension<Database>, db: Extension<Database>,
config: Extension<Config>, config: Extension<Config>,
Json(request): Json<Request>, request: Json<Request>,
) -> Result<Json<Response>, ServerError> { ) -> Result<Json<Response>, ServerError> {
let user = User::new(&request.username, &request.password); let user = User::new(&request.username, &request.password);

View File

@ -1,16 +1,16 @@
use axum::{Extension, Json}; use axum::{Extension, Json};
use homedisk_database::{Database, User};
use homedisk_types::{ use homedisk_types::{
auth::login::{Request, Response}, auth::login::{Request, Response},
config::types::Config, config::types::Config,
errors::{AuthError, ServerError}, errors::{AuthError, ServerError},
}; };
use homedisk_utils::database::{Database, User};
use rust_utilities::crypto::jsonwebtoken::{Claims, Token}; use rust_utilities::crypto::jsonwebtoken::{Claims, Token};
pub async fn handle( pub async fn handle(
db: Extension<Database>, db: Extension<Database>,
config: Extension<Config>, config: Extension<Config>,
Json(request): Json<Request>, request: Json<Request>,
) -> Result<Json<Response>, ServerError> { ) -> Result<Json<Response>, ServerError> {
let user = User::new(&request.username, &request.password); let user = User::new(&request.username, &request.password);

View File

@ -32,7 +32,7 @@ impl fmt::Display for Error {
match self { match self {
Error::Axum(err) => write!(f, "axum error: {}", err), Error::Axum(err) => write!(f, "axum error: {}", err),
Error::Hyper(err) => write!(f, "hyper error: {}", err), Error::Hyper(err) => write!(f, "hyper error: {}", err),
Error::AddrParseError(err) => write!(f, "AddrParse error: {}", err), Error::AddrParseError(err) => write!(f, "std::net::AddrParseError: {}", err),
} }
} }
} }

View File

@ -1,9 +1,10 @@
pub mod auth; pub mod auth;
mod error; mod error;
use axum::{http::HeaderValue, routing::get, Extension, Router, Server}; use axum::{http::HeaderValue, routing::get, Extension, Router, Server};
use homedisk_database::Database;
use homedisk_types::config::types::Config; use homedisk_types::config::types::Config;
use homedisk_utils::database::Database;
use log::{debug, info}; use log::{debug, info};
use tower_http::cors::{CorsLayer, Origin}; use tower_http::cors::{CorsLayer, Origin};

View File

@ -10,23 +10,10 @@ config = ["toml", "dirs"]
thiserror = "1.0.30" thiserror = "1.0.30"
uuid = "1.0.0" uuid = "1.0.0"
anyhow = "1.0.57" anyhow = "1.0.57"
serde = { version = "1.0.136", features = ["derive"] }
[dependencies.serde] zeroize = { version = "1.5.4", features = ["derive"] }
version = "1.0.136" axum = { version = "0.5.3", optional = true }
features = ["derive"]
[dependencies.zeroize]
version = "1.5.4"
features = ["derive"]
[dependencies.axum]
version = "0.5.3"
optional = true
# config # config
[dependencies.toml] toml = { version = "0.5.9", optional = true }
version = "0.5.9" dirs = { version = "4.0.0", optional = true }
optional = true
[dependencies.dirs]
version = "4.0.0"
optional = true

View File

@ -1,33 +0,0 @@
[package]
name = "homedisk-utils"
version = "0.0.0"
edition = "2021"
[features]
full = ["database"]
database = ["sqlx", "uuid"]
[dependencies]
log = "0.4.16"
futures-util = "0.3.21"
[dependencies.serde]
version = "1.0.136"
features = ["derive"]
# database
[dependencies.sqlx]
version = "0.5.13"
features = ["runtime-tokio-rustls", "sqlite"]
optional = true
[dependencies.uuid]
version = "1.0.0"
features = ["v5"]
optional = true
[dependencies.rust_utilities]
version = "0.2.0"
features = ["sha"]
[dev-dependencies.tokio]
version = "1.17.0"
features = ["full"]

View File

@ -1,2 +0,0 @@
#[cfg(feature = "database")]
pub mod database;