use std::time::Duration;
use axum::{http::StatusCode, response::IntoResponse};
pub use crate::after_login::AfterLoginCookies;
pub struct TokenResponse {
pub access_token: String,
pub refresh_token: Option<String>,
pub expires_in: Option<Duration>,
}
#[derive(Debug, Clone)]
pub struct AuthorizationErrorResponse {
pub error: String,
pub error_description: Option<String>,
pub error_uri: Option<String>,
}
pub trait OAuth2Handler: Send + Sync + 'static {
fn after_login(
&self,
token_res: TokenResponse,
_context: &mut AfterLoginCookies<'_>,
) -> impl Future<Output = impl IntoResponse> + Send;
fn on_error(
&self,
error: AuthorizationErrorResponse,
) -> impl Future<Output = impl IntoResponse> + Send {
async move {
let _ = error;
StatusCode::UNAUTHORIZED
}
}
}