From a680d01d7f1668851103424805593895e5e4763d Mon Sep 17 00:00:00 2001 From: Joe Ardent Date: Fri, 2 Feb 2024 21:18:27 -0800 Subject: [PATCH] add config for base url --- Cargo.lock | 183 +++++++++++++++++++------------------------ Cargo.toml | 4 +- src/bin/mkinvites.rs | 16 ++-- src/conf.rs | 33 ++++++++ src/lib.rs | 2 + 5 files changed, 126 insertions(+), 112 deletions(-) create mode 100644 src/conf.rs diff --git a/Cargo.lock b/Cargo.lock index bf2ad6d..cb9d87c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -76,9 +76,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" +checksum = "2faccea4cc4ab4a667ce676a30e8ec13922a692c99bb8f5b11f1502c72e04220" [[package]] name = "anstyle-parse" @@ -201,15 +201,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "atomic" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d818003e740b63afc82337e3160717f4f63078720a810b7b903e70a5d1d2994" -dependencies = [ - "bytemuck", -] - [[package]] name = "atomic-write-file" version = "0.1.2" @@ -424,12 +415,6 @@ version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" -[[package]] -name = "bytemuck" -version = "1.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed2490600f404f2b94c167e31d3ed1d5f3c225a0f3b80230053b3e0b7b962bd9" - [[package]] name = "byteorder" version = "1.5.0" @@ -518,6 +503,18 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" +[[package]] +name = "confy" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15d296c475c6ed4093824c28e222420831d27577aaaf0a1163a3b7fc35b248a5" +dependencies = [ + "directories", + "serde", + "thiserror", + "toml", +] + [[package]] name = "const-oid" version = "0.9.6" @@ -629,6 +626,27 @@ dependencies = [ "subtle", ] +[[package]] +name = "directories" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] + [[package]] name = "dotenvy" version = "0.15.7" @@ -683,20 +701,6 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" -[[package]] -name = "figment" -version = "0.10.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b6e5bc7bd59d60d0d45a6ccab6cf0f4ce28698fb4e81e750ddf229c9b824026" -dependencies = [ - "atomic", - "pear", - "serde", - "toml", - "uncased", - "version_check", -] - [[package]] name = "finl_unicode" version = "1.2.0" @@ -1036,9 +1040,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdea9aac0dbe5a9240d68cfd9501e2db94222c6dc06843e06640b9e07f0fdc67" +checksum = "ca38ef113da30126bbff9cd1705f9273e15d45498615d138b0c20279ac7a76aa" dependencies = [ "bytes", "futures-channel", @@ -1089,25 +1093,19 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.1" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "433de089bd45971eecf4668ee0ee8f4cec17db4f8bd8f7bc3197a6ce37aa7d9b" +checksum = "824b2ae422412366ba479e8111fd301f7b5faece8149317bb81925979a53f520" dependencies = [ "equivalent", "hashbrown", ] -[[package]] -name = "inlinable_string" -version = "0.1.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8fae54786f62fb2918dcfae3d568594e50eb9b5c25bf04371af6fe7516452fb" - [[package]] name = "itertools" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25db6b064527c5d482d0423354fcd07a89a2dfe07b67892e62411946db7f07b0" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" dependencies = [ "either", ] @@ -1162,9 +1160,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.152" +version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" [[package]] name = "libm" @@ -1172,6 +1170,17 @@ version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" +[[package]] +name = "libredox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.2", + "libc", + "redox_syscall", +] + [[package]] name = "libsqlite3-sys" version = "0.27.0" @@ -1430,6 +1439,12 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + [[package]] name = "optional_optional_user" version = "0.1.0" @@ -1507,29 +1522,6 @@ version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" -[[package]] -name = "pear" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ccca0f6c17acc81df8e242ed473ec144cbf5c98037e69aa6d144780aad103c8" -dependencies = [ - "inlinable_string", - "pear_codegen", - "yansi 1.0.0-rc.1", -] - -[[package]] -name = "pear_codegen" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e22670e8eb757cff11d6c199ca7b987f352f0346e0be4dd23869ec72cb53c77" -dependencies = [ - "proc-macro2", - "proc-macro2-diagnostics", - "quote", - "syn 2.0.48", -] - [[package]] name = "pem-rfc7468" version = "0.7.0" @@ -1623,7 +1615,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66" dependencies = [ "diff", - "yansi 0.5.1", + "yansi", ] [[package]] @@ -1635,19 +1627,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "proc-macro2-diagnostics" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", - "version_check", - "yansi 1.0.0-rc.1", -] - [[package]] name = "quote" version = "1.0.35" @@ -1696,6 +1675,17 @@ dependencies = [ "bitflags 1.3.2", ] +[[package]] +name = "redox_users" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" +dependencies = [ + "getrandom", + "libredox", + "thiserror", +] + [[package]] name = "regex" version = "1.10.3" @@ -2456,9 +2446,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35" +checksum = "c6a4b9e8023eb94392d3dca65d717c53abc5dad49c07cb65bb8fcd87115fa325" dependencies = [ "serde", "serde_spanned", @@ -2477,9 +2467,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.21.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" dependencies = [ "indexmap", "serde", @@ -2692,15 +2682,6 @@ version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" -[[package]] -name = "uncased" -version = "0.9.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1b88fcfe09e89d3866a5c11019378088af2d24c3fbd4f0543f96b479ec90697" -dependencies = [ - "version_check", -] - [[package]] name = "unicase" version = "2.7.0" @@ -2895,7 +2876,7 @@ dependencies = [ "axum-test", "chrono", "clap", - "figment", + "confy", "http 1.0.0", "julid-rs", "justerror", @@ -3088,9 +3069,9 @@ checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" [[package]] name = "winnow" -version = "0.5.35" +version = "0.5.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1931d78a9c73861da0134f453bb1f790ce49b2e30eba8410b4b79bac72b46a2d" +checksum = "818ce546a11a9986bc24f93d0cdf38a8a1a400f1473ea8c82e59f6e0ffab9249" dependencies = [ "memchr", ] @@ -3101,12 +3082,6 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" -[[package]] -name = "yansi" -version = "1.0.0-rc.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1367295b8f788d371ce2dbc842c7b709c73ee1364d30351dd300ec2203b12377" - [[package]] name = "zerocopy" version = "0.7.32" diff --git a/Cargo.toml b/Cargo.toml index 73c1317..25a123b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,8 +18,8 @@ axum-login = "0.11" axum-macros = "0.4" chrono = { version = "0.4", default-features = false, features = ["std", "clock"] } clap = { version = "4", features = ["derive", "env", "unicode", "suggestions", "usage"] } -figment = { version = "0.10", default-features = false, features = ["toml", "env"] } -http = "1.0.0" +confy = "0.6" +http = "1" julid-rs = "1" justerror = "1" parse_duration = "2.1.1" diff --git a/src/bin/mkinvites.rs b/src/bin/mkinvites.rs index 2071131..64518c3 100644 --- a/src/bin/mkinvites.rs +++ b/src/bin/mkinvites.rs @@ -4,7 +4,7 @@ use clap::Parser; use julid::Julid; use parse_duration::parse; use sqlx::SqlitePool; -use what2watch::{get_db_pool, Invitation, User}; +use what2watch::{conf::Config, get_db_pool, Invitation, User}; #[derive(Debug, Parser)] struct Cli { @@ -18,7 +18,7 @@ struct Cli { pub number: u8, } -struct Iq { +struct InvitationQuest { owner: Julid, expires: Option, uses: Option, @@ -32,7 +32,7 @@ fn main() { .expires_in .map(|e| parse(&e).expect("Could not parse {e} as a duration")); let uses = cli.uses; - let quest = Iq { + let quest = InvitationQuest { owner, expires, uses, @@ -40,6 +40,9 @@ fn main() { let pool = get_db_pool(); + let conf = Config::get(); + let base_url = &conf.base_url; + let rt = tokio::runtime::Builder::new_multi_thread() .enable_all() .build() @@ -50,7 +53,7 @@ fn main() { generate_invites(quest, num, &pool).await }); for invite in invites { - println!("{invite}"); + println!("{base_url}/signup/{invite}"); } } @@ -64,7 +67,7 @@ async fn ensure_omega(pool: &SqlitePool) { } } -async fn generate_invites(quest: Iq, number: u8, pool: &SqlitePool) -> Vec { +async fn generate_invites(quest: InvitationQuest, number: u8, pool: &SqlitePool) -> Vec { let mut invites = Vec::with_capacity(number as usize); for _ in 0..number { let mut invite = Invitation::new(quest.owner); @@ -74,7 +77,8 @@ async fn generate_invites(quest: Iq, number: u8, pool: &SqlitePool) -> Vec Self { + Self { + base_url: "http://localhost:3000".into(), + db_file: "what2watch.db".into(), + } + } +} + +impl Config { + pub fn get() -> Self { + let config: Config = confy::load(APP_NAME, None).unwrap_or_else(|e| { + tracing::debug!("Could not load {APP_NAME} config, got error {e}"); + Default::default() + }); + confy::store(APP_NAME, None, config.clone()).unwrap_or_else(|e| { + tracing::debug!("Could not store {APP_NAME} config, got error {e}"); + }); + config + } +} diff --git a/src/lib.rs b/src/lib.rs index b7a9704..0f4ba95 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -11,10 +11,12 @@ extern crate justerror; /// Some public interfaces for interacting with the database outside of the web /// app pub use db::get_db_pool; +pub mod conf; pub mod imdb_utils; pub mod import_utils; pub mod misc_util; +pub use conf::*; pub use signup::Invitation; pub use stars::*; pub use users::User;