wae_authentication/jwt/
errors.rs1use std::fmt;
4
5#[derive(Debug)]
7pub enum JwtError {
8 InvalidToken(String),
10
11 TokenExpired,
13
14 TokenNotValidYet,
16
17 InvalidSignature,
19
20 InvalidAlgorithm,
22
23 MissingClaim(String),
25
26 InvalidClaim(String),
28
29 InvalidIssuer { expected: String, actual: String },
31
32 InvalidAudience,
34
35 KeyError(String),
37
38 EncodingError(String),
40
41 DecodingError(String),
43
44 Other(String),
46}
47
48impl fmt::Display for JwtError {
49 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
50 match self {
51 JwtError::InvalidToken(msg) => write!(f, "Invalid token: {}", msg),
52 JwtError::TokenExpired => write!(f, "Token has expired"),
53 JwtError::TokenNotValidYet => write!(f, "Token is not yet valid"),
54 JwtError::InvalidSignature => write!(f, "Invalid signature"),
55 JwtError::InvalidAlgorithm => write!(f, "Invalid algorithm"),
56 JwtError::MissingClaim(claim) => write!(f, "Missing required claim: {}", claim),
57 JwtError::InvalidClaim(claim) => write!(f, "Invalid claim: {}", claim),
58 JwtError::InvalidIssuer { expected, actual } => {
59 write!(f, "Invalid issuer: expected {}, got {}", expected, actual)
60 }
61 JwtError::InvalidAudience => write!(f, "Invalid audience"),
62 JwtError::KeyError(msg) => write!(f, "Key error: {}", msg),
63 JwtError::EncodingError(msg) => write!(f, "Encoding error: {}", msg),
64 JwtError::DecodingError(msg) => write!(f, "Decoding error: {}", msg),
65 JwtError::Other(msg) => write!(f, "JWT error: {}", msg),
66 }
67 }
68}
69
70impl std::error::Error for JwtError {}
71
72impl From<jsonwebtoken::errors::Error> for JwtError {
73 fn from(err: jsonwebtoken::errors::Error) -> Self {
74 use jsonwebtoken::errors::ErrorKind;
75
76 match err.kind() {
77 ErrorKind::InvalidToken => JwtError::InvalidToken("malformed token".into()),
78 ErrorKind::InvalidSignature => JwtError::InvalidSignature,
79 ErrorKind::ExpiredSignature => JwtError::TokenExpired,
80 ErrorKind::ImmatureSignature => JwtError::TokenNotValidYet,
81 ErrorKind::InvalidAlgorithm => JwtError::InvalidAlgorithm,
82 ErrorKind::MissingRequiredClaim(claim) => JwtError::MissingClaim(claim.clone()),
83 ErrorKind::InvalidIssuer => JwtError::InvalidClaim("issuer".into()),
84 ErrorKind::InvalidAudience => JwtError::InvalidAudience,
85 ErrorKind::InvalidSubject => JwtError::InvalidClaim("subject".into()),
86 _ => JwtError::Other(err.to_string()),
87 }
88 }
89}
90
91pub type JwtResult<T> = Result<T, JwtError>;