pub mod grant {
pub const AUTHORIZATION_CODE: &str = "authorization_code";
pub const REFRESH_TOKEN: &str = "refresh_token";
pub const CLIENT_CREDENTIALS: &str = "client_credentials";
pub const IMPLICIT: &str = "implicit";
pub const JWT_BEARER: &str = "urn:ietf:params:oauth:grant-type:jwt-bearer";
pub const TOKEN_EXCHANGE: &str = "urn:ietf:params:oauth:grant-type:token-exchange";
pub fn covers(registered: &[String], grant_type: &str) -> bool {
match registered {
[] => grant_type == AUTHORIZATION_CODE,
registered => registered.iter().any(|grant| grant == grant_type),
}
}
}
pub mod client_auth {
pub const NONE: &str = "none";
pub const CLIENT_SECRET_BASIC: &str = "client_secret_basic";
pub const CLIENT_SECRET_POST: &str = "client_secret_post";
pub const CLIENT_SECRET_JWT: &str = "client_secret_jwt";
pub const PRIVATE_KEY_JWT: &str = "private_key_jwt";
pub const ASSERTION_TYPE_JWT_BEARER: &str =
"urn:ietf:params:oauth:client-assertion-type:jwt-bearer";
}
pub mod auth_scheme {
pub const BEARER: &str = "Bearer";
pub const DPOP: &str = "DPoP";
}
pub mod token_type {
pub const ACCESS_TOKEN: &str = "urn:ietf:params:oauth:token-type:access_token";
pub const REFRESH_TOKEN: &str = "urn:ietf:params:oauth:token-type:refresh_token";
pub const ID_TOKEN: &str = "urn:ietf:params:oauth:token-type:id_token";
pub const JWT: &str = "urn:ietf:params:oauth:token-type:jwt";
pub const ID_JAG: &str = "urn:ietf:params:oauth:token-type:id-jag";
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_spells_the_registered_urns() {
assert_eq!(
grant::JWT_BEARER,
"urn:ietf:params:oauth:grant-type:jwt-bearer"
);
assert_eq!(
grant::TOKEN_EXCHANGE,
"urn:ietf:params:oauth:grant-type:token-exchange"
);
assert_eq!(
client_auth::ASSERTION_TYPE_JWT_BEARER,
"urn:ietf:params:oauth:client-assertion-type:jwt-bearer"
);
assert_eq!(
token_type::ACCESS_TOKEN,
"urn:ietf:params:oauth:token-type:access_token"
);
assert_eq!(
token_type::ID_JAG,
"urn:ietf:params:oauth:token-type:id-jag"
);
}
}