use axum::{http::StatusCode, response::IntoResponse}; use openidconnect::{core::CoreErrorResponseType, ClaimsVerificationError, StandardErrorResponse}; use tracing::error; type UserInfoError = openidconnect::UserInfoError>; type RequestTokenError = openidconnect::RequestTokenError< openidconnect::reqwest::Error, StandardErrorResponse, >; #[derive(thiserror::Error, Debug)] pub enum BridgeError { #[error("Invalid request: {0}")] InvalidRequest(String), #[error("Requesting token failed")] OpenidRequestTokenError(#[from] RequestTokenError), #[error("Requesting user info failed")] OpenidUserInfoError(#[from] UserInfoError), #[error("Failed to configure OpenId request")] OpenIdConfigurationError(#[from] openidconnect::ConfigurationError), #[error("Unexpected authorization error")] UnexpectedInvalidAuthorization(#[from] ClaimsVerificationError), #[error("Authentication error")] SigningFailed(#[from] openidconnect::SigningError), #[error("Database error")] SqlxError(#[from] sqlx::Error), #[error("Uuid parse failed")] UuidError(#[from] uuid::Error), #[error("Internal server error: {0}")] Internal(String), #[error("Duration out of range")] DurationOutOfRange(#[from] time::OutOfRangeError), } impl IntoResponse for BridgeError { fn into_response(self) -> axum::response::Response { error!("Error occurred: {self:?}"); (StatusCode::INTERNAL_SERVER_ERROR, format!("Error: {self}")).into_response() } }