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}