diff options
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/state/database.rs | 1 | ||||
| -rw-r--r-- | src/server/state/mod.rs | 27 |
2 files changed, 25 insertions, 3 deletions
diff --git a/src/server/state/database.rs b/src/server/state/database.rs index 32d3f98..f8fd332 100644 --- a/src/server/state/database.rs +++ b/src/server/state/database.rs @@ -4,7 +4,6 @@ use tracing::{debug, trace}; use crate::config::DatabaseOptions; - pub(super) async fn connect(opts: &DatabaseOptions) -> Result<PgPool> { trace!(host = ?opts.url.host(), "connecting to database"); let pg = PgPoolOptions::new() 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)?) +} |
