From b13b760e2f9898d6a3062b8d52ecd9b3bf24c8c8 Mon Sep 17 00:00:00 2001 From: Jef Roosens Date: Sun, 22 Aug 2021 16:24:59 +0200 Subject: [PATCH] Completely restructured codebase --- Cargo.toml | 6 +++--- diesel.toml | 2 +- src/{rb => }/auth.rs | 5 ++++- src/db/mod.rs | 2 ++ src/db/tokens.rs | 20 ++++++++++++++++++ src/db/users.rs | 29 +++++++++++++++++++++++++++ src/{rb => }/errors.rs | 0 src/{rbs => }/guards.rs | 0 src/{rb => }/lib.rs | 3 +-- src/{rbs => }/main.rs | 7 +++---- src/rb/admin.rs | 8 -------- src/rb/models.rs | 39 ------------------------------------ src/{rbs => routes}/admin.rs | 4 ++-- src/{rbs => routes}/auth.rs | 0 src/routes/mod.rs | 2 ++ src/{rb => }/schema.rs | 0 16 files changed, 67 insertions(+), 60 deletions(-) rename src/{rb => }/auth.rs (98%) create mode 100644 src/db/mod.rs create mode 100644 src/db/tokens.rs create mode 100644 src/db/users.rs rename src/{rb => }/errors.rs (100%) rename src/{rbs => }/guards.rs (100%) rename src/{rb => }/lib.rs (93%) rename src/{rbs => }/main.rs (93%) delete mode 100644 src/rb/admin.rs delete mode 100644 src/rb/models.rs rename src/{rbs => routes}/admin.rs (75%) rename src/{rbs => routes}/auth.rs (100%) create mode 100644 src/routes/mod.rs rename src/{rb => }/schema.rs (100%) diff --git a/Cargo.toml b/Cargo.toml index 676005d..c51d32c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,11 +6,11 @@ edition = "2018" [lib] name = "rb" -path = "src/rb/lib.rs" +path = "src/lib.rs" [[bin]] -name = "rbs" -path = "src/rbs/main.rs" +name = "rbd" +path = "src/main.rs" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/diesel.toml b/diesel.toml index 332da6a..92267c8 100644 --- a/diesel.toml +++ b/diesel.toml @@ -2,4 +2,4 @@ # see diesel.rs/guides/configuring-diesel-cli [print_schema] -file = "src/rb/schema.rs" +file = "src/schema.rs" diff --git a/src/rb/auth.rs b/src/auth.rs similarity index 98% rename from src/rb/auth.rs rename to src/auth.rs index 6bc03c3..c010674 100644 --- a/src/rb/auth.rs +++ b/src/auth.rs @@ -1,5 +1,8 @@ use crate::errors::RBError; -use crate::models::{NewRefreshToken, NewUser, RefreshToken, User}; +use crate::db::{ + users::{User, NewUser}, + tokens::{RefreshToken, NewRefreshToken} +}; use crate::schema::refresh_tokens::dsl as refresh_tokens; use crate::schema::users::dsl as users; use argon2::verify_encoded; diff --git a/src/db/mod.rs b/src/db/mod.rs new file mode 100644 index 0000000..f65c924 --- /dev/null +++ b/src/db/mod.rs @@ -0,0 +1,2 @@ +pub mod users; +pub mod tokens; diff --git a/src/db/tokens.rs b/src/db/tokens.rs new file mode 100644 index 0000000..25011d8 --- /dev/null +++ b/src/db/tokens.rs @@ -0,0 +1,20 @@ +use uuid::Uuid; +use diesel::{Queryable, Insertable}; +use crate::schema::refresh_tokens; + + +#[derive(Queryable)] +pub struct RefreshToken { + pub token: Vec, + pub user_id: Uuid, + pub expires_at: chrono::NaiveDateTime, + pub last_used_at: Option, +} + +#[derive(Insertable)] +#[table_name = "refresh_tokens"] +pub struct NewRefreshToken { + pub token: Vec, + pub user_id: Uuid, + pub expires_at: chrono::NaiveDateTime, +} diff --git a/src/db/users.rs b/src/db/users.rs new file mode 100644 index 0000000..72fc125 --- /dev/null +++ b/src/db/users.rs @@ -0,0 +1,29 @@ +use crate::schema::users; +use diesel::{AsChangeset, Insertable, Queryable, prelude::*}; +use serde::Serialize; +use uuid::Uuid; +use crate::schema::users::dsl::*; +use crate::errors::RBError; + +#[derive(Queryable, Serialize)] +pub struct User { + pub id: Uuid, + pub username: String, + #[serde(skip_serializing)] + pub password: String, + #[serde(skip_serializing)] + pub blocked: bool, + pub admin: bool, +} + +#[derive(Insertable, AsChangeset)] +#[table_name = "users"] +pub struct NewUser { + pub username: String, + pub password: String, + pub admin: bool, +} + +pub fn all(conn: &PgConnection) -> crate::Result> { + users.load::(conn).map_err(|_| RBError::DBError) +} diff --git a/src/rb/errors.rs b/src/errors.rs similarity index 100% rename from src/rb/errors.rs rename to src/errors.rs diff --git a/src/rbs/guards.rs b/src/guards.rs similarity index 100% rename from src/rbs/guards.rs rename to src/guards.rs diff --git a/src/rb/lib.rs b/src/lib.rs similarity index 93% rename from src/rb/lib.rs rename to src/lib.rs index c1b0c4a..6d408d8 100644 --- a/src/rb/lib.rs +++ b/src/lib.rs @@ -1,10 +1,9 @@ #[macro_use] extern crate diesel; +pub mod db; pub mod auth; pub mod errors; -pub mod admin; -pub mod models; pub(crate) mod schema; pub use errors::Result; diff --git a/src/rbs/main.rs b/src/main.rs similarity index 93% rename from src/rbs/main.rs rename to src/main.rs index 38e03d8..7bb9081 100644 --- a/src/rbs/main.rs +++ b/src/main.rs @@ -10,9 +10,8 @@ extern crate diesel_migrations; use rocket::{fairing::AdHoc, Build, Rocket}; use rocket_sync_db_pools::{database, diesel}; -mod auth; -mod admin; pub(crate) mod guards; +mod routes; embed_migrations!(); @@ -55,6 +54,6 @@ fn rocket() -> _ { run_db_migrations, )) .attach(AdHoc::try_on_ignite("Create admin user", create_admin_user)) - .mount("/api/auth", auth::routes()) - .mount("/api/admin", admin::routes()) + .mount("/api/auth", routes::auth::routes()) + .mount("/api/admin", routes::admin::routes()) } diff --git a/src/rb/admin.rs b/src/rb/admin.rs deleted file mode 100644 index 352f086..0000000 --- a/src/rb/admin.rs +++ /dev/null @@ -1,8 +0,0 @@ -use crate::errors::RBError; -use crate::models::User; -use diesel::prelude::*; -use crate::schema::users::dsl as users; - -pub fn get_users(conn: &PgConnection) -> crate::Result> { - users::users.load::(conn).map_err(|_| RBError::DBError) -} diff --git a/src/rb/models.rs b/src/rb/models.rs deleted file mode 100644 index 81b34ca..0000000 --- a/src/rb/models.rs +++ /dev/null @@ -1,39 +0,0 @@ -use crate::schema::{refresh_tokens, users}; -use diesel::{AsChangeset, Insertable, Queryable}; -use serde::Serialize; -use uuid::Uuid; - -#[derive(Queryable, Serialize)] -pub struct User { - pub id: Uuid, - pub username: String, - #[serde(skip_serializing)] - pub password: String, - #[serde(skip_serializing)] - pub blocked: bool, - pub admin: bool, -} - -#[derive(Insertable, AsChangeset)] -#[table_name = "users"] -pub struct NewUser { - pub username: String, - pub password: String, - pub admin: bool, -} - -#[derive(Queryable)] -pub struct RefreshToken { - pub token: Vec, - pub user_id: Uuid, - pub expires_at: chrono::NaiveDateTime, - pub last_used_at: Option, -} - -#[derive(Insertable)] -#[table_name = "refresh_tokens"] -pub struct NewRefreshToken { - pub token: Vec, - pub user_id: Uuid, - pub expires_at: chrono::NaiveDateTime, -} diff --git a/src/rbs/admin.rs b/src/routes/admin.rs similarity index 75% rename from src/rbs/admin.rs rename to src/routes/admin.rs index 9bd9d7b..84ad6a4 100644 --- a/src/rbs/admin.rs +++ b/src/routes/admin.rs @@ -1,6 +1,6 @@ use crate::guards::Admin; use crate::RbDbConn; -use rb::models::User; +use rb::db::users::User; use rocket::serde::json::Json; pub fn routes() -> Vec { @@ -9,5 +9,5 @@ pub fn routes() -> Vec { #[get("/users")] async fn get_users(admin: Admin, conn: RbDbConn) -> rb::Result>> { - Ok(Json(conn.run(|c| rb::admin::get_users(c)).await?)) + Ok(Json(conn.run(|c| rb::db::users::all(c)).await?)) } diff --git a/src/rbs/auth.rs b/src/routes/auth.rs similarity index 100% rename from src/rbs/auth.rs rename to src/routes/auth.rs diff --git a/src/routes/mod.rs b/src/routes/mod.rs new file mode 100644 index 0000000..78b1e23 --- /dev/null +++ b/src/routes/mod.rs @@ -0,0 +1,2 @@ +pub mod auth; +pub mod admin; diff --git a/src/rb/schema.rs b/src/schema.rs similarity index 100% rename from src/rb/schema.rs rename to src/schema.rs