From 8163217700c08a99dbe5dc429c19d4c355495cfe Mon Sep 17 00:00:00 2001 From: Jef Roosens Date: Thu, 25 Nov 2021 01:02:23 +0100 Subject: [PATCH] Project properly compiles now --- .gitignore | 20 +++++++++ Cargo.lock | 115 +++++++++++++++++++---------------------------- Rb.yaml | 44 ++++++++++++++++++ src/auth/mod.rs | 61 +------------------------ src/auth/pass.rs | 7 +-- src/main.rs | 50 +++++++++------------ src/v1/auth.rs | 62 +++++++++++++++++++++++++ src/v1/mod.rs | 1 + 8 files changed, 198 insertions(+), 162 deletions(-) create mode 100644 Rb.yaml create mode 100644 src/v1/auth.rs create mode 100644 src/v1/mod.rs diff --git a/.gitignore b/.gitignore index ea8c4bf..ba2dc7a 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,21 @@ +# ---> Rust +# Generated by Cargo +# will have compiled files and executables +debug/ +out/ + +# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries +# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html +# Cargo.lock + +# These are backup files generated by rustfmt +**/*.rs.bk + + + +# Added by cargo + /target + +.vim/ +vendor/ diff --git a/Cargo.lock b/Cargo.lock index 40b686f..6439d98 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -57,9 +57,9 @@ dependencies = [ [[package]] name = "atomic" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3410529e8288c463bedb5930f82833bc0c90e5d2fe639a56582a4d09220b281" +checksum = "b88d82667eca772c4aa12f0f1348b3ae643424c8876448f3f7bd5787032e234c" dependencies = [ "autocfg", ] @@ -145,9 +145,9 @@ checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" [[package]] name = "cc" -version = "1.0.71" +version = "1.0.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79c2681d6594606957bbb8631c4b90a7fcaaa72cdb714743a437b156d6a7eedd" +checksum = "22a9137b95ea06864e018375b72adfb7db6e6f68cfc8df5a04d00288050485ee" [[package]] name = "cfg-if" @@ -349,9 +349,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "futures" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12aa0eb539080d55c3f2d45a67c3b58b6b0773c1a3ca2dfec66d58c97fd66ca" +checksum = "8cd0210d8c325c245ff06fd95a3b13689a1a276ac8cfa8e8720cb840bfb84b9e" dependencies = [ "futures-channel", "futures-core", @@ -364,9 +364,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5da6ba8c3bb3c165d3c7319fc1cc8304facf1fb8db99c5de877183c08a273888" +checksum = "7fc8cd39e3dbf865f7340dce6a2d401d24fd37c6fe6c4f0ee0de8bfca2252d27" dependencies = [ "futures-core", "futures-sink", @@ -374,15 +374,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d1c26957f23603395cd326b0ffe64124b818f4449552f960d815cfba83a53d" +checksum = "629316e42fe7c2a0b9a65b47d159ceaa5453ab14e8f0a3c5eedbb8cd55b4a445" [[package]] name = "futures-executor" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45025be030969d763025784f7f355043dc6bc74093e4ecc5000ca4dc50d8745c" +checksum = "7b808bf53348a36cab739d7e04755909b9fcaaa69b7d7e588b37b6ec62704c97" dependencies = [ "futures-core", "futures-task", @@ -391,18 +391,16 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "522de2a0fe3e380f1bc577ba0474108faf3f6b18321dbf60b3b9c39a75073377" +checksum = "e481354db6b5c353246ccf6a728b0c5511d752c08da7260546fc0933869daa11" [[package]] name = "futures-macro" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18e4a4b95cea4b4ccbcf1c5675ca7c4ee4e9e75eb79944d07defde18068f79bb" +checksum = "a89f17b21645bc4ed773c69af9c9a0effd4a3f1a3876eadd453469f8854e7fdd" dependencies = [ - "autocfg", - "proc-macro-hack", "proc-macro2", "quote", "syn", @@ -410,23 +408,22 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36ea153c13024fe480590b3e3d4cad89a0cfacecc24577b68f86c6ced9c2bc11" +checksum = "996c6442437b62d21a32cd9906f9c41e7dc1e19a9579843fad948696769305af" [[package]] name = "futures-task" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d3d00f4eddb73e498a54394f228cd55853bdf059259e8e7bc6e69d408892e99" +checksum = "dabf1872aaab32c886832f2276d2f5399887e2bd613698a02359e4ea83f8de12" [[package]] name = "futures-util" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36568465210a3a6ee45e1f165136d68671471a501e632e9a98d96872222b5481" +checksum = "41d22213122356472061ac0f1ab2cee28d2bac8491410fd68c2af53d1cedb83e" dependencies = [ - "autocfg", "futures-channel", "futures-core", "futures-io", @@ -436,8 +433,6 @@ dependencies = [ "memchr", "pin-project-lite", "pin-utils", - "proc-macro-hack", - "proc-macro-nested", "slab", ] @@ -555,15 +550,15 @@ checksum = "acd94fdbe1d4ff688b67b04eee2e17bd50995534a61539e45adfefb45e5e5503" [[package]] name = "httpdate" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6456b8a6c8f33fee7d958fcd1b60d55b11940a79e63ae87013e6d22e26034440" +checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] name = "hyper" -version = "0.14.14" +version = "0.14.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b91bb1f221b6ea1f1e4371216b70f40748774c2fb5971b450c07773fb92d26b" +checksum = "436ec0091e4f20e655156a30a0df3770fe2900aa301e548e08446ec794b6953c" dependencies = [ "bytes", "futures-channel", @@ -638,15 +633,15 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.107" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbe5e23404da5b4f555ef85ebed98fb4083e55a00c317800bc2a50ede9f3d219" +checksum = "8521a1b57e76b1ec69af7599e75e38e7b7fad6610f037db8c79b127201b5d119" [[package]] name = "libmimalloc-sys" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1b8479c593dba88c2741fc50b92e13dbabbbe0bd504d979f244ccc1a5b1c01" +checksum = "9636c194f9db483f4d0adf2f99a65011a99f904bd222bbd67fb4df4f37863c30" dependencies = [ "cc", ] @@ -677,9 +672,9 @@ dependencies = [ [[package]] name = "loom" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2b9df80a3804094bf49bb29881d18f6f05048db72127e84e09c26fc7c2324f5" +checksum = "5df2c4aeb432e60c9e5ae517ca8ed8b63556ce23093b2758fc8837d75439c5ec" dependencies = [ "cfg-if", "generator", @@ -692,9 +687,9 @@ dependencies = [ [[package]] name = "matchers" -version = "0.0.1" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" dependencies = [ "regex-automata", ] @@ -728,9 +723,9 @@ dependencies = [ [[package]] name = "mimalloc" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb74897ce508e6c49156fd1476fc5922cbc6e75183c65e399c765a09122e5130" +checksum = "cf5f78c1d9892fb5677a8b2f543f967ab891ac0f71feecd961435b74f877283a" dependencies = [ "libmimalloc-sys", ] @@ -920,12 +915,6 @@ version = "0.5.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" -[[package]] -name = "proc-macro-nested" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" - [[package]] name = "proc-macro2" version = "1.0.32" @@ -1011,7 +1000,7 @@ dependencies = [ [[package]] name = "rb" version = "0.1.0" -source = "git+https://git.hackbever.be/rusty-bever/common-rs.git#1ce6c47124533a9f6b9e276b7bae23f07db0bf68" +source = "git+https://git.hackbever.be/rusty-bever/common-rs.git#a587660e726d25f795e41c7dbe26940d2fdcabe5" dependencies = [ "base64", "chrono", @@ -1309,9 +1298,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.69" +version = "1.0.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e466864e431129c7e0d3476b92f20458e5879919a0596c6472738d9fa2d342f8" +checksum = "063bf466a64011ac24040a49009724ee60a57da1b437617ceb32e53ad61bfb19" dependencies = [ "itoa", "ryu", @@ -1561,9 +1550,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.13.0" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "588b2d10a336da58d877567cd8fb8a14b463e2104910f8132cd054b4b96e29ee" +checksum = "70e992e41e0d2fb9f755b37446f20900f64446ef54874f40a60c78f021ac6144" dependencies = [ "autocfg", "bytes", @@ -1580,9 +1569,9 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "1.5.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "114383b041aa6212c579467afa0075fbbdd0718de036100bc0ba7961d8cb9095" +checksum = "c9efc1aba077437943f7515666aa2b882dfabfbfdf89c819ea75a8d6e9eaba5e" dependencies = [ "proc-macro2", "quote", @@ -1672,36 +1661,22 @@ dependencies = [ "tracing-core", ] -[[package]] -name = "tracing-serde" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb65ea441fbb84f9f6748fd496cf7f63ec9af5bca94dd86456978d055e8eb28b" -dependencies = [ - "serde", - "tracing-core", -] - [[package]] name = "tracing-subscriber" -version = "0.2.25" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" +checksum = "7507ec620f809cdf07cccb5bc57b13069a88031b795efd4079b1c71b66c1613d" dependencies = [ "ansi_term", - "chrono", "lazy_static", "matchers", "regex", - "serde", - "serde_json", "sharded-slab", "smallvec", "thread_local", "tracing", "tracing-core", "tracing-log", - "tracing-serde", ] [[package]] diff --git a/Rb.yaml b/Rb.yaml new file mode 100644 index 0000000..c5f9bf9 --- /dev/null +++ b/Rb.yaml @@ -0,0 +1,44 @@ +default: + address: "0.0.0.0" + ports: 8000 + +debug: + keep_alive: 5 + read_timeout: 5 + write_timeout: 5 + log_level: "normal" + limits: + forms: 32768 + + admin_user: "bever" + admin_pass: "bever" + + jwt: + key: "secret" + refresh_token_size: 64 + # Just 5 seconds for debugging + refresh_token_expire: 60 + + databases: + postgres_rb: + url: "postgres://rb:rb@localhost:5434/rb" + +release: + keep_alive: 5 + read_timeout: 5 + write_timeout: 5 + log_level: "normal" + limits: + forms: 32768 + + admin_user: "admin" + admin_pass: "password" + jwt: + key: "secret" + refresh_token_size: 64 + # Just 5 seconds for debugging + refresh_token_expire: 60 + + databases: + postgres_rb: + url: "postgres://rb:rb@db:5432/rb" diff --git a/src/auth/mod.rs b/src/auth/mod.rs index 4b3207f..2f09000 100644 --- a/src/auth/mod.rs +++ b/src/auth/mod.rs @@ -1,68 +1,11 @@ -use rocket::{serde::json::Json, State}; use serde::Deserialize; -use self::{ - jwt::{generate_jwt_token, JWTResponse}, - pass::verify_user, -}; -use crate::{errors::RbResult, guards::User, RbConfig, RbDbConn}; - pub mod jwt; pub mod pass; #[derive(Deserialize)] pub struct Credentials { - username: String, - password: String, -} - -#[post("/login")] -pub async fn already_logged_in(_user: User) -> String -{ - String::from("You're already logged in!") -} - -#[post("/login", data = "", rank = 2)] -pub async fn login( - conn: RbDbConn, - conf: &State, - credentials: Json, -) -> RbResult> -{ - let credentials = credentials.into_inner(); - let jwt = conf.jwt.clone(); - - // Get the user, if credentials are valid - let user = conn - .run(move |c| verify_user(c, &credentials.username, &credentials.password)) - .await?; - - Ok(Json( - conn.run(move |c| generate_jwt_token(c, &jwt, &user)) - .await?, - )) -} - -#[derive(Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct RefreshTokenRequest -{ - pub refresh_token: String, -} - -#[post("/refresh", data = "")] -pub async fn refresh_token( - conn: RbDbConn, - conf: &State, - refresh_token_request: Json, -) -> RbResult> -{ - let refresh_token = refresh_token_request.into_inner().refresh_token; - let jwt = conf.jwt.clone(); - - Ok(Json( - conn.run(move |c| crate::auth::jwt::refresh_token(c, &jwt, &refresh_token)) - .await?, - )) + pub username: String, + pub password: String, } diff --git a/src/auth/pass.rs b/src/auth/pass.rs index 583908d..8e123a5 100644 --- a/src/auth/pass.rs +++ b/src/auth/pass.rs @@ -1,11 +1,8 @@ use argon2::verify_encoded; use diesel::PgConnection; use rand::{thread_rng, Rng}; - -use crate::{ - db, - errors::{RbError, RbResult}, -}; +use rb::errors::{RbError, RbResult}; +use rb_gw::db; pub fn verify_user(conn: &PgConnection, username: &str, password: &str) -> RbResult { diff --git a/src/main.rs b/src/main.rs index 294c418..3a96585 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,6 +9,7 @@ use figment::{ providers::{Env, Format, Yaml}, Figment, }; +use rb::auth::JwtConf; use rocket::{ fairing::AdHoc, http::Status, @@ -19,10 +20,7 @@ use rocket_sync_db_pools::database; use serde::{Deserialize, Serialize}; pub mod auth; -// pub mod db; -// pub mod errors; -// pub mod guards; -pub(crate) mod schema; +pub mod v1; #[database("postgres_rb")] pub struct RbDbConn(diesel::PgConnection); @@ -47,35 +45,27 @@ async fn run_db_migrations(rocket: Rocket) -> Result, Rocke .await } -async fn create_admin_user<'a>(rocket: &'a Rocket) -{ - let config = rocket.state::().expect("RbConfig instance"); - let admin_user = config.admin_user.clone(); - let admin_pass = config.admin_pass.clone(); +// async fn create_admin_user<'a>(rocket: &'a Rocket) +// { +// let config = rocket.state::().expect("RbConfig instance"); +// let admin_user = config.admin_user.clone(); +// let admin_pass = config.admin_pass.clone(); - let conn = RbDbConn::get_one(&rocket) - .await - .expect("database connection"); - conn.run(move |c| { - admin::create_admin_user(c, &admin_user, &admin_pass).expect("failed to create admin user") - }) - .await; -} - -#[derive(Debug, Deserialize, Serialize, Clone)] -pub struct RbJwtConf -{ - key: String, - refresh_token_size: usize, - refresh_token_expire: i64, -} +// let conn = RbDbConn::get_one(&rocket) +// .await +// .expect("database connection"); +// conn.run(move |c| { +// admin::create_admin_user(c, &admin_user, &admin_pass).expect("failed to create admin user") +// }) +// .await; +// } #[derive(Debug, Deserialize, Serialize)] pub struct RbConfig { admin_user: String, admin_pass: String, - jwt: RbJwtConf, + jwt: JwtConf, } #[launch] @@ -95,7 +85,11 @@ fn rocket() -> _ .attach(AdHoc::config::()) .register("/", catchers![default_catcher]) .mount( - "/api/auth", - routes![auth::already_logged_in, auth::login, auth::refresh_token,], + "/v1/auth", + routes![ + v1::auth::already_logged_in, + v1::auth::login, + v1::auth::refresh_token, + ], ) } diff --git a/src/v1/auth.rs b/src/v1/auth.rs new file mode 100644 index 0000000..8a0dc10 --- /dev/null +++ b/src/v1/auth.rs @@ -0,0 +1,62 @@ +use rb::{errors::RbResult, guards::User}; +use rocket::{serde::json::Json, State}; +use serde::Deserialize; + +use crate::{ + auth::{ + jwt::{generate_jwt_token, JWTResponse}, + pass::verify_user, + Credentials, + }, + RbConfig, RbDbConn, +}; + +#[post("/login")] +pub async fn already_logged_in(_user: User) -> String +{ + String::from("You're already logged in!") +} + +#[post("/login", data = "", rank = 2)] +pub async fn login( + conn: RbDbConn, + conf: &State, + credentials: Json, +) -> RbResult> +{ + let credentials = credentials.into_inner(); + let jwt = conf.jwt.clone(); + + // Get the user, if credentials are valid + let user = conn + .run(move |c| verify_user(c, &credentials.username, &credentials.password)) + .await?; + + Ok(Json( + conn.run(move |c| generate_jwt_token(c, &jwt, &user)) + .await?, + )) +} + +#[derive(Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct RefreshTokenRequest +{ + pub refresh_token: String, +} + +#[post("/refresh", data = "")] +pub async fn refresh_token( + conn: RbDbConn, + conf: &State, + refresh_token_request: Json, +) -> RbResult> +{ + let refresh_token = refresh_token_request.into_inner().refresh_token; + let jwt = conf.jwt.clone(); + + Ok(Json( + conn.run(move |c| crate::auth::jwt::refresh_token(c, &jwt, &refresh_token)) + .await?, + )) +} diff --git a/src/v1/mod.rs b/src/v1/mod.rs new file mode 100644 index 0000000..0e4a05d --- /dev/null +++ b/src/v1/mod.rs @@ -0,0 +1 @@ +pub mod auth;