diff options
| author | rtkay123 <dev@kanjala.com> | 2026-02-02 17:09:32 +0200 |
|---|---|---|
| committer | rtkay123 <dev@kanjala.com> | 2026-02-02 17:09:32 +0200 |
| commit | 1f76530bc5001d9a9088f269db6c03cf287b67e6 (patch) | |
| tree | 99b4873b9813570236fdc4bb71c444c958036e58 /src/server/driver/auth.rs | |
| parent | 549d98f3b457ddfc6dffbe2fad406da4ac50ebc7 (diff) | |
| download | sellershut-1f76530bc5001d9a9088f269db6c03cf287b67e6.tar.bz2 sellershut-1f76530bc5001d9a9088f269db6c03cf287b67e6.zip | |
feat: create auth session
Diffstat (limited to 'src/server/driver/auth.rs')
| -rw-r--r-- | src/server/driver/auth.rs | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/src/server/driver/auth.rs b/src/server/driver/auth.rs index 9215372..28e9285 100644 --- a/src/server/driver/auth.rs +++ b/src/server/driver/auth.rs @@ -1,8 +1,17 @@ +use anyhow::Result; +use async_session::{Session, SessionStore}; +use async_trait::async_trait; use bon::Builder; use oauth2::{AuthUrl, ClientId, ClientSecret, EndpointNotSet, EndpointSet, RedirectUrl, TokenUrl}; use secrecy::{ExposeSecret, SecretString}; +use tracing::{instrument, trace}; -#[derive(Builder)] +use crate::server::driver::Services; + +pub(super) static COOKIE_NAME: &str = "SESSION"; +pub(super) static CSRF_TOKEN: &str = "csrf_token"; + +#[derive(Builder, Debug)] pub struct ClientOptions { client_id: String, client_secret: SecretString, @@ -20,6 +29,7 @@ pub type OauthClient = oauth2::basic::BasicClient< >; pub fn oauth_client(opts: &ClientOptions) -> anyhow::Result<OauthClient> { + dbg!(&opts); let redirect_url = RedirectUrl::new(opts.redirect_url.to_owned())?; let client_id = ClientId::new(opts.client_id.to_owned()); let auth_url = AuthUrl::new(opts.auth_url.to_owned())?; @@ -32,3 +42,30 @@ pub fn oauth_client(opts: &ClientOptions) -> anyhow::Result<OauthClient> { .set_token_uri(token_url) .set_redirect_uri(redirect_url)) } + +#[async_trait] +impl SessionStore for Services { + #[instrument(skip(self))] + async fn load_session(&self, cookie_value: String) -> Result<Option<Session>> { + let id = Session::id_from_cookie_value(&cookie_value)?; + let mut connection = self.database.acquire().await?; + + todo!() + } + + #[instrument(skip(self, session), fields(id = session.id()))] + async fn store_session(&self, session: Session) -> Result<Option<String>> { + let id = session.id(); + trace!("storing session"); + let mut connection = self.database.acquire().await?; + Ok(session.into_cookie_value()) + } + + async fn destroy_session(&self, session: Session) -> Result<()> { + todo!() + } + + async fn clear_store(&self) -> Result<()> { + todo!() + } +} |
