diff options
author | Kjetil Orbekk <kj@orbekk.com> | 2022-10-08 20:51:51 -0400 |
---|---|---|
committer | Kjetil Orbekk <kj@orbekk.com> | 2022-10-08 20:51:51 -0400 |
commit | adb006199c55b41b84862004eb53477a4f175524 (patch) | |
tree | 05edba531736a8c296b3f33cb944b5becf72948a /server/src/auth.rs | |
parent | a7d833d6b7729f09bef891b0c8b7bd998ac17abf (diff) |
Add skeleton LoggedInUser extractor
Diffstat (limited to 'server/src/auth.rs')
-rw-r--r-- | server/src/auth.rs | 42 |
1 files changed, 34 insertions, 8 deletions
diff --git a/server/src/auth.rs b/server/src/auth.rs index e30cd6e..0be1b85 100644 --- a/server/src/auth.rs +++ b/server/src/auth.rs @@ -7,6 +7,8 @@ use std::{ }; use crate::error::BridgeError; +use async_trait::async_trait; +use axum::{extract::FromRequest, http}; use chrono::{DateTime, Utc}; use lru::LruCache; use openidconnect::{ @@ -20,7 +22,8 @@ use openidconnect::{ use protocol::UserInfo; use serde::{Deserialize, Serialize}; use sqlx::PgPool; -use tracing::{info, error, debug}; +use tower_cookies::Cookies; +use tracing::{debug, error, info}; use uuid::Uuid; pub struct LoginState { @@ -143,19 +146,19 @@ impl Authenticator { return Ok(()); } info!("Refreshing expiring token: {}", session.expiration); - let refresh_start = Utc::now(); + let refresh_start = Utc::now(); let new_token = self .client .exchange_refresh_token(&session.refresh_token) .request_async(async_http_client) .await?; debug!("Got new token: {new_token:#?}"); - // TODO: Validate token? - if let Some(expires_in) = new_token.expires_in() { - session.expiration = refresh_start + chrono::Duration::from_std(expires_in)?; - } else { - error!("Token is missing expiration! Will refresh token every time."); - } + // TODO: Validate token? + if let Some(expires_in) = new_token.expires_in() { + session.expiration = refresh_start + chrono::Duration::from_std(expires_in)?; + } else { + error!("Token is missing expiration! Will refresh token every time."); + } if let Some(refresh_token) = new_token.refresh_token() { session.refresh_token = refresh_token.clone(); } @@ -331,3 +334,26 @@ pub async fn fetch_authenticated_session( })), } } + +#[derive(Clone, Debug, Default)] +pub struct LoggedInUser { + _priv: (), +} + +#[async_trait] +impl<B> FromRequest<B> for LoggedInUser +where + B: Send, +{ + type Rejection = (http::StatusCode, &'static str); + + async fn from_request( + req: &mut axum::extract::RequestParts<B>, + ) -> Result<Self, Self::Rejection> { + info!( + "Creating LoggedInUser; found cookies: {:?}", + req.extensions().get::<Cookies>().cloned() + ); + Ok(LoggedInUser { _priv: () }) + } +} |