this repo has no description
1mod grants; 2mod helpers; 3mod introspect; 4mod types; 5 6use axum::{ 7 Form, Json, 8 extract::State, 9 http::HeaderMap, 10}; 11 12use crate::state::AppState; 13use crate::oauth::OAuthError; 14 15pub use grants::{handle_authorization_code_grant, handle_refresh_token_grant}; 16pub use helpers::{create_access_token, extract_token_claims, verify_pkce, TokenClaims}; 17pub use introspect::{ 18 introspect_token, revoke_token, IntrospectRequest, IntrospectResponse, RevokeRequest, 19}; 20pub use types::{TokenRequest, TokenResponse}; 21 22pub async fn token_endpoint( 23 State(state): State<AppState>, 24 headers: HeaderMap, 25 Form(request): Form<TokenRequest>, 26) -> Result<(HeaderMap, Json<TokenResponse>), OAuthError> { 27 let dpop_proof = headers 28 .get("DPoP") 29 .and_then(|v| v.to_str().ok()) 30 .map(|s| s.to_string()); 31 32 match request.grant_type.as_str() { 33 "authorization_code" => { 34 handle_authorization_code_grant(state, headers, request, dpop_proof).await 35 } 36 "refresh_token" => { 37 handle_refresh_token_grant(state, headers, request, dpop_proof).await 38 } 39 _ => Err(OAuthError::UnsupportedGrantType(format!( 40 "Unsupported grant_type: {}", 41 request.grant_type 42 ))), 43 } 44}