pub mod authorize;
pub mod bearer;
pub mod client_metadata;
pub mod metadata;
pub mod models;
pub mod pkce;
pub mod registration;
pub mod resource;
pub mod storage;
pub mod token;
pub use authorize::{authorize_get, authorize_post};
pub use bearer::{
BearerError, BearerToken, BearerTokenConfig, WwwAuthenticate, unauthorized_response,
validate_bearer_token,
};
pub use client_metadata::{
ClientIdMetadataDocument, ClientMetadataError, is_client_id_metadata_url,
validate_client_id_url, validate_metadata_document, validate_redirect_uri,
};
pub use metadata::{authorization_server_metadata, openid_configuration};
pub use registration::register_client;
pub use resource::protected_resource_metadata;
pub use storage::{InMemoryOAuthStorage, OAuthStorage, OAuthStorageError};
pub use token::token_endpoint;
use axum::{
Router,
routing::{get, post},
};
use std::sync::Arc;
#[derive(Clone)]
pub struct OAuthState {
pub storage: Arc<dyn OAuthStorage>,
}
impl OAuthState {
pub fn new_in_memory() -> Self {
Self {
storage: Arc::new(InMemoryOAuthStorage::new()),
}
}
pub fn new(storage: Arc<dyn OAuthStorage>) -> Self {
Self { storage }
}
}
pub fn oauth_router() -> Router<OAuthState> {
Router::new()
.route(
"/.well-known/oauth-authorization-server",
get(authorization_server_metadata),
)
.route(
"/.well-known/openid-configuration",
get(openid_configuration),
)
.route(
"/.well-known/oauth-protected-resource",
get(protected_resource_metadata),
)
.route("/oauth/register", post(register_client))
.route("/oauth/authorize", get(authorize_get).post(authorize_post))
.route("/oauth/token", post(token_endpoint))
}