aboutsummaryrefslogtreecommitdiffstats
path: root/src/server/state/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/state/mod.rs')
-rw-r--r--src/server/state/mod.rs27
1 files changed, 25 insertions, 2 deletions
diff --git a/src/server/state/mod.rs b/src/server/state/mod.rs
index f4bf029..0726689 100644
--- a/src/server/state/mod.rs
+++ b/src/server/state/mod.rs
@@ -1,17 +1,40 @@
pub mod database;
+use sellershut_auth::{ClientOptions, OauthClient};
use sqlx::PgPool;
+#[cfg(feature = "oauth-discord")]
+use url::Url;
-use crate::{config::Config};
+use crate::config::Config;
+#[cfg(feature = "oauth-discord")]
+use crate::config::DiscordOauth;
pub struct AppState {
database: PgPool,
+ #[cfg(feature = "oauth-discord")]
+ oauth_discord: OauthClient,
}
impl AppState {
pub async fn new(config: &Config) -> anyhow::Result<Self> {
let database = database::connect(&config.database).await?;
- Ok(Self{database})
+ Ok(Self {
+ database,
+ oauth_discord: discord_client(&config.oauth.discord, &config.oauth.oauth_redirect_url)?,
+ })
}
}
+
+#[cfg(feature = "oauth-discord")]
+fn discord_client(disc: &DiscordOauth, redirect: &Url)->anyhow::Result<OauthClient> {
+ let discord_opts = ClientOptions::builder()
+ .client_id(disc.client_id.to_owned())
+ .redirect_url(redirect.to_string())
+ .auth_url(disc.auth_url.to_string())
+ .client_secret(disc.client_secret.clone())
+ .token_url(disc.token_url.to_string())
+ .build();
+
+ Ok(sellershut_auth::oauth_client(&discord_opts)?)
+}