aboutsummaryrefslogtreecommitdiffstats
path: root/src/server
diff options
context:
space:
mode:
authorrtkay123 <dev@kanjala.com>2026-02-01 15:20:13 +0200
committerrtkay123 <dev@kanjala.com>2026-02-01 15:20:13 +0200
commit78f61ccdf66572d7432b5b627994038479103653 (patch)
tree3b752267d04d041c35efe5a9f5c732988179f020 /src/server
parentce65d9eeafcd1f9d5c3adef1c9b1af6258ee711a (diff)
downloadsellershut-78f61ccdf66572d7432b5b627994038479103653.tar.bz2
sellershut-78f61ccdf66572d7432b5b627994038479103653.zip
feat: oauth from config
Diffstat (limited to 'src/server')
-rw-r--r--src/server/state/database.rs1
-rw-r--r--src/server/state/mod.rs27
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)?)
+}