use snafu::Snafu;
use crate::{
TokenType,
error::{ChallengeParam, ToRfc6750Error, TokenErrorCode, TokenValidationError},
validator::extract::TokenExtractError,
};
#[derive(Debug, Snafu)]
#[non_exhaustive]
pub enum MultiIssuerError {
#[snafu(display("token presentation error"), context(false))]
Extract {
source: TokenExtractError,
},
#[snafu(display("unrecognized token issuer"))]
UnrecognizedIssuer,
#[snafu(display("token validation error"))]
Validation {
error: Box<dyn ToRfc6750Error>,
},
}
impl ToRfc6750Error for MultiIssuerError {
fn attempted_scheme(&self) -> Option<TokenType> {
match self {
Self::Extract { source } => source.attempted_scheme(),
Self::UnrecognizedIssuer => None,
Self::Validation { error } => error.attempted_scheme(),
}
}
fn token_error(&self) -> TokenValidationError {
match self {
Self::Extract { source } => source.token_error(),
Self::UnrecognizedIssuer => TokenValidationError::Client(TokenErrorCode::InvalidToken),
Self::Validation { error } => error.token_error(),
}
}
fn error_description(&self) -> Option<String> {
match self {
Self::Extract { source } => source.error_description(),
Self::UnrecognizedIssuer => Some("unrecognized token issuer".to_owned()),
Self::Validation { error } => error.error_description(),
}
}
fn extra_params(&self) -> Vec<ChallengeParam> {
match self {
Self::Extract { source } => source.extra_params(),
Self::UnrecognizedIssuer => Vec::new(),
Self::Validation { error } => error.extra_params(),
}
}
}