From 6f0b83b8257e823f5785a64b056e39192b5d2f64 Mon Sep 17 00:00:00 2001 From: phoenix Date: Thu, 29 May 2025 19:04:26 -0400 Subject: [PATCH 01/18] Added new dependency --- Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/Cargo.toml b/Cargo.toml index 9980193..4431e93 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,6 +20,7 @@ rand = { version = "0.9" } time = { version = "0.3.41", features = ["macros", "serde"] } josekit = { version = "0.10.1" } icarus_models = { git = "ssh://git@git.kundeng.us/phoenix/icarus_models.git", tag = "v0.4.3" } +icarus_envy = { git = "ssh://git@git.kundeng.us/phoenix/icarus_envy.git", tag = "v0.1.0-devel-b89633e394-950" } [dev-dependencies] http-body-util = { version = "0.1.3" } -- 2.43.0 From 44e4cfcbc6c23e9e9205308802185511aa45af3c Mon Sep 17 00:00:00 2001 From: phoenix Date: Thu, 29 May 2025 19:40:12 -0400 Subject: [PATCH 02/18] Updated icarus_envy --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 4431e93..4a9fc20 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,7 +20,7 @@ rand = { version = "0.9" } time = { version = "0.3.41", features = ["macros", "serde"] } josekit = { version = "0.10.1" } icarus_models = { git = "ssh://git@git.kundeng.us/phoenix/icarus_models.git", tag = "v0.4.3" } -icarus_envy = { git = "ssh://git@git.kundeng.us/phoenix/icarus_envy.git", tag = "v0.1.0-devel-b89633e394-950" } +icarus_envy = { git = "ssh://git@git.kundeng.us/phoenix/icarus_envy.git", tag = "v0.1.0-devel-f0726b83c9-950" } [dev-dependencies] http-body-util = { version = "0.1.3" } -- 2.43.0 From 51340beaa7d024ba187d1b2a377b9d8bd226c7c8 Mon Sep 17 00:00:00 2001 From: phoenix Date: Thu, 29 May 2025 19:40:42 -0400 Subject: [PATCH 03/18] Migrating code to icarus_envy --- src/lib.rs | 11 +++++++++-- src/main.rs | 6 +++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index ca334c5..99380ae 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,6 +4,7 @@ pub mod hashing; pub mod repo; pub mod token_stuff; +/* pub mod keys { pub const DBURL: &str = "DATABASE_URL"; @@ -11,6 +12,7 @@ pub mod keys { pub const ERROR: &str = "DATABASE_URL must be set in .env"; } } +*/ mod connection_settings { pub const MAXCONN: u32 = 5; @@ -21,10 +23,13 @@ pub mod db { use sqlx::postgres::PgPoolOptions; use std::env; - use crate::{connection_settings, keys}; + use icarus_envy::keys; + + // use crate::{connection_settings, keys}; + use crate::connection_settings; pub async fn create_pool() -> Result { - let database_url = get_db_url().await; + let database_url = icarus_envy::environment::get_db_url().await; println!("Database url: {:?}", database_url); PgPoolOptions::new() @@ -33,11 +38,13 @@ pub mod db { .await } + /* async fn get_db_url() -> String { #[cfg(debug_assertions)] // Example: Only load .env in debug builds dotenvy::dotenv().ok(); env::var(keys::DBURL).expect(keys::error::ERROR) } + */ pub async fn migrations(pool: &sqlx::PgPool) { // Run migrations using the sqlx::migrate! macro diff --git a/src/main.rs b/src/main.rs index 27b8bb1..68293ba 100644 --- a/src/main.rs +++ b/src/main.rs @@ -75,7 +75,7 @@ mod tests { pub async fn get_pool() -> Result { dotenvy::dotenv().ok(); // Load .env file if it exists - let tm_db_url = std::env::var(keys::DBURL).expect("DATABASE_URL must be present"); + let tm_db_url = std::env::var(icarus_envy::keys::DBURL).expect("DATABASE_URL must be present"); let tm_options = sqlx::postgres::PgConnectOptions::from_str(&tm_db_url).unwrap(); sqlx::PgPool::connect_with(tm_options).await } @@ -87,7 +87,7 @@ mod tests { } pub async fn connect_to_db(db_name: &str) -> Result { - let db_url = std::env::var(keys::DBURL).expect("DATABASE_URL must be set for tests"); + let db_url = std::env::var(icarus_envy::keys::DBURL).expect("DATABASE_URL must be set for tests"); let options = sqlx::postgres::PgConnectOptions::from_str(&db_url)?.database(db_name); sqlx::PgPool::connect_with(options).await } @@ -116,7 +116,7 @@ mod tests { pub fn get_database_name() -> Result> { dotenvy::dotenv().ok(); // Load .env file if it exists - match std::env::var(keys::DBURL) { + match std::env::var(icarus_envy::keys::DBURL) { Ok(database_url) => { let parsed_url = url::Url::parse(&database_url)?; if parsed_url.scheme() == "postgres" || parsed_url.scheme() == "postgresql" { -- 2.43.0 From 2de1669a1963b99f01429e57dfb7df6f059aa19d Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 31 May 2025 21:03:23 -0400 Subject: [PATCH 04/18] Updated icarus_envy --- Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 4a9fc20..a9369e7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,14 +13,14 @@ tracing-subscriber = { version = "0.3.19" } tower = { version = "0.5.2" } hyper = { version = "1.6.0" } sqlx = { version = "0.8.3", features = ["postgres", "runtime-tokio-native-tls", "time", "uuid"] } -dotenvy = { version = "0.15.7" } +# dotenvy = { version = "0.15.7" } uuid = { version = "1.16.0", features = ["v4", "serde"] } argon2 = { version = "0.5.3", features = ["std"] } # Use the latest 0.5.x version rand = { version = "0.9" } time = { version = "0.3.41", features = ["macros", "serde"] } josekit = { version = "0.10.1" } icarus_models = { git = "ssh://git@git.kundeng.us/phoenix/icarus_models.git", tag = "v0.4.3" } -icarus_envy = { git = "ssh://git@git.kundeng.us/phoenix/icarus_envy.git", tag = "v0.1.0-devel-f0726b83c9-950" } +icarus_envy = { git = "ssh://git@git.kundeng.us/phoenix/icarus_envy.git", tag = "v0.1.0-devel-596d2afdaa-950" } [dev-dependencies] http-body-util = { version = "0.1.3" } -- 2.43.0 From 383d92f2ee0db82ab44ab6e082f1b02e2002ca32 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 31 May 2025 21:04:10 -0400 Subject: [PATCH 05/18] Replacing with icarus_envy --- src/token_stuff/mod.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/token_stuff/mod.rs b/src/token_stuff/mod.rs index d189a2d..d04b407 100644 --- a/src/token_stuff/mod.rs +++ b/src/token_stuff/mod.rs @@ -12,11 +12,13 @@ pub const MESSAGE: &str = "Something random"; pub const ISSUER: &str = "icarus_auth"; pub const AUDIENCE: &str = "icarus"; +/* pub fn get_key() -> Result { dotenvy::dotenv().ok(); let key = std::env::var(KEY_ENV).expect("SECRET_KEY_NOT_FOUND"); Ok(key) } +*/ pub fn get_issued() -> time::Result { Ok(time::OffsetDateTime::now_utc()) @@ -51,7 +53,11 @@ pub fn create_token(provided_key: &String) -> Result<(String, i64), josekit::Jos payload.set_expires_at(&util::time_to_std_time(&expire).unwrap()); let key: String = if provided_key.is_empty() { - get_key().unwrap() + // get_key().unwrap() + let rt = tokio::runtime::Runtime::new().unwrap(); + + // Block on the async function to get the result + rt.block_on(icarus_envy::environment::get_secret_key()) } else { provided_key.to_owned() }; -- 2.43.0 From c657ac935b0ba2e51beeea38cccf5a737d765f00 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 31 May 2025 21:04:25 -0400 Subject: [PATCH 06/18] Replacing with icarus_envy --- src/callers/login.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/callers/login.rs b/src/callers/login.rs index 83347e1..7c391e4 100644 --- a/src/callers/login.rs +++ b/src/callers/login.rs @@ -47,7 +47,7 @@ pub mod endpoint { Ok(user) => { if hashing::verify_password(&payload.password, user.password.clone()).unwrap() { // Create token - let key = token_stuff::get_key().unwrap(); + let key = icarus_envy::environment::get_secret_key().await; let (token_literal, duration) = token_stuff::create_token(&key).unwrap(); if token_stuff::verify_token(&key, &token_literal) { -- 2.43.0 From fb892c1f7a33a9ff67acfe405e59065ecbc85d91 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 31 May 2025 21:04:42 -0400 Subject: [PATCH 07/18] Removing unused imports --- src/lib.rs | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 99380ae..12f9ea8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -21,9 +21,6 @@ mod connection_settings { pub mod db { use sqlx::postgres::PgPoolOptions; - use std::env; - - use icarus_envy::keys; // use crate::{connection_settings, keys}; use crate::connection_settings; -- 2.43.0 From 5ee886ec383ef0b36df43f8f1369a1b2e5d6ea7a Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 31 May 2025 21:32:30 -0400 Subject: [PATCH 08/18] Updated icarus_envy --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index a9369e7..b3615fc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,7 +20,7 @@ rand = { version = "0.9" } time = { version = "0.3.41", features = ["macros", "serde"] } josekit = { version = "0.10.1" } icarus_models = { git = "ssh://git@git.kundeng.us/phoenix/icarus_models.git", tag = "v0.4.3" } -icarus_envy = { git = "ssh://git@git.kundeng.us/phoenix/icarus_envy.git", tag = "v0.1.0-devel-596d2afdaa-950" } +icarus_envy = { git = "ssh://git@git.kundeng.us/phoenix/icarus_envy.git", tag = "v0.2.0-devel-dbe4dc67cb-950" } [dev-dependencies] http-body-util = { version = "0.1.3" } -- 2.43.0 From 4a35802caabf6d82ad7e059f1f786c2e5e3ad1f0 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 31 May 2025 21:32:45 -0400 Subject: [PATCH 09/18] Changes to environment retrieval code --- src/token_stuff/mod.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/token_stuff/mod.rs b/src/token_stuff/mod.rs index d04b407..551f953 100644 --- a/src/token_stuff/mod.rs +++ b/src/token_stuff/mod.rs @@ -88,7 +88,8 @@ mod tests { #[test] fn test_tokenize() { - let special_key = get_key().unwrap(); + let rt = tokio::runtime::Runtime::new().unwrap(); + let special_key = rt.block_on(icarus_envy::environment::get_secret_key()); match create_token(&special_key) { Ok((token, _duration)) => { let result = verify_token(&special_key, &token); -- 2.43.0 From 64f731b1aadabb935e76a7f5201f0a7db31691d8 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 31 May 2025 21:35:42 -0400 Subject: [PATCH 10/18] Test refactor --- src/main.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index 68293ba..af810b4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -75,7 +75,7 @@ mod tests { pub async fn get_pool() -> Result { dotenvy::dotenv().ok(); // Load .env file if it exists - let tm_db_url = std::env::var(icarus_envy::keys::DBURL).expect("DATABASE_URL must be present"); + let tm_db_url = icarus_envy::environment::get_db_url().await; let tm_options = sqlx::postgres::PgConnectOptions::from_str(&tm_db_url).unwrap(); sqlx::PgPool::connect_with(tm_options).await } @@ -87,7 +87,7 @@ mod tests { } pub async fn connect_to_db(db_name: &str) -> Result { - let db_url = std::env::var(icarus_envy::keys::DBURL).expect("DATABASE_URL must be set for tests"); + let db_url = icarus_envy::environment::get_db_url().await; let options = sqlx::postgres::PgConnectOptions::from_str(&db_url)?.database(db_name); sqlx::PgPool::connect_with(options).await } -- 2.43.0 From 8baac56f7cbcb927ab515c5eee8224a012e50151 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 31 May 2025 21:38:29 -0400 Subject: [PATCH 11/18] Syntax fix --- src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index af810b4..bf05041 100644 --- a/src/main.rs +++ b/src/main.rs @@ -116,7 +116,7 @@ mod tests { pub fn get_database_name() -> Result> { dotenvy::dotenv().ok(); // Load .env file if it exists - match std::env::var(icarus_envy::keys::DBURL) { + match std::env::var(icarus_envy::keys::DB_URL) { Ok(database_url) => { let parsed_url = url::Url::parse(&database_url)?; if parsed_url.scheme() == "postgres" || parsed_url.scheme() == "postgresql" { -- 2.43.0 From f016c7903f1c7026440d671add0d564cc97d1ed2 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 31 May 2025 21:42:49 -0400 Subject: [PATCH 12/18] test refactoring --- src/main.rs | 38 +++++++++++++++----------------------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/src/main.rs b/src/main.rs index bf05041..bcf3d92 100644 --- a/src/main.rs +++ b/src/main.rs @@ -69,12 +69,9 @@ mod tests { mod db_mgr { use std::str::FromStr; - use icarus_auth::keys; - pub const LIMIT: usize = 6; pub async fn get_pool() -> Result { - dotenvy::dotenv().ok(); // Load .env file if it exists let tm_db_url = icarus_envy::environment::get_db_url().await; let tm_options = sqlx::postgres::PgConnectOptions::from_str(&tm_db_url).unwrap(); sqlx::PgPool::connect_with(tm_options).await @@ -114,28 +111,23 @@ mod tests { } pub fn get_database_name() -> Result> { - dotenvy::dotenv().ok(); // Load .env file if it exists + let rt = tokio::runtime::Runtime::new().unwrap(); - match std::env::var(icarus_envy::keys::DB_URL) { - Ok(database_url) => { - let parsed_url = url::Url::parse(&database_url)?; - if parsed_url.scheme() == "postgres" || parsed_url.scheme() == "postgresql" { - match parsed_url - .path_segments() - .and_then(|segments| segments.last().map(|s| s.to_string())) - { - Some(sss) => Ok(sss), - None => Err("Error parsing".into()), - } - } else { - // Handle other database types if needed - Err("Error parsing".into()) - } - } - Err(_) => { - // DATABASE_URL environment variable not found - Err("Error parsing".into()) + // Block on the async function to get the result + let database_url = rt.block_on(icarus_envy::environment::get_db_url()); + + let parsed_url = url::Url::parse(&database_url)?; + if parsed_url.scheme() == "postgres" || parsed_url.scheme() == "postgresql" { + match parsed_url + .path_segments() + .and_then(|segments| segments.last().map(|s| s.to_string())) + { + Some(sss) => Ok(sss), + None => Err("Error parsing".into()), } + } else { + // Handle other database types if needed + Err("Error parsing".into()) } } } -- 2.43.0 From 853f8925ef0f82025af6acd3f6dee6b786922d12 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 31 May 2025 21:48:14 -0400 Subject: [PATCH 13/18] Test refactor -async related --- src/main.rs | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/main.rs b/src/main.rs index bcf3d92..612a723 100644 --- a/src/main.rs +++ b/src/main.rs @@ -79,7 +79,7 @@ mod tests { pub async fn generate_db_name() -> String { let db_name = - get_database_name().unwrap() + &"_" + &uuid::Uuid::new_v4().to_string()[..LIMIT]; + get_database_name().await.unwrap() + &"_" + &uuid::Uuid::new_v4().to_string()[..LIMIT]; db_name } @@ -110,11 +110,8 @@ mod tests { Ok(()) } - pub fn get_database_name() -> Result> { - let rt = tokio::runtime::Runtime::new().unwrap(); - - // Block on the async function to get the result - let database_url = rt.block_on(icarus_envy::environment::get_db_url()); + pub async fn get_database_name() -> Result> { + let database_url = icarus_envy::environment::get_db_url().await; let parsed_url = url::Url::parse(&database_url)?; if parsed_url.scheme() == "postgres" || parsed_url.scheme() == "postgresql" { -- 2.43.0 From e1358953cbf5ad0876c5fb24e1ec3cd6df137738 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 31 May 2025 21:49:03 -0400 Subject: [PATCH 14/18] Rust formatting --- src/main.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index 612a723..f12ff7c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -78,8 +78,9 @@ mod tests { } pub async fn generate_db_name() -> String { - let db_name = - get_database_name().await.unwrap() + &"_" + &uuid::Uuid::new_v4().to_string()[..LIMIT]; + let db_name = get_database_name().await.unwrap() + + &"_" + + &uuid::Uuid::new_v4().to_string()[..LIMIT]; db_name } -- 2.43.0 From b1cabcf66456678c76db9e43c1424798d18dcdcf Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 1 Jun 2025 18:51:05 -0400 Subject: [PATCH 15/18] Added TODO --- run_migrations.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/run_migrations.txt b/run_migrations.txt index 927b280..00583ef 100644 --- a/run_migrations.txt +++ b/run_migrations.txt @@ -1,3 +1,5 @@ +TODO: At some point, move this somewhere that is appropriate + # Make sure role has CREATEDB ALTER ROLE username_that_needs_permission CREATEDB; -- 2.43.0 From 35bfdb5de662d3f9d843965d930f60db917bdd9d Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 1 Jun 2025 18:53:42 -0400 Subject: [PATCH 16/18] Code cleanup --- src/lib.rs | 18 ------------------ src/token_stuff/mod.rs | 8 -------- 2 files changed, 26 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 12f9ea8..e0eb5a7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,15 +4,6 @@ pub mod hashing; pub mod repo; pub mod token_stuff; -/* -pub mod keys { - pub const DBURL: &str = "DATABASE_URL"; - - pub mod error { - pub const ERROR: &str = "DATABASE_URL must be set in .env"; - } -} -*/ mod connection_settings { pub const MAXCONN: u32 = 5; @@ -22,7 +13,6 @@ pub mod db { use sqlx::postgres::PgPoolOptions; - // use crate::{connection_settings, keys}; use crate::connection_settings; pub async fn create_pool() -> Result { @@ -35,14 +25,6 @@ pub mod db { .await } - /* - async fn get_db_url() -> String { - #[cfg(debug_assertions)] // Example: Only load .env in debug builds - dotenvy::dotenv().ok(); - env::var(keys::DBURL).expect(keys::error::ERROR) - } - */ - pub async fn migrations(pool: &sqlx::PgPool) { // Run migrations using the sqlx::migrate! macro // Assumes your migrations are in a ./migrations folder relative to Cargo.toml diff --git a/src/token_stuff/mod.rs b/src/token_stuff/mod.rs index 551f953..bd08393 100644 --- a/src/token_stuff/mod.rs +++ b/src/token_stuff/mod.rs @@ -12,13 +12,6 @@ pub const MESSAGE: &str = "Something random"; pub const ISSUER: &str = "icarus_auth"; pub const AUDIENCE: &str = "icarus"; -/* -pub fn get_key() -> Result { - dotenvy::dotenv().ok(); - let key = std::env::var(KEY_ENV).expect("SECRET_KEY_NOT_FOUND"); - Ok(key) -} -*/ pub fn get_issued() -> time::Result { Ok(time::OffsetDateTime::now_utc()) @@ -53,7 +46,6 @@ pub fn create_token(provided_key: &String) -> Result<(String, i64), josekit::Jos payload.set_expires_at(&util::time_to_std_time(&expire).unwrap()); let key: String = if provided_key.is_empty() { - // get_key().unwrap() let rt = tokio::runtime::Runtime::new().unwrap(); // Block on the async function to get the result -- 2.43.0 From 2722c7fe5c6dc00da1548baf24481288c3eb0b09 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 1 Jun 2025 18:53:58 -0400 Subject: [PATCH 17/18] Code formatting --- src/lib.rs | 1 - src/token_stuff/mod.rs | 1 - 2 files changed, 2 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index e0eb5a7..ada99d7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,7 +4,6 @@ pub mod hashing; pub mod repo; pub mod token_stuff; - mod connection_settings { pub const MAXCONN: u32 = 5; } diff --git a/src/token_stuff/mod.rs b/src/token_stuff/mod.rs index bd08393..44b3117 100644 --- a/src/token_stuff/mod.rs +++ b/src/token_stuff/mod.rs @@ -12,7 +12,6 @@ pub const MESSAGE: &str = "Something random"; pub const ISSUER: &str = "icarus_auth"; pub const AUDIENCE: &str = "icarus"; - pub fn get_issued() -> time::Result { Ok(time::OffsetDateTime::now_utc()) } -- 2.43.0 From 194aea59bf41a853240f29bb9ec3f32fa24b6685 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 1 Jun 2025 18:55:11 -0400 Subject: [PATCH 18/18] Removed commented out dependency --- Cargo.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index b3615fc..74088df 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,7 +13,6 @@ tracing-subscriber = { version = "0.3.19" } tower = { version = "0.5.2" } hyper = { version = "1.6.0" } sqlx = { version = "0.8.3", features = ["postgres", "runtime-tokio-native-tls", "time", "uuid"] } -# dotenvy = { version = "0.15.7" } uuid = { version = "1.16.0", features = ["v4", "serde"] } argon2 = { version = "0.5.3", features = ["std"] } # Use the latest 0.5.x version rand = { version = "0.9" } -- 2.43.0