1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
use std::error;
use std::fmt;
/// Errors which should not or need not be communicated to the requesting party but which are of
/// interest to the server. See the documentation for each enum variant for more documentation on
/// each as some may have an expected response. These include badly formatted headers or url encoded
/// body, unexpected parameters, or security relevant required parameters.
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum OAuthError {
/// Deny authorization to the client by essentially dropping the request.
///
/// For example, this response is given when an incorrect client has been provided in the
/// authorization request in order to avoid potential indirect denial of service vulnerabilities.
DenySilently,
/// One of the primitives used to complete the operation failed.
///
/// This indicates a problem in the server configuration or the frontend library or the
/// implementation of the primitive underlying those two.
PrimitiveError,
/// The incoming request was malformed.
///
/// This implies that it did not change any internal state. Note that this differs from an
/// `InvalidRequest` as in the OAuth specification. `BadRequest` is reported by a frontend
/// implementation of a request, due to http non-compliance, while an `InvalidRequest` is a
/// type of response to an authorization request by a user-agent that is sent to the specified
/// client (although it may be caused by a bad request).
BadRequest,
}
impl fmt::Display for OAuthError {
fn fmt(&self, fmt: &mut fmt::Formatter) -> Result<(), fmt::Error> {
match self {
OAuthError::DenySilently => fmt.write_str("OAuthError: Request should be silently denied"),
OAuthError::PrimitiveError => fmt.write_str("OAuthError: Server component failed"),
OAuthError::BadRequest => fmt.write_str("OAuthError: Bad request"),
}
}
}
impl error::Error for OAuthError {}