From 77e91a1d075c8f3a933b5307fd2cc9cc580ea5e4 Mon Sep 17 00:00:00 2001 From: toast Date: Tue, 26 Mar 2024 12:28:13 +1100 Subject: [PATCH] Add TokenService client --- Cargo.lock | 157 +++++++++++++++++++++++++++++++++++- Cargo.toml | 3 +- src/controllers/database.rs | 5 +- src/internals/mod.rs | 1 + src/internals/tsclient.rs | 17 ++++ src/internals/utils.rs | 6 ++ src/main.rs | 3 +- 7 files changed, 185 insertions(+), 7 deletions(-) create mode 100644 src/internals/tsclient.rs diff --git a/Cargo.lock b/Cargo.lock index b176359..db0e025 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -389,6 +389,18 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "enum-as-inner" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ffccbb6966c05b32ef8fbac435df276c4ae4d3dc55a8cd0eb9745e6c12f546a" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.55", +] + [[package]] name = "equivalent" version = "1.0.1" @@ -652,6 +664,12 @@ version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + [[package]] name = "hermit-abi" version = "0.3.9" @@ -667,6 +685,17 @@ dependencies = [ "digest", ] +[[package]] +name = "hostname" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" +dependencies = [ + "libc", + "match_cfg", + "winapi", +] + [[package]] name = "http" version = "0.2.12" @@ -858,6 +887,16 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" +[[package]] +name = "idna" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + [[package]] name = "idna" version = "0.5.0" @@ -878,6 +917,18 @@ dependencies = [ "hashbrown", ] +[[package]] +name = "ipconfig" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" +dependencies = [ + "socket2", + "widestring", + "windows-sys 0.48.0", + "winreg", +] + [[package]] name = "ipnet" version = "2.9.0" @@ -901,7 +952,7 @@ dependencies = [ [[package]] name = "kon" -version = "0.2.4" +version = "0.2.6" dependencies = [ "cargo_toml", "gamedig", @@ -911,6 +962,7 @@ dependencies = [ "serde", "serde_json", "sysinfo", + "tokenservice-client", "tokio", "tokio-postgres", "uptime_lib", @@ -928,6 +980,12 @@ version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + [[package]] name = "linux-raw-sys" version = "0.4.13" @@ -950,6 +1008,21 @@ version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +[[package]] +name = "lru-cache" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" +dependencies = [ + "linked-hash-map", +] + +[[package]] +name = "match_cfg" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" + [[package]] name = "md-5" version = "0.10.6" @@ -1327,6 +1400,12 @@ dependencies = [ "unicase", ] +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + [[package]] name = "quote" version = "1.0.35" @@ -1510,6 +1589,16 @@ dependencies = [ "winreg", ] +[[package]] +name = "resolv-conf" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" +dependencies = [ + "hostname", + "quick-error", +] + [[package]] name = "ring" version = "0.17.8" @@ -2026,6 +2115,18 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +[[package]] +name = "tokenservice-client" +version = "0.1.0" +source = "sparse+https://git.toast-server.net/api/packages/toast/cargo/" +checksum = "7da0d635427394e32f228f3c0c7642e1ffd3fe1f668739b1435fd737bb9f58e6" +dependencies = [ + "reqwest 0.12.2", + "serde", + "tokio", + "trust-dns-resolver", +] + [[package]] name = "tokio" version = "1.36.0" @@ -2242,6 +2343,52 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "859eb650cfee7434994602c3a68b25d77ad9e68c8a6cd491616ef86661382eb3" +[[package]] +name = "trust-dns-proto" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3119112651c157f4488931a01e586aa459736e9d6046d3bd9105ffb69352d374" +dependencies = [ + "async-trait", + "cfg-if", + "data-encoding", + "enum-as-inner", + "futures-channel", + "futures-io", + "futures-util", + "idna 0.4.0", + "ipnet", + "once_cell", + "rand", + "smallvec", + "thiserror", + "tinyvec", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "trust-dns-resolver" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10a3e6c3aff1718b3c73e395d1f35202ba2ffa847c6a62eea0db8fb4cfe30be6" +dependencies = [ + "cfg-if", + "futures-util", + "ipconfig", + "lru-cache", + "once_cell", + "parking_lot", + "rand", + "resolv-conf", + "smallvec", + "thiserror", + "tokio", + "tracing", + "trust-dns-proto", +] + [[package]] name = "try-lock" version = "0.2.5" @@ -2379,7 +2526,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" dependencies = [ "form_urlencoded", - "idna", + "idna 0.5.0", "percent-encoding", "serde", ] @@ -2548,6 +2695,12 @@ dependencies = [ "web-sys", ] +[[package]] +name = "widestring" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8" + [[package]] name = "winapi" version = "0.3.9" diff --git a/Cargo.toml b/Cargo.toml index 7793975..e10e681 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "kon" -version = "0.2.4" +version = "0.2.6" rust-version = "1.75" edition = "2021" @@ -13,6 +13,7 @@ reqwest = { version = "0.12.2", features = ["json"] } serde = "1.0.197" serde_json = "1.0.114" sysinfo = "0.30.7" +tokenservice-client = { version = "0.1.0", registry = "gitea" } tokio = { version = "1.36.0", features = ["macros", "signal", "rt-multi-thread"] } tokio-postgres = "0.7.10" uptime_lib = "0.3.0" diff --git a/src/controllers/database.rs b/src/controllers/database.rs index 1f7ecec..0ad0cff 100644 --- a/src/controllers/database.rs +++ b/src/controllers/database.rs @@ -1,3 +1,5 @@ +use crate::internals; + use poise::serenity_prelude::prelude::TypeMapKey; use tokio_postgres::{Client, NoTls, Error}; @@ -11,8 +13,7 @@ impl TypeMapKey for DatabaseController { impl DatabaseController { pub async fn new() -> Result { - let db_uri = std::env::var("DATABASE_URI").expect("Expected a \"DATABASE_URI\" in the envvar but none was found"); - let (client, connection) = tokio_postgres::connect(&db_uri, NoTls).await?; + let (client, connection) = tokio_postgres::connect(&internals::utils::token_path().await.postgres_uri, NoTls).await?; tokio::spawn(async move { if let Err(e) = connection.await { diff --git a/src/internals/mod.rs b/src/internals/mod.rs index 20bf31e..0dfd5fa 100644 --- a/src/internals/mod.rs +++ b/src/internals/mod.rs @@ -1,2 +1,3 @@ pub mod utils; pub mod http; +pub mod tsclient; diff --git a/src/internals/tsclient.rs b/src/internals/tsclient.rs new file mode 100644 index 0000000..c8d9122 --- /dev/null +++ b/src/internals/tsclient.rs @@ -0,0 +1,17 @@ +use tokenservice_client::{TokenService, TokenServiceApi}; + +pub struct TSClient { + client: TokenService +} + +impl TSClient { + pub fn new() -> Self { + TSClient { + client: TokenService::new("kon") + } + } + pub async fn get(&self) -> Result> { + let api = self.client.connect().await.unwrap(); + Ok(api) + } +} diff --git a/src/internals/utils.rs b/src/internals/utils.rs index a2d70db..cf6cd72 100644 --- a/src/internals/utils.rs +++ b/src/internals/utils.rs @@ -1,4 +1,5 @@ use once_cell::sync::Lazy; +use tokenservice_client::TokenServiceApi; pub static EMBED_COLOR: i32 = 0x5a99c7; @@ -7,6 +8,11 @@ pub static BOT_VERSION: Lazy = Lazy::new(|| { format!("v{}", cargo_version) }); +pub async fn token_path() -> TokenServiceApi { + let client = super::tsclient::TSClient::new().get().await.unwrap(); + client +} + pub fn concat_message(messages: Vec) -> String { messages.join("\n") } diff --git a/src/main.rs b/src/main.rs index b787a5c..8376117 100644 --- a/src/main.rs +++ b/src/main.rs @@ -59,7 +59,6 @@ async fn on_ready( #[tokio::main] async fn main() { - let token = var("DISCORD_TOKEN").expect("Expected a \"DISCORD_TOKEN\" in the envvar but none was found"); let db = controllers::database::DatabaseController::new().await.expect("Failed to connect to database"); let framework = poise::Framework::builder() @@ -91,7 +90,7 @@ async fn main() { .setup(|ctx, ready, framework| Box::pin(on_ready(ctx, ready, framework))) .build(); - let mut client = ClientBuilder::new(token, GatewayIntents::GUILDS) + let mut client = ClientBuilder::new(internals::utils::token_path().await.main, GatewayIntents::GUILDS) .framework(framework) .await.expect("Error creating client");