pub mod authorize;
pub mod client_auth;
pub mod discovery;
pub mod introspect;
pub mod params;
pub mod revoke;
pub mod token;
use crate::server::{AuthorizationServer, DISCOVERY_PATH};
use rustlavel_http::Router;
pub fn register(server: &AuthorizationServer, router: &mut Router) {
let mount = server.settings().mount.clone();
let authorize = server.clone();
let decide = server.clone();
router.group(&mount, |browser_facing| {
browser_facing.middleware(rustlavel_auth::Csrf::new());
browser_facing
.get("/authorize", move |request| {
let server = authorize.clone();
async move { authorize::show(server, request).await }
})
.name("oauth.authorize")
.describe("Begin an authorization code flow");
browser_facing
.post("/authorize", move |request| {
let server = decide.clone();
async move { authorize::decide(server, request).await }
})
.name("oauth.authorize.decide")
.describe("Record the user's decision on the consent screen");
});
let issue = server.clone();
router
.post(&format!("{mount}/token"), move |request| {
let server = issue.clone();
async move { token::issue(server, request).await }
})
.name("oauth.token")
.describe("Exchange a grant for an access token");
let revoking = server.clone();
router
.post(&format!("{mount}/revoke"), move |request| {
let server = revoking.clone();
async move { revoke::revoke(server, request).await }
})
.name("oauth.revoke")
.describe("Revoke an access or refresh token");
let introspecting = server.clone();
router
.post(&format!("{mount}/introspect"), move |request| {
let server = introspecting.clone();
async move { introspect::introspect(server, request).await }
})
.name("oauth.introspect")
.describe("Ask whether a token is live, and what it allows");
let discovering = server.clone();
router
.get(DISCOVERY_PATH, move |request| {
let server = discovering.clone();
async move { discovery::document(server, request).await }
})
.name("oauth.discovery")
.describe("The authorization server metadata document");
}