pub mod extractor;
pub use extractor::{
ChainedTokenExtractor, DebugTokenExtractor, HeaderTokenExtractor, Headers, TokenExtractor, TokenExtractorConfig,
};
pub mod core {
use crate::claims::{CognitoAccessTokenClaims, CognitoIdTokenClaims};
use crate::common::error::JwtError;
use crate::integration::Headers;
use crate::verifier::CognitoJwtVerifier;
use crate::JwtVerifier;
pub fn extract_token<H: Headers>(
headers: &H,
header_name: &str,
token_prefix: Option<&str>,
) -> Result<Option<String>, JwtError> {
let header_str = match headers.get(header_name) {
Some(value) => value,
None => return Ok(None), };
if let Some(prefix) = token_prefix {
if !header_str.starts_with(prefix) {
return Err(JwtError::InvalidToken(format!(
"{} header must start with '{}'",
header_name, prefix
)));
}
Ok(Some(header_str[prefix.len()..].to_string()))
} else {
Ok(Some(header_str.to_string()))
}
}
pub fn extract_bearer_token<H: Headers>(
headers: &H,
header_name: &str,
) -> Result<Option<String>, JwtError> {
extract_token(headers, header_name, Some("Bearer "))
}
pub async fn verify_id_token(
verifier: &CognitoJwtVerifier,
token: &str,
) -> Result<CognitoIdTokenClaims, JwtError> {
verifier.verify::<CognitoIdTokenClaims>(token).await
}
pub async fn verify_access_token(
verifier: &CognitoJwtVerifier,
token: &str,
) -> Result<CognitoAccessTokenClaims, JwtError> {
verifier.verify::<CognitoAccessTokenClaims>(token).await
}
}
#[cfg(feature = "axum-integration")]
pub mod axum;